package org.ff4j.test.store; import static org.ff4j.test.TestsFf4jConstants.EXPECTED_FEATURES_NUMBERS; import static org.ff4j.test.TestsFf4jConstants.F1; import static org.ff4j.test.TestsFf4jConstants.F2; import static org.ff4j.test.TestsFf4jConstants.F3; import static org.ff4j.test.TestsFf4jConstants.F4; import static org.ff4j.test.TestsFf4jConstants.FEATURE_NEW; import static org.ff4j.test.TestsFf4jConstants.F_DOESNOTEXIST; import static org.ff4j.test.TestsFf4jConstants.G0; import static org.ff4j.test.TestsFf4jConstants.G1; import static org.ff4j.test.TestsFf4jConstants.G_DOESNOTEXIST; import static org.ff4j.test.TestsFf4jConstants.ROLE_ADMIN; import static org.ff4j.test.TestsFf4jConstants.ROLE_NEW; import static org.ff4j.test.TestsFf4jConstants.ROLE_USER; import static org.ff4j.test.TestsFf4jConstants.TEST_FEATURES_FILE; /* * #%L ff4j-core %% Copyright (C) 2013 Ff4J %% Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License. #L% */ import java.util.Arrays; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.ff4j.FF4j; import org.ff4j.core.Feature; import org.ff4j.core.FeatureStore; import org.ff4j.core.FlippingStrategy; import org.ff4j.exception.FeatureAlreadyExistException; import org.ff4j.exception.FeatureNotFoundException; import org.ff4j.exception.GroupNotFoundException; import org.ff4j.property.PropertyInt; import org.ff4j.property.PropertyString; import org.ff4j.store.InMemoryFeatureStore; import org.ff4j.strategy.PonderationStrategy; import org.ff4j.test.AssertFf4j; import org.ff4j.utils.Util; import org.junit.Assert; import org.junit.Before; import org.junit.Test; /** * For different store. * * @author <a href="mailto:cedrick.lunven@gmail.com">Cedrick LUNVEN</a> */ public abstract class FeatureStoreTestSupport { public static final String GOLOGOLO = "GOLOGOLO"; public static final String ROLE_XYZ = "ROLE_XYZ"; public static final String PPSTRING = "ppstring"; public static final String DIGIT_VALUE = "digitValue"; public static final String REGION_IDENTIFIER = "regionIdentifier"; /** Initialize */ protected FF4j ff4j = null; /** Tested Store. */ protected FeatureStore testedStore; /** Test Values */ protected AssertFf4j assertFf4j; /** Default InMemoryStore for test purposes. */ protected FeatureStore defaultStore = new InMemoryFeatureStore(TEST_FEATURES_FILE); /** {@inheritDoc} */ @Before public void setUp() throws Exception { ff4j = new FF4j(); ff4j.setFeatureStore(initStore()); testedStore = ff4j.getFeatureStore(); assertFf4j = new AssertFf4j(ff4j); assertFf4j.setPause(enablePause()); } /** * Any store test will declare its store through this callback. * * @return working feature store * @throws Exception * error during building feature store */ protected abstract FeatureStore initStore(); protected int enablePause() { return 0; } /** * TDD. */ @Test public void testStoreHasBeenInitialized() { // Given assertFf4j.assertThatStoreHasSize(EXPECTED_FEATURES_NUMBERS); assertFf4j.assertThatFeatureFlipped(F1); } /** * TDD. */ @Test public void testReadAllFeatures() { // Given assertFf4j.assertThatFeatureExist(F4); assertFf4j.assertThatStoreHasSize(EXPECTED_FEATURES_NUMBERS); // When Map<String, Feature> features = testedStore.readAll(); // Then Assert.assertEquals(EXPECTED_FEATURES_NUMBERS, features.size()); // Then testing whole structure Feature f = features.get(F4); Assert.assertEquals(F4 + " does not exist", f.getUid(), F4); Assert.assertTrue("no description", f.getDescription() != null && !"".equals(f.getDescription())); Assert.assertTrue("no authorizations", f.getPermissions() != null && !f.getPermissions().isEmpty()); assertFf4j.assertThatFeatureHasRole(F4, ROLE_ADMIN); assertFf4j.assertThatFeatureIsInGroup(F4, G1); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testReadNull() { // Given // When testedStore.read(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testReadEmpty() { // Given // When testedStore.read(""); // Then, expected error... } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testReadNotExist() { // Given // When testedStore.read("I-DONT-EXIST"); // Then, expected error... } /** * TDD. */ @Test public void testReadFullFeature() { // Given assertFf4j.assertThatFeatureExist(F4); // When Feature f = testedStore.read(F4); // Then Assert.assertEquals(f.getUid(), F4); Assert.assertTrue(f.getDescription() != null && !"".equals(f.getDescription())); Assert.assertTrue(f.getPermissions() != null && !f.getPermissions().isEmpty()); assertFf4j.assertThatFeatureHasRole(F4, ROLE_ADMIN); assertFf4j.assertThatFeatureIsInGroup(F4, G1); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testEnableNull() { // Given // When testedStore.enable(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testEnableEmpty() { // Given // When testedStore.enable(""); // Then, expected error... } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testEnableFeatureDoesNotExist() { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.enable(F_DOESNOTEXIST); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testDisableNull() { // Given // When testedStore.disable(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testDisableEmpty() { // Given // When testedStore.disable(""); // Then, expected error... } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testDisableFeatureDoesNotExist() { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.disable(F_DOESNOTEXIST); // Then, expected error... } /** * TDD. */ @Test public void testEnableFeature() { // Given assertFf4j.assertThatFeatureExist(F1); // When testedStore.enable(F1); // Then assertFf4j.assertThatFeatureIsEnabled(F1); } /** * TDD. */ @Test public void testDisableFeature() { // Given assertFf4j.assertThatFeatureExist(F1); // When testedStore.disable(F1); // Then assertFf4j.assertThatFeatureIsDisabled(F1); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testCreateNull() throws Exception { // Given // When testedStore.create(null); // Then, expected error... } /** * TDD. */ @Test public void testAddFeature() throws Exception { // Given assertFf4j.assertThatFeatureDoesNotExist(FEATURE_NEW); // When Set<String> rights = new HashSet<String>(Arrays.asList(new String[] { ROLE_USER })); Feature fp = new Feature(FEATURE_NEW, true, "description", G1, rights); testedStore.create(fp); // Then assertFf4j.assertThatStoreHasSize(EXPECTED_FEATURES_NUMBERS + 1); assertFf4j.assertThatFeatureExist(FEATURE_NEW); assertFf4j.assertThatFeatureIsInGroup(FEATURE_NEW, G1); // End, return to initial state testedStore.delete(FEATURE_NEW); assertFf4j.assertThatFeatureDoesNotExist(FEATURE_NEW); } /** * TDD. */ @Test(expected = FeatureAlreadyExistException.class) public void testAddFeatureAlreadyExis() throws Exception { // Given assertFf4j.assertThatFeatureDoesNotExist(GOLOGOLO); // When (first creation) Feature fp = new Feature(GOLOGOLO, true, "description2"); testedStore.create(fp); // Then (first creation) assertFf4j.assertThatFeatureExist(GOLOGOLO); // When (second creation) Set<String> rights = new HashSet<String>(Arrays.asList(new String[] { ROLE_USER })); Feature fp2 = new Feature(GOLOGOLO, true, G1, "description3", rights); testedStore.create(fp2); // Then, expected exception } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testDeleteNull() throws Exception { // Given // When testedStore.delete(null); // Then, expected error... } /** * TDD. */ @Test public void testDeleteFeature() throws Exception { // Given assertFf4j.assertThatFeatureExist(F1); Feature tmpf1 = testedStore.read(F1); int initialNumber = testedStore.readAll().size(); // When testedStore.delete(F1); // Then assertFf4j.assertThatStoreHasSize(initialNumber - 1); assertFf4j.assertThatFeatureDoesNotExist(F1); // End, Reinit initial state testedStore.create(tmpf1); assertFf4j.assertThatFeatureExist(F1); } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testDeteleFeatureDoesnotExist() throws Exception { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.delete(F_DOESNOTEXIST); // Then , expected error } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testGrantRoleNullFeature() throws Exception { // Given // When testedStore.grantRoleOnFeature(null, ROLE_ADMIN); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testGrantRoleEmptyFeature() throws Exception { // Given // When testedStore.grantRoleOnFeature("", ROLE_ADMIN); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testGrantRoleNullRole() throws Exception { // Given // When testedStore.grantRoleOnFeature(F1, null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testGrantRoleEmptyRole() throws Exception { // Given // When testedStore.grantRoleOnFeature(F1, ""); // Then, expected error... } /** * TDD. */ @Test public void testGrantRoleToFeatureRoleDoesNotExist() throws Exception { // Given assertFf4j.assertThatFeatureExist(F1); assertFf4j.assertThatFeatureHasNotRole(F1, ROLE_XYZ); // When testedStore.grantRoleOnFeature(F1, ROLE_XYZ); // Then assertFf4j.assertThatFeatureHasRole(F1, ROLE_XYZ); } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testGrantRoleToFeatureFeatureDoesNotExist() throws Exception { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.grantRoleOnFeature(F_DOESNOTEXIST, ROLE_USER); // Then, expected failure } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveRoleNullFeature() throws Exception { // Given // When testedStore.removeRoleFromFeature(null, ROLE_ADMIN); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveRoleEmptyFeature() throws Exception { // Given // When testedStore.removeRoleFromFeature("", ROLE_ADMIN); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveRoleNullRole() throws Exception { // Given // When testedStore.removeRoleFromFeature(F1, null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveRoleEmptyRole() throws Exception { // Given // When testedStore.removeRoleFromFeature(F1, ""); // Then, expected error... } /** * TDD. */ @Test public void testDeleteRoleToFeature() throws Exception { // Given assertFf4j.assertThatFeatureExist(F1); assertFf4j.assertThatFeatureHasRole(F1, ROLE_USER); // When testedStore.removeRoleFromFeature(F1, ROLE_USER); // Then assertFf4j.assertThatFeatureHasNotRole(F1, ROLE_USER); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testUpdateNull() throws Exception { // Given // When testedStore.update(null); // Then, expected error... } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testFeatureDoesNotExit() { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.update(new Feature(F_DOESNOTEXIST)); // Then, expect error } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testDeleteRoleFeatureDoesNotExit() { // Given assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.removeRoleFromFeature(F_DOESNOTEXIST, ROLE_USER); // Then, expected to fail } /** * TDD. */ @Test public void testUpdateFeatureCoreData() { // Parameters String newDescription = "new-description"; FlippingStrategy newStrategy = new PonderationStrategy(0.12); // Given assertFf4j.assertThatFeatureExist(F1); Assert.assertFalse(newDescription.equals(testedStore.read(F1).getDescription())); // When Feature fpBis = testedStore.read(F1); fpBis.setDescription(newDescription); fpBis.setFlippingStrategy(newStrategy); testedStore.update(fpBis); // Then Feature updatedFeature = testedStore.read(F1); Assert.assertTrue(newDescription.equals(updatedFeature.getDescription())); Assert.assertNotNull(updatedFeature.getFlippingStrategy()); Assert.assertEquals(newStrategy.toString(), updatedFeature.getFlippingStrategy().toString()); } /** * TDD. */ @Test public void testUpdateFeatureMoreAutorisation() { // Parameters Set<String> rights2 = new HashSet<String>(Arrays.asList(new String[] { ROLE_USER, ROLE_ADMIN })); // Given assertFf4j.assertThatFeatureExist(F1); assertFf4j.assertThatFeatureHasNotRole(F1, ROLE_ADMIN); // When Feature fpBis = testedStore.read(F1); fpBis.setPermissions(rights2); testedStore.update(fpBis); // Then assertFf4j.assertThatFeatureHasRole(F1, ROLE_USER); assertFf4j.assertThatFeatureHasRole(F1, ROLE_ADMIN); } /** * TDD. */ @Test public void testUpdateFlipLessAutorisation() { // Given assertFf4j.assertThatFeatureExist(F2); assertFf4j.assertThatFeatureHasRole(F2, ROLE_USER); // When testedStore.update(new Feature(F2, false, null)); // Then assertFf4j.assertThatFeatureHasNotRole(F2, ROLE_USER); } /** * TDD. */ @Test public void testUpdateFlipMoreAutorisationNotExist() { // Given assertFf4j.assertThatFeatureHasNotRole(F1, ROLE_NEW); Set<String> rights2 = new HashSet<String>(Arrays.asList(new String[] { ROLE_USER, ROLE_NEW })); Feature fpBis = new Feature(F1, false, G1, "desci2", rights2); // When testedStore.update(fpBis); // Then assertFf4j.assertThatFeatureHasRole(F1, ROLE_USER); assertFf4j.assertThatFeatureHasRole(F1, ROLE_NEW); } @Test(expected = IllegalArgumentException.class) public void testExistNull() { ff4j.getFeatureStore().exist(null); } @Test(expected = IllegalArgumentException.class) public void testExistEmpty() { ff4j.getFeatureStore().exist(""); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testExistGroupNull() throws Exception { // Given // When testedStore.existGroup(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testExistGroupEmpty() throws Exception { // Given // When testedStore.existGroup(""); // Then, expected error... } /** * TDD. */ @Test public void testExistGroup() { // Given assertFf4j.assertThatGroupExist(G1); assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // Then Assert.assertTrue(testedStore.existGroup(G1)); Assert.assertFalse(testedStore.existGroup(G_DOESNOTEXIST)); } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testEnableGroupNull() throws Exception { // Given // When testedStore.enableGroup(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testEnableGroupEmpty() throws Exception { // Given // When testedStore.enableGroup(""); // Then, expected error... } /** * TDD. */ @Test public void testEnableGroup() { // Given testedStore.disable(F2); testedStore.addToGroup(F2, G0); assertFf4j.assertThatFeatureIsDisabled(F2); assertFf4j.assertThatFeatureIsInGroup(F2, G0); // When testedStore.enableGroup(G0); // Then assertFf4j.assertThatFeatureIsEnabled(F2); // Reinit testedStore.disable(F2); } /** * TDD. */ @Test(expected = GroupNotFoundException.class) public void testEnableGroupDoesNotExist() { // Given assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // When testedStore.enableGroup(G_DOESNOTEXIST); // Then, expected error } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testDisableGroupNull() throws Exception { // Given // When testedStore.disableGroup(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testDisableGroupEmpty() throws Exception { // Given // When testedStore.disableGroup(""); // Then, expected error... } /** * TDD. */ @Test public void testDisableGroup() { // Given assertFf4j.assertThatFeatureIsEnabled(F4); assertFf4j.assertThatFeatureIsInGroup(F4, G1); // When testedStore.disableGroup(G1); // Then assertFf4j.assertThatFeatureIsDisabled(F4); // Rollback modifications testedStore.enable(F4); assertFf4j.assertThatFeatureIsEnabled(F4); } /** * TDD. */ @Test(expected = GroupNotFoundException.class) public void testDisableGroupDoesNotExist() { // Given assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // When testedStore.disableGroup(G_DOESNOTEXIST); // Then, expected error } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testReadGroupNull() throws Exception { // Given // When testedStore.readGroup(null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testReadGroupEmpty() throws Exception { // Given // When testedStore.readGroup(""); // Then, expected error... } /** * TDD. */ @Test public void testReadGroup() { // Given assertFf4j.assertThatGroupExist(G1); assertFf4j.assertThatFeatureExist(F3); assertFf4j.assertThatFeatureExist(F4); testedStore.addToGroup(F3, G1); testedStore.addToGroup(F4, G1); assertFf4j.assertThatFeatureIsInGroup(F3, G1); assertFf4j.assertThatFeatureIsInGroup(F4, G1); // When Map<String, Feature> group = testedStore.readGroup(G1); // Then Assert.assertEquals(2, group.size()); Assert.assertTrue(group.containsKey(F3)); Assert.assertTrue(group.containsKey(F4)); } /** * TDD. */ @Test(expected = GroupNotFoundException.class) public void testReadGroupDoesnotExist() { // Given assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // When testedStore.readGroup(G_DOESNOTEXIST); // Then, expect error } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testAddToGroupFeatureNull() throws Exception { // Given // When testedStore.addToGroup(null, G0); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testAddToGroupFeatureEmpty() throws Exception { // Given // When testedStore.addToGroup("", G0); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testAddToGroupNull() throws Exception { // Given // When testedStore.addToGroup(F1, null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testAddToGroupEmpty() throws Exception { // Given // When testedStore.addToGroup(F1, ""); // Then, expected error... } /** * TDD. */ @Test public void testAddToGroup() { // Given assertFf4j.assertThatGroupHasSize(1, G0); // When testedStore.addToGroup(F1, G0); // Then assertFf4j.assertThatGroupHasSize(2, G0); // End, Return to initial state testedStore.removeFromGroup(F1, G0); assertFf4j.assertThatGroupHasSize(1, G0); } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testAddToGroupFeatureDoeNotExist() { // Given assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // When testedStore.addToGroup(F_DOESNOTEXIST, G0); // Then, expected error } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveToGroupFeatureNull() throws Exception { // Given // When testedStore.removeFromGroup(null, G0); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveToGroupFeatureEmpty() throws Exception { // Given // When testedStore.removeFromGroup("", G0); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveToGroupNull() throws Exception { // Given // When testedStore.removeFromGroup(F1, null); // Then, expected error... } /** * TDD. */ @Test(expected = IllegalArgumentException.class) public void testRemoveToGroupEmpty() throws Exception { // Given // When testedStore.removeFromGroup(F1, ""); // Then, expected error... } /** * TDD. */ @Test public void testRemoveFromGroup() { // Given assertFf4j.assertThatGroupHasSize(2, G1); // When testedStore.removeFromGroup(F3, G1); // Then assertFf4j.assertThatGroupHasSize(1, G1); // End, Return to initial state testedStore.addToGroup(F3, G1); assertFf4j.assertThatGroupHasSize(2, G1); } /** * TDD. */ @Test(expected = GroupNotFoundException.class) public void testRemoveLastFeatureOfGroupDeleteGroup() { // Given assertFf4j.assertThatGroupExist(G0); assertFf4j.assertThatGroupHasSize(1, G0); // When testedStore.removeFromGroup(F2, G0); // Then assertFf4j.assertThatGroupDoesNotExist(G0); // Expected error testedStore.readGroup(G0); } /** * TDD. */ @Test(expected = FeatureNotFoundException.class) public void testRemoveFromGroupFeatureDoeNotExist() { // Given assertFf4j.assertThatGroupExist(G1); assertFf4j.assertThatFeatureDoesNotExist(F_DOESNOTEXIST); // When testedStore.removeFromGroup(F_DOESNOTEXIST, G1); // Then, expected error } /** * TDD. */ @Test(expected = GroupNotFoundException.class) public void testRemoveFromGroupDoesNotExist() { // Given assertFf4j.assertThatFeatureExist(F1); assertFf4j.assertThatGroupDoesNotExist(G_DOESNOTEXIST); // When testedStore.removeFromGroup(F1, G_DOESNOTEXIST); // Then, expected error } /** * TDD. */ @Test public void testRemoveFromGroupIfNotInGroup() { // Given assertFf4j.assertThatFeatureExist(F1); assertFf4j.assertThatGroupExist(G1); // When testedStore.removeFromGroup(F1, G1); // Then : nothing special } /** * TDD. */ @Test public void testReadAllGroup() { // Reinit testedStore.addToGroup(F2, G0); // Given assertFf4j.assertThatStoreHasNumberOfGroups(2); assertFf4j.assertThatGroupExist(G0); assertFf4j.assertThatGroupExist(G1); // When Set<String> groups = testedStore.readAllGroups(); // Then Assert.assertEquals(2, groups.size()); Assert.assertTrue(groups.contains(G0)); Assert.assertTrue(groups.contains(G1)); } /** * TDD. */ @Test public void testUpdateEditFlippingStrategy() { // Given assertFf4j.assertThatFeatureExist(F3); // When Feature myFeature = ff4j.getFeatureStore().read(F3); myFeature.setFlippingStrategy(new PonderationStrategy(0.1)); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasFlippingStrategy(F3); } /** * TDD. */ @Test public void testUpdateRemoveFlippingStrategy() { // Given assertFf4j.assertThatFeatureExist(F3); Feature myFeature = ff4j.getFeatureStore().read(F3); myFeature.setFlippingStrategy(new PonderationStrategy(0.1)); testedStore.update(myFeature); assertFf4j.assertThatFeatureHasFlippingStrategy(F3); // When Feature myFeature2 = ff4j.getFeatureStore().read(F3); myFeature2.setFlippingStrategy(null); testedStore.update(myFeature2); // Then assertFf4j.assertThatFeatureDoesNotHaveFlippingStrategy(F3); } /** * TDD. */ @Test public void testUpdateAddFlippingStrategy() { // Given assertFf4j.assertThatFeatureExist(F2); assertFf4j.assertThatFeatureDoesNotHaveFlippingStrategy(F2); // When Feature myFeature = ff4j.getFeatureStore().read(F2); myFeature.setFlippingStrategy(new PonderationStrategy(0.1)); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasFlippingStrategy(F2); } @Test(expected = IllegalArgumentException.class) public void testDonotUpdateNullFeature() { testedStore.update(null); } @Test(expected = IllegalArgumentException.class) public void testDonotDeleteNull() { testedStore.delete(null); } @Test(expected = IllegalArgumentException.class) public void testDonotDeleteEmpty() { testedStore.delete(""); } @Test public void testClear() { // Given Assert.assertNotNull(testedStore); Map<String, Feature> before = testedStore.readAll(); Assert.assertFalse(before.isEmpty()); // When testedStore.clear(); // Then Assert.assertTrue(testedStore.readAll().isEmpty()); /// Reinit for (Map.Entry<String, Feature> pName : before.entrySet()) { testedStore.create(pName.getValue()); } } /** * TDD. */ @Test public void testUpdateAddProperty() { // Given assertFf4j.assertThatFeatureExist(F2); assertFf4j.assertThatFeatureHasNotProperty(F2, "p1"); // When Feature myFeature = ff4j.getFeatureStore().read(F2); PropertyString p1 = new PropertyString("p1", "v1", Util.set("v1", "v2")); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasProperty(F2, "p1"); } /** * TDD. */ @Test public void testUpdateRemoveProperty() { // Given assertFf4j.assertThatFeatureExist(F1); // assertFf4j.assertThatFeatureHasProperty(F1, "ppint"); // When Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.getCustomProperties().remove("ppint"); testedStore.update(myFeature); // Then assertFf4j.assertThatFeatureHasNotProperty(F1, "p1"); } /** * TDD. */ @Test public void testUpdateEditPropertyValue() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); if (myFeature.getCustomProperties().isEmpty()) { PropertyString p1 = new PropertyString(PPSTRING); p1.setValue("hello"); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); } assertFf4j.assertThatFeatureHasProperty(F1, PPSTRING); Assert.assertEquals("hello", ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(PPSTRING)// .asString()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyString p1 = new PropertyString(PPSTRING, "goodbye"); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Assert.assertEquals("goodbye", ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(PPSTRING)// .asString()); } /** * TDD. */ @Test @SuppressWarnings("unchecked") public void testUpdateEditPropertyAddFixedValues() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.addProperty(new PropertyInt(DIGIT_VALUE, 2, Util.set(0, 1, 2, 3))); ff4j.getFeatureStore().update(myFeature); assertFf4j.assertThatFeatureHasProperty(F1, DIGIT_VALUE); Set<Integer> fixValues = (Set<Integer>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(DIGIT_VALUE).getFixedValues(); Assert.assertEquals(4, fixValues.size()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyInt p1 = new PropertyInt(DIGIT_VALUE); p1.setFixedValues(Util.set(0, 1, 2, 3, 4)); p1.setValue(4); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Set<Integer> fixValues2 = (Set<Integer>) ff4j.getFeatureStore().read(F1) // .getCustomProperties().get(DIGIT_VALUE).getFixedValues(); Assert.assertEquals(5, fixValues2.size()); } /** * TDD. */ @Test @SuppressWarnings("unchecked") public void testUpdateEditPropertyRemoveFixedValues() { // Given assertFf4j.assertThatFeatureExist(F1); Feature myFeature = ff4j.getFeatureStore().read(F1); myFeature.addProperty(new PropertyString(REGION_IDENTIFIER, "AMER", Util.set("AMER", "SSSS", "EAST"))); testedStore.update(myFeature); assertFf4j.assertThatFeatureHasProperty(F1, REGION_IDENTIFIER); Set<String> fixValues = (Set<String>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(REGION_IDENTIFIER).getFixedValues(); Assert.assertEquals(3, fixValues.size()); // When myFeature = ff4j.getFeatureStore().read(F1); PropertyString p1 = new PropertyString(REGION_IDENTIFIER); p1.setValue("AMER"); p1.setFixedValues(Util.set("AMER", "SSSS")); myFeature.getCustomProperties().put(p1.getName(), p1); testedStore.update(myFeature); // Then Set<Integer> fixValues2 = (Set<Integer>) ff4j.getFeatureStore().read(F1)// .getCustomProperties().get(REGION_IDENTIFIER).getFixedValues(); Assert.assertEquals(2, fixValues2.size()); } }