001/* 002 * Copyright 2015 DuraSpace, Inc. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.fcrepo.transform.http; 017 018import static com.hp.hpl.jena.graph.NodeFactory.createURI; 019import static java.util.stream.Stream.empty; 020import static org.apache.jena.riot.WebContent.contentTypeSPARQLQuery; 021import static org.fcrepo.kernel.api.RequiredRdfContext.LDP_CONTAINMENT; 022import static org.fcrepo.kernel.api.RequiredRdfContext.LDP_MEMBERSHIP; 023import static org.fcrepo.kernel.api.RequiredRdfContext.PROPERTIES; 024import static org.fcrepo.kernel.api.RequiredRdfContext.SERVER_MANAGED; 025import static org.fcrepo.http.commons.test.util.TestHelpers.getUriInfoImpl; 026import static org.fcrepo.http.commons.test.util.TestHelpers.mockSession; 027import static org.mockito.Matchers.any; 028import static org.mockito.Matchers.eq; 029import static org.mockito.Mockito.doReturn; 030import static org.mockito.Mockito.spy; 031import static org.mockito.Mockito.verify; 032import static org.mockito.Mockito.when; 033import static org.mockito.MockitoAnnotations.initMocks; 034import static org.springframework.test.util.ReflectionTestUtils.setField; 035 036import java.io.ByteArrayInputStream; 037import java.io.InputStream; 038import java.util.EnumSet; 039 040import javax.jcr.Node; 041import javax.jcr.Session; 042import javax.ws.rs.core.MediaType; 043import javax.ws.rs.core.UriInfo; 044 045import com.hp.hpl.jena.graph.Triple; 046import org.fcrepo.kernel.api.RequiredRdfContext; 047import org.fcrepo.kernel.api.RdfStream; 048import org.fcrepo.kernel.api.identifiers.IdentifierConverter; 049import org.fcrepo.kernel.api.rdf.DefaultRdfStream; 050import org.fcrepo.kernel.api.services.NodeService; 051import org.fcrepo.kernel.modeshape.FedoraResourceImpl; 052import org.fcrepo.transform.Transformation; 053import org.fcrepo.transform.TransformationFactory; 054import org.junit.Before; 055import org.junit.Test; 056import org.mockito.Mock; 057 058/** 059 * <p>FedoraTransformTest class.</p> 060 * 061 * @author cbeer 062 */ 063public class FedoraTransformTest { 064 065 @Mock 066 NodeService mockNodeService; 067 068 @Mock 069 FedoraResourceImpl mockResource; 070 071 @Mock 072 Node mockNode; 073 074 075 FedoraTransform testObj; 076 077 private Session mockSession; 078 private UriInfo uriInfo; 079 080 @Mock 081 private TransformationFactory mockTransformationFactory; 082 083 @Mock 084 Transformation<Object> mockTransform; 085 086 @Before 087 public void setUp() { 088 initMocks(this); 089 testObj = spy(new FedoraTransform("testObject")); 090 setField(testObj, "nodeService", mockNodeService); 091 setField(testObj, "transformationFactory", mockTransformationFactory); 092 093 this.uriInfo = getUriInfoImpl(); 094 setField(testObj, "uriInfo", uriInfo); 095 mockSession = mockSession(testObj); 096 setField(testObj, "session", mockSession); 097 098 when(mockResource.getNode()).thenReturn(mockNode); 099 when(mockResource.getPath()).thenReturn("/testObject"); 100 doReturn(mockResource).when(testObj).getResourceFromPath("testObject"); 101 } 102 103 @Test 104 @SuppressWarnings("unchecked") 105 public void testEvaluateTransform() { 106 107 when(mockResource.getTriples(any(IdentifierConverter.class), eq(PROPERTIES))) 108 .thenReturn(new DefaultRdfStream(createURI("abc"), empty())); 109 110 when(mockResource.getTriples(any(IdentifierConverter.class), eq(SERVER_MANAGED))) 111 .thenReturn(new DefaultRdfStream(createURI("abc"), empty())); 112 113 when(mockResource.getTriples(any(IdentifierConverter.class), eq(LDP_MEMBERSHIP))) 114 .thenReturn(new DefaultRdfStream(createURI("abc"), empty())); 115 116 when(mockResource.getTriples(any(IdentifierConverter.class), eq(LDP_CONTAINMENT))) 117 .thenReturn(new DefaultRdfStream(createURI("abc"), empty())); 118 119 final InputStream query = new ByteArrayInputStream(("SELECT ?title WHERE\n" + 120 "{\n" + 121 " <http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title .\n" + 122 "} ").getBytes()); 123 124 when(mockTransformationFactory.getTransform(MediaType.valueOf(contentTypeSPARQLQuery), query)).thenReturn( 125 mockTransform); 126 127 testObj.evaluateTransform(MediaType.valueOf(contentTypeSPARQLQuery), query); 128 129 verify(mockTransform).apply(any(RdfStream.class)); 130 } 131 132 133}