001/*
002 * The contents of this file are subject to the license and copyright
003 * detailed in the LICENSE and NOTICE files at the root of the source
004 * tree.
005 */
006package org.fcrepo.http.commons.api.rdf;
007
008import static com.google.common.collect.ImmutableBiMap.of;
009import static org.apache.jena.graph.NodeFactory.createURI;
010import static org.apache.jena.rdf.model.ModelFactory.createDefaultModel;
011import static org.junit.Assert.assertTrue;
012import static org.mockito.ArgumentMatchers.eq;
013import static org.mockito.Mockito.verify;
014import static org.mockito.Mockito.when;
015
016import java.util.Map;
017import javax.ws.rs.core.UriInfo;
018
019import org.fcrepo.kernel.api.RdfStream;
020import org.fcrepo.kernel.api.models.FedoraResource;
021import org.fcrepo.kernel.api.rdf.DefaultRdfStream;
022import org.junit.Before;
023import org.junit.Test;
024import org.junit.runner.RunWith;
025import org.mockito.Mock;
026import org.mockito.junit.MockitoJUnitRunner;
027import org.springframework.context.ApplicationContext;
028
029/**
030 * <p>HttpTripleUtilTest class.</p>
031 *
032 * @author awoods
033 */
034@RunWith(MockitoJUnitRunner.class)
035public class HttpTripleUtilTest {
036
037    private HttpTripleUtil testObj;
038
039    @Mock
040    private UriInfo mockUriInfo;
041
042    @Mock
043    private UriAwareResourceModelFactory mockBean1;
044
045    @Mock
046    private UriAwareResourceModelFactory mockBean2;
047
048    @Mock
049    private ApplicationContext mockContext;
050
051    @Mock
052    private FedoraResource mockResource;
053
054    @Before
055    public void setUp() {
056        testObj = new HttpTripleUtil();
057        testObj.setApplicationContext(mockContext);
058    }
059
060    @Test
061    public void shouldAddTriplesFromRegisteredBeans() {
062        final Map<String, UriAwareResourceModelFactory> mockBeans = of("doesnt", mockBean1, "matter", mockBean2);
063        when(mockContext.getBeansOfType(UriAwareResourceModelFactory.class)).thenReturn(mockBeans);
064        when(mockBean1.createModelForResource(eq(mockResource), eq(mockUriInfo))).thenReturn(
065                createDefaultModel());
066        when(mockBean2.createModelForResource(eq(mockResource), eq(mockUriInfo))).thenReturn(
067                createDefaultModel());
068
069        try (final RdfStream rdfStream = new DefaultRdfStream(createURI("info:subject"))) {
070
071            assertTrue(testObj.addHttpComponentModelsForResourceToStream(rdfStream, mockResource, mockUriInfo)
072                    .count() >= 0);
073
074            verify(mockBean1).createModelForResource(eq(mockResource), eq(mockUriInfo));
075            verify(mockBean2).createModelForResource(eq(mockResource), eq(mockUriInfo));
076        }
077    }
078}