package org.magenta; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @RunWith(MockitoJUnitRunner.class) public class FixtureFactoryNewPeristentDataSetTest extends FixtureFactoryTestSupport { @Mock private DataStoreProvider provider; @Mock private DataStore<String> datastore; @Test public void testDataIsPersistedAsRequested(){ //setup fixtures DataKey<String> key = DataKey.makeDefault(String.class); when(provider.get(Mockito.any(DataKey.class))).thenReturn(datastore); when(datastore.persist(Mockito.any(String.class))).thenAnswer(new Answer<String>(){ @Override public String answer(InvocationOnMock invocation) throws Throwable { return (String)invocation.getArguments()[0]; } }); FixtureFactory<SimpleDataSpecification> sut = createAnonymousFixtureFactory(); sut.setDataStoreProvider(provider, true); sut.newDataSet(String.class).persistent().composedOf("a","b","c"); //exercise sut String actual = sut.dataset(String.class).list().get(2); //verify outcome assertThat(actual).isEqualTo("c"); verify(provider).get(key); verify(datastore).persist("c"); verifyNoMoreInteractions(datastore); } @Test public void testDataIsPersistedAsRequestedOnAny(){ //setup fixtures DataKey<String> key = DataKey.makeDefault(String.class); when(provider.get(Mockito.any(DataKey.class))).thenReturn(datastore); when(datastore.persist(Mockito.any(String.class))).thenAnswer(new Answer<String>(){ @Override public String answer(InvocationOnMock invocation) throws Throwable { return (String)invocation.getArguments()[0]; } }); FixtureFactory<SimpleDataSpecification> sut = createAnonymousFixtureFactory(); sut.setDataStoreProvider(provider, true); sut.newDataSet(String.class).persistent().composedOf("a","b","c"); //exercise sut String actual = sut.dataset(String.class).any(); //verify outcome assertThat(actual).isIn("a","b","c"); verify(provider).get(key); verify(datastore).persist(actual); verifyNoMoreInteractions(datastore); } @Test public void testDataIsPersistedAsRequestedOnAnyUnderARestriction(){ //setup fixtures DataKey<String> key = DataKey.makeDefault(String.class); when(provider.get(Mockito.any(DataKey.class))).thenReturn(datastore); when(datastore.persist(Mockito.any(String.class))).thenAnswer(new Answer<String>(){ @Override public String answer(InvocationOnMock invocation) throws Throwable { return (String)invocation.getArguments()[0]; } }); FixtureFactory<SimpleDataSpecification> sut = createAnonymousFixtureFactory(); sut.setDataStoreProvider(provider, true); sut.newDataSet(Integer.class).composedOf(1,2,3); sut.newDataSet(String.class).persistent().composedOf("a","b","c"); //exercise sut String actual = sut.restrictTo(1).dataset(String.class).any(); //verify outcome assertThat(actual).isIn("a","b","c"); verify(provider).get(key); verify(datastore).persist(actual); verifyNoMoreInteractions(datastore); } }