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}