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 org.apache.jena.riot.WebContent.contentTypeSPARQLQuery; 019import static org.fcrepo.http.commons.test.util.TestHelpers.getUriInfoImpl; 020import static org.fcrepo.http.commons.test.util.TestHelpers.mockSession; 021import static org.mockito.Matchers.any; 022import static org.mockito.Mockito.doReturn; 023import static org.mockito.Mockito.spy; 024import static org.mockito.Mockito.verify; 025import static org.mockito.Mockito.when; 026import static org.mockito.MockitoAnnotations.initMocks; 027import static org.springframework.test.util.ReflectionTestUtils.setField; 028 029import java.io.ByteArrayInputStream; 030import java.io.InputStream; 031 032import javax.jcr.Node; 033import javax.jcr.Session; 034import javax.ws.rs.core.MediaType; 035import javax.ws.rs.core.UriInfo; 036 037import org.fcrepo.kernel.api.identifiers.IdentifierConverter; 038import org.fcrepo.kernel.api.services.NodeService; 039import org.fcrepo.kernel.api.utils.iterators.RdfStream; 040import org.fcrepo.kernel.modeshape.FedoraResourceImpl; 041import org.fcrepo.transform.Transformation; 042import org.fcrepo.transform.TransformationFactory; 043import org.junit.Before; 044import org.junit.Test; 045import org.mockito.Mock; 046 047/** 048 * <p>FedoraTransformTest class.</p> 049 * 050 * @author cbeer 051 */ 052public class FedoraTransformTest { 053 054 @Mock 055 NodeService mockNodeService; 056 057 @Mock 058 FedoraResourceImpl mockResource; 059 060 @Mock 061 Node mockNode; 062 063 064 FedoraTransform testObj; 065 066 private Session mockSession; 067 private UriInfo uriInfo; 068 069 @Mock 070 private TransformationFactory mockTransformationFactory; 071 072 @Mock 073 Transformation<Object> mockTransform; 074 075 @Before 076 public void setUp() { 077 initMocks(this); 078 testObj = spy(new FedoraTransform("testObject")); 079 setField(testObj, "nodeService", mockNodeService); 080 setField(testObj, "transformationFactory", mockTransformationFactory); 081 082 this.uriInfo = getUriInfoImpl(); 083 setField(testObj, "uriInfo", uriInfo); 084 mockSession = mockSession(testObj); 085 setField(testObj, "session", mockSession); 086 087 when(mockResource.getNode()).thenReturn(mockNode); 088 when(mockResource.getPath()).thenReturn("/testObject"); 089 doReturn(mockResource).when(testObj).getResourceFromPath("testObject"); 090 } 091 092 @Test 093 @SuppressWarnings("unchecked") 094 public void testEvaluateTransform() { 095 final RdfStream stream = new RdfStream(); 096 when(mockResource.getTriples(any(IdentifierConverter.class), any(Class.class))).thenReturn(stream); 097 098 final InputStream query = new ByteArrayInputStream(("SELECT ?title WHERE\n" + 099 "{\n" + 100 " <http://example.org/book/book1> <http://purl.org/dc/elements/1.1/title> ?title .\n" + 101 "} ").getBytes()); 102 103 when(mockTransformationFactory.getTransform(MediaType.valueOf(contentTypeSPARQLQuery), query)).thenReturn( 104 mockTransform); 105 106 testObj.evaluateTransform(MediaType.valueOf(contentTypeSPARQLQuery), query); 107 108 verify(mockTransform).apply(any(RdfStream.class)); 109 } 110 111 112}