package org.molgenis.data.support; import org.mockito.Matchers; import org.mockito.Mockito; import org.molgenis.data.Entity; import org.molgenis.data.Fetch; import org.molgenis.data.Query; import org.molgenis.data.RepositoryCapability; import org.molgenis.data.meta.model.Attribute; import org.molgenis.data.meta.model.EntityType; import org.testng.annotations.BeforeMethod; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; public class AbstractRepositoryTest { private AbstractRepository abstractRepository; private EntityType entityType; @BeforeTest public void beforeTest() { Attribute idAttr = when(mock(Attribute.class).getName()).thenReturn("id").getMock(); entityType = when(mock(EntityType.class).getName()).thenReturn("entity").getMock(); when(entityType.getIdAttribute()).thenReturn(idAttr); abstractRepository = Mockito.spy(new AbstractRepository() { @Override public Iterator<Entity> iterator() { return null; } public EntityType getEntityType() { return entityType; } @Override public Set<RepositoryCapability> getCapabilities() { return Collections.emptySet(); } }); } @BeforeMethod public void beforeMethod() { Mockito.reset(abstractRepository); } @Test(expectedExceptions = UnsupportedOperationException.class) public void addStream() { abstractRepository.add(Stream.empty()); } @Test(expectedExceptions = UnsupportedOperationException.class) public void deleteStream() { abstractRepository.delete(Stream.empty()); } @Test(expectedExceptions = UnsupportedOperationException.class) public void updateStream() { abstractRepository.update(Stream.empty()); } @Test(expectedExceptions = UnsupportedOperationException.class) public void findOneObjectFetch() { abstractRepository.findOneById(Integer.valueOf(0), new Fetch()); } @SuppressWarnings("unchecked") @Test public void findAllStream() { Object id0 = "id0"; Object id1 = "id1"; Entity entity0 = when(mock(Entity.class).getIdValue()).thenReturn(id0).getMock(); Entity entity1 = when(mock(Entity.class).getIdValue()).thenReturn(id1).getMock(); Stream<Object> entityIds = Stream.of(id0, id1); Mockito.doReturn(Stream.of(entity0, entity1)).when(abstractRepository).findAll(Matchers.any(Query.class)); Stream<Entity> expectedEntities = abstractRepository.findAll(entityIds); assertEquals(expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1)); } @SuppressWarnings("unchecked") @Test public void findAllStreamFetch() { Fetch fetch = new Fetch(); Object id0 = "id0"; Object id1 = "id1"; Entity entity0 = when(mock(Entity.class).getIdValue()).thenReturn(id0).getMock(); Entity entity1 = when(mock(Entity.class).getIdValue()).thenReturn(id1).getMock(); Stream<Object> entityIds = Stream.of(id0, id1); Mockito.doReturn(Stream.of(entity0, entity1)).when(abstractRepository).findAll(Matchers.any(Query.class)); Stream<Entity> expectedEntities = abstractRepository.findAll(entityIds, fetch); assertEquals(expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1)); } // // Note: streamFetch cannot be tested because mocking default methods is not supported by Mockito }