package org.molgenis.data.i18n; import org.mockito.ArgumentCaptor; import org.molgenis.data.Entity; import org.molgenis.data.Fetch; import org.molgenis.data.Query; import org.molgenis.data.Repository; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import java.util.Arrays; import java.util.List; import java.util.function.Consumer; import java.util.stream.Collectors; import java.util.stream.Stream; import static org.mockito.Mockito.*; import static org.testng.Assert.assertEquals; public class I18nStringDecoratorTest { private Repository<Entity> decoratedRepo; private I18nStringDecorator i18nStringDecorator; @SuppressWarnings("unchecked") @BeforeMethod public void setUpBeforeMethod() { decoratedRepo = mock(Repository.class); i18nStringDecorator = new I18nStringDecorator(decoratedRepo); } @Test public void testDelegate() throws Exception { assertEquals(i18nStringDecorator.delegate(), decoratedRepo); } @Test public void testQuery() throws Exception { assertEquals(i18nStringDecorator.query().getRepository(), i18nStringDecorator); } @Test public void addStream() { Stream<Entity> entities = Stream.empty(); when(decoratedRepo.add(entities)).thenReturn(123); assertEquals(i18nStringDecorator.add(entities), Integer.valueOf(123)); } @Test public void deleteStream() { Stream<Entity> entities = Stream.empty(); i18nStringDecorator.delete(entities); verify(decoratedRepo, times(1)).delete(entities); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Test public void updateStream() { Entity entity0 = mock(Entity.class); Stream<Entity> entities = Stream.of(entity0); ArgumentCaptor<Stream<Entity>> captor = ArgumentCaptor.forClass((Class) Stream.class); doNothing().when(decoratedRepo).update(captor.capture()); i18nStringDecorator.update(entities); assertEquals(captor.getValue().collect(Collectors.toList()), Arrays.asList(entity0)); } @Test public void findAllStream() { Object id0 = "id0"; Object id1 = "id1"; Entity entity0 = mock(Entity.class); Entity entity1 = mock(Entity.class); Stream<Object> entityIds = Stream.of(id0, id1); when(decoratedRepo.findAll(entityIds)).thenReturn(Stream.of(entity0, entity1)); Stream<Entity> expectedEntities = i18nStringDecorator.findAll(entityIds); assertEquals(expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1)); } @Test public void findAllStreamFetch() { Fetch fetch = new Fetch(); Object id0 = "id0"; Object id1 = "id1"; Entity entity0 = mock(Entity.class); Entity entity1 = mock(Entity.class); Stream<Object> entityIds = Stream.of(id0, id1); when(decoratedRepo.findAll(entityIds, fetch)).thenReturn(Stream.of(entity0, entity1)); Stream<Entity> expectedEntities = i18nStringDecorator.findAll(entityIds, fetch); assertEquals(expectedEntities.collect(Collectors.toList()), Arrays.asList(entity0, entity1)); } @Test public void findAllAsStream() { Entity entity0 = mock(Entity.class); @SuppressWarnings("unchecked") Query<Entity> query = mock(Query.class); when(decoratedRepo.findAll(query)).thenReturn(Stream.of(entity0)); Stream<Entity> entities = i18nStringDecorator.findAll(query); assertEquals(entities.collect(Collectors.toList()), Arrays.asList(entity0)); } @Test public void forEachBatchedFetch() { Fetch fetch = new Fetch(); @SuppressWarnings("unchecked") Consumer<List<Entity>> consumer = mock(Consumer.class); i18nStringDecorator.forEachBatched(fetch, consumer, 234); verify(decoratedRepo, times(1)).forEachBatched(fetch, consumer, 234); } }