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.transformations; 017 018import static com.hp.hpl.jena.graph.NodeFactory.createLiteral; 019import static com.hp.hpl.jena.graph.NodeFactory.createURI; 020import static com.hp.hpl.jena.graph.Triple.create; 021import static java.util.stream.Stream.of; 022import static org.fcrepo.transform.transformations.LDPathTransform.CONFIGURATION_FOLDER; 023import static org.fcrepo.transform.transformations.LDPathTransform.getNodeTypeTransform; 024import static org.junit.Assert.assertEquals; 025import static org.junit.Assert.assertTrue; 026import static org.mockito.Mockito.RETURNS_DEEP_STUBS; 027import static org.mockito.Mockito.mock; 028import static org.mockito.Mockito.when; 029import static org.mockito.MockitoAnnotations.initMocks; 030 031import java.io.ByteArrayInputStream; 032import java.io.InputStream; 033import java.util.Collection; 034import java.util.Map; 035import java.util.List; 036 037import javax.jcr.Node; 038import javax.jcr.RepositoryException; 039import javax.jcr.Session; 040import javax.jcr.nodetype.NodeType; 041import javax.ws.rs.WebApplicationException; 042 043import org.fcrepo.kernel.api.RdfStream; 044import org.fcrepo.kernel.api.rdf.DefaultRdfStream; 045import org.junit.Before; 046import org.junit.Test; 047import org.mockito.Mock; 048import org.mockito.Mockito; 049 050/** 051 * <p>LDPathTransformTest class.</p> 052 * 053 * @author cbeer 054 */ 055public class LDPathTransformTest { 056 057 @Mock 058 private Node mockNode; 059 060 @Mock 061 private Session mockSession; 062 063 @Mock 064 private InputStream mockInputStream; 065 066 @Mock 067 private NodeType mockNodeType; 068 069 private LDPathTransform testObj; 070 071 @Before 072 public void setUp() throws RepositoryException { 073 initMocks(this); 074 075 when(mockNode.getSession()).thenReturn(mockSession); 076 } 077 078 @Test(expected = WebApplicationException.class) 079 public void testGetNodeTypeSpecificLdpathProgramForMissingProgram() throws RepositoryException { 080 final Node mockConfigNode = mock(Node.class); 081 when(mockSession.getNode(CONFIGURATION_FOLDER + "some-program")).thenReturn(mockConfigNode); 082 083 when(mockNode.getMixinNodeTypes()).thenReturn(new NodeType[]{}); 084 final NodeType mockNtBase = mock(NodeType.class); 085 when(mockNodeType.getSupertypes()).thenReturn(new NodeType[] { mockNtBase }); 086 when(mockNode.getPrimaryNodeType()).thenReturn(mockNodeType); 087 getNodeTypeTransform(mockNode, "some-program"); 088 } 089 090 @Test 091 public void testGetNodeTypeSpecificLdpathProgramForNodeTypeProgram() throws RepositoryException { 092 final Node mockConfigNode = mock(Node.class); 093 final Node mockTypeConfigNode = mock(Node.class, RETURNS_DEEP_STUBS); 094 when(mockSession.getNode(CONFIGURATION_FOLDER + "some-program")).thenReturn(mockConfigNode); 095 096 final NodeType mockNtBase = mock(NodeType.class); 097 when(mockNodeType.getSupertypes()).thenReturn(new NodeType[] { mockNtBase }); 098 when(mockNode.getPrimaryNodeType()).thenReturn(mockNodeType); 099 when(mockNode.getMixinNodeTypes()).thenReturn(new NodeType[] {}); 100 when(mockNodeType.toString()).thenReturn("custom:type"); 101 when(mockConfigNode.hasNode("custom:type")).thenReturn(true); 102 when(mockConfigNode.getNode("custom:type")).thenReturn(mockTypeConfigNode); 103 when(mockTypeConfigNode.getNode("jcr:content").getProperty("jcr:data").getBinary().getStream()).thenReturn( 104 mockInputStream); 105 final LDPathTransform nodeTypeSpecificLdpathProgramStream = getNodeTypeTransform(mockNode, "some-program"); 106 107 assertEquals(new LDPathTransform(mockInputStream), nodeTypeSpecificLdpathProgramStream); 108 } 109 110 @Test 111 public void testGetNodeTypeSpecificLdpathProgramForSupertypeProgram() throws RepositoryException { 112 final Node mockConfigNode = mock(Node.class); 113 final Node mockTypeConfigNode = mock(Node.class, Mockito.RETURNS_DEEP_STUBS); 114 when(mockSession.getNode(LDPathTransform.CONFIGURATION_FOLDER + "some-program")).thenReturn(mockConfigNode); 115 116 final NodeType mockNtBase = mock(NodeType.class); 117 when(mockNodeType.getSupertypes()).thenReturn(new NodeType[] { mockNtBase }); 118 when(mockNodeType.toString()).thenReturn("custom:type"); 119 when(mockNtBase.toString()).thenReturn("nt:base"); 120 when(mockNode.getPrimaryNodeType()).thenReturn(mockNodeType); 121 when(mockNode.getMixinNodeTypes()).thenReturn(new NodeType[]{}); 122 when(mockConfigNode.hasNode("custom:type")).thenReturn(false); 123 124 when(mockConfigNode.hasNode("nt:base")).thenReturn(true); 125 when(mockConfigNode.getNode("nt:base")).thenReturn(mockTypeConfigNode); 126 when(mockTypeConfigNode.getNode("jcr:content").getProperty("jcr:data").getBinary().getStream()).thenReturn( 127 mockInputStream); 128 129 final LDPathTransform nodeTypeSpecificLdpathProgramStream = 130 getNodeTypeTransform(mockNode, "some-program"); 131 132 assertEquals(new LDPathTransform(mockInputStream), nodeTypeSpecificLdpathProgramStream); 133 } 134 135 @Test 136 public void testProgramQuery() { 137 138 final RdfStream rdfStream = new DefaultRdfStream(createURI("abc"), of( 139 create(createURI("abc"), 140 createURI("http://purl.org/dc/elements/1.1/title"), 141 createLiteral("some-title")))); 142 final InputStream testReader = new ByteArrayInputStream("title = dc:title :: xsd:string ;".getBytes()); 143 144 testObj = new LDPathTransform(testReader); 145 final List<Map<String,Collection<Object>>> stringCollectionMapList = testObj.apply(rdfStream); 146 final Map<String,Collection<Object>> stringCollectionMap = stringCollectionMapList.get(0); 147 148 assert(stringCollectionMap != null); 149 assertEquals(1, stringCollectionMap.size()); 150 assertEquals(1, stringCollectionMap.get("title").size()); 151 assertTrue(stringCollectionMap.get("title").contains("some-title")); 152 } 153}