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.kernel.impl.models;
007
008import static org.junit.Assert.assertEquals;
009import static org.junit.Assert.assertTrue;
010import static org.mockito.Mockito.mock;
011import static org.mockito.Mockito.when;
012
013import java.util.UUID;
014import java.util.stream.Collectors;
015import java.util.stream.Stream;
016
017import org.fcrepo.kernel.api.Transaction;
018import org.fcrepo.kernel.api.identifiers.FedoraId;
019import org.fcrepo.kernel.api.models.Binary;
020import org.fcrepo.kernel.api.models.Container;
021import org.fcrepo.kernel.api.models.ResourceFactory;
022import org.fcrepo.persistence.api.PersistentStorageSessionManager;
023import org.junit.Before;
024import org.junit.Test;
025import org.junit.runner.RunWith;
026import org.mockito.Mock;
027import org.mockito.MockitoAnnotations;
028import org.springframework.test.context.ContextConfiguration;
029import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
030
031/**
032 * @author bbpennel
033 */
034@RunWith(SpringJUnit4ClassRunner.class)
035@ContextConfiguration("/containmentIndexTest.xml")
036public class ContainerImplTest {
037    @Mock
038    private PersistentStorageSessionManager sessionManager;
039    @Mock
040    private ResourceFactory resourceFactory;
041    @Mock
042    private Transaction transaction;
043
044    private final static String TX_ID = "transacted";
045
046    private FedoraId fedoraId;
047
048    @Before
049    public void setup() throws Exception {
050        MockitoAnnotations.openMocks(this);
051        when(transaction.getId()).thenReturn(UUID.randomUUID().toString());
052        when(transaction.isShortLived()).thenReturn(true);
053        fedoraId = FedoraId.create(UUID.randomUUID().toString());
054    }
055
056    @Test
057    public void getChildren_WithChildren() {
058        final var child1 = mock(Container.class);
059        final var child2 = mock(Binary.class);
060        final var childrenStream = Stream.of(child1, child2);
061
062        when(resourceFactory.getChildren(transaction, fedoraId)).thenReturn(childrenStream);
063
064        final Container container = new ContainerImpl(fedoraId, transaction, sessionManager, resourceFactory, null);
065
066        final var resultStream = container.getChildren();
067        final var childrenList = resultStream.collect(Collectors.toList());
068        assertEquals(2, childrenList.size());
069
070        assertTrue(childrenList.stream().anyMatch(c -> c instanceof Container));
071        assertTrue(childrenList.stream().anyMatch(c -> c instanceof Binary));
072    }
073}