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}