package de.otto.edison.mongo.togglz; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.List; import java.util.Optional; import org.junit.Before; import org.junit.Test; import org.togglz.core.repository.FeatureState; import org.togglz.core.user.SimpleFeatureUser; import org.togglz.core.user.UserProvider; import com.github.fakemongo.Fongo; import com.mongodb.client.MongoDatabase; import de.otto.edison.togglz.FeatureClassProvider; public class MongoTogglzRepositoryTest { private MongoTogglzRepository testee; @Before public void setUp() throws Exception { final Fongo fongo = new Fongo("inmemory-mongodb"); final MongoDatabase mongoDatabase = fongo.getDatabase("features"); final FeatureClassProvider featureClassProvider = new TestFeatureClassProvider(); final UserProvider userProvider = mock(UserProvider.class); when(userProvider.getCurrentUser()).thenReturn(new SimpleFeatureUser("someUser")); testee = new MongoTogglzRepository(mongoDatabase, featureClassProvider, userProvider); } @Test public void shouldLoadFeatureState() throws Exception { // Given final FeatureState featureState = new FeatureState(TestFeatures.TEST_FEATURE_1); featureState.setEnabled(true); featureState.setStrategyId("someStrategy"); featureState.setParameter("someKey1", "someValue1"); featureState.setParameter("someKey2", "someValue2"); testee.create(featureState); // When final FeatureState loadedFeatureState = testee.getFeatureState(TestFeatures.TEST_FEATURE_1); // Then assertThat(loadedFeatureState.getFeature(), is(TestFeatures.TEST_FEATURE_1)); assertThat(loadedFeatureState.getStrategyId(), is("someStrategy")); assertThat(loadedFeatureState.isEnabled(), is(true)); assertThat(loadedFeatureState.getParameter("someKey1"), is("someValue1")); assertThat(loadedFeatureState.getParameter("someKey2"), is("someValue2")); } @Test public void shouldSetFeatureState() throws Exception { // Given final FeatureState featureState = new FeatureState(TestFeatures.TEST_FEATURE_1); featureState.setEnabled(true); featureState.setStrategyId("someStrategy"); featureState.setParameter("someKey1", "someValue1"); featureState.setParameter("someKey2", "someValue2"); // When testee.setFeatureState(featureState); final Optional<FeatureState> loadedFeatureState = testee.findOne(TestFeatures.TEST_FEATURE_1.name()); // Then assertThat(loadedFeatureState.isPresent(), is(true)); assertThat(loadedFeatureState.get().getFeature(), is(TestFeatures.TEST_FEATURE_1)); assertThat(loadedFeatureState.get().getStrategyId(), is("someStrategy")); assertThat(loadedFeatureState.get().isEnabled(), is(true)); assertThat(loadedFeatureState.get().getParameter("someKey1"), is("someValue1")); assertThat(loadedFeatureState.get().getParameter("someKey2"), is("someValue2")); } @Test public void shouldLoadAllFeatureStates() throws Exception { // Given final FeatureState featureState1 = new FeatureState(TestFeatures.TEST_FEATURE_1); featureState1.setEnabled(true); featureState1.setStrategyId("someStrategy"); featureState1.setParameter("someKey1", "someValue1"); featureState1.setParameter("someKey2", "someValue2"); testee.create(featureState1); final FeatureState featureState2 = new FeatureState(TestFeatures.TEST_FEATURE_2); featureState2.setEnabled(true); featureState2.setStrategyId("someStrategy2"); featureState2.setParameter("someKey3", "someValue3"); featureState2.setParameter("someKey4", "someValue4"); testee.create(featureState2); // When final List<FeatureState> loadedFeatureStates = testee.findAll(); // Then assertThat(loadedFeatureStates.size(), is(2)); } }