@NonNull private static Config getStandardConfig(String metadata) { List<Rule> rules = new ArrayList<>(); Value value1 = new Value(14, 18, null, null, null, null, null, null); Value value2 = new Value(null, null, null, null, 1453196880000L, null, null, null); rules.add(new Rule(Toggle.DISABLED, metadata, value1)); rules.add(new Rule(Toggle.DISABLED, metadata, value2)); Feature featureVideo = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); return new Config("myapp", features); }
/** * Generates a {@link Map} out of the features {@link List} */ public void generateFeatureMap() { featureMap = new HashMap<>(); if (features != null) { for (Feature feature : features) { featureMap.put(feature.getName(), feature); } } }
@Test public void getStatePoweredResponseDecision_enabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", Toggle.ENABLED, null, featureMetadata, rules); ResponseDecisionMeta responseDecisionMeta = toggle.getStatePoweredResponseDecision(feature); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.ENABLED); }
@Test public void getStatePoweredResponseDecision_null_returnsUndecided() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, null, featureMetadata, rules); ResponseDecisionMeta responseDecisionMeta = toggle.getStatePoweredResponseDecision(feature); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DEFAULT_STATE); }
@Test public void getStatePoweredResponseDecision_disabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", Toggle.DISABLED, null, featureMetadata, rules); ResponseDecisionMeta responseDecisionMeta = toggle.getStatePoweredResponseDecision(feature); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DISABLED); }
@Test public void processConfig_featureNotPresent_null_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, null, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "share"; String defaultStateInRequest = null; CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isFalse(); assertThat(checkResponse.state).isEqualTo(Toggle.DEFAULT_STATE); }
@Test public void processConfig_featureNotPresent_defaultEnabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, null, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "share"; String defaultStateInRequest = Toggle.ENABLED; CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isFalse(); assertThat(checkResponse.state).isEqualTo(defaultStateInRequest); }
@Test public void handleFeature_stateNull_ruleMatched_enabledForRightAPILevel_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, Toggle.DISABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(16); ResponseDecisionMeta responseDecisionMeta = toggle.handleFeature(feature, checkRequest); // assert the state and ruleMetadata assertThat(responseDecisionMeta.state).isEqualTo(Toggle.ENABLED); assertThat(responseDecisionMeta.ruleMetadata).isEqualTo(ruleMetadata); }
@Test public void getDefaultResponseDecision_noFeatureCheckRequestDefault_disabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, Toggle.DISABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.getDefaultResponseDecision(feature, checkRequest); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DISABLED); }
@Test public void getDefaultResponseDecision_FeatureCheckRequestDefault_enabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, Toggle.DISABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, Toggle.ENABLED, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.getDefaultResponseDecision(feature, checkRequest); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.ENABLED); }
@Test public void getDefaultResponseDecision_noFeatureCheckRequestDefault_enabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.getDefaultResponseDecision(feature, checkRequest); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.ENABLED); }
@Test public void getDefaultResponseDecision_FeatureCheckRequestDefault_disabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, Toggle.DISABLED, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.getDefaultResponseDecision(feature, checkRequest); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DISABLED); }
/** * Process config tests */ // set 1: feature not present @Test public void processConfig_featureNotPresent_defaultDisabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, null, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "share"; String defaultStateInRequest = Toggle.DISABLED; CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isFalse(); assertThat(checkResponse.state).isEqualTo(defaultStateInRequest); }
@Test public void getDefaultResponseDecision_noFeatureCheckRequestDefault_null_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", null, null, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.getDefaultResponseDecision(feature, checkRequest); assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DEFAULT_STATE); }
@Test public void handleFeature_stateNotNull_disabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); getApiValue(rules); Feature feature = new Feature("video", Toggle.DISABLED, null, featureMetadata, rules); CheckRequest checkRequest = new CheckRequest(toggle, "video", null, null, false, null); ResponseDecisionMeta responseDecisionMeta = toggle.handleFeature(feature, checkRequest); // assert the state assertThat(responseDecisionMeta.state).isEqualTo(Toggle.DISABLED); }
@Test public void processConfig_featurePresent_apiLevel_matchEnabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.ENABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, Toggle.DISABLED, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "video"; String defaultStateInRequest = Toggle.DISABLED; PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(16); CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(ruleMetadata); assertThat(checkResponse.cached).isTrue(); assertThat(checkResponse.state).isEqualTo(Toggle.ENABLED); }
@Test public void processConfig_featurePresent_apiLevel_matchDisabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "video"; String defaultStateInRequest = Toggle.ENABLED; PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(16); CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(ruleMetadata); assertThat(checkResponse.cached).isTrue(); assertThat(checkResponse.state).isEqualTo(Toggle.DISABLED); }
@Test public void processConfig_featurePresent_butNoDefaultOrMatchInConfig_defaultInRequestDisabled_returnsDisabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, null, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "video"; String defaultStateInRequest = Toggle.DISABLED; PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(20); CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isTrue(); assertThat(checkResponse.state).isEqualTo(defaultStateInRequest); }
@Test public void processConfig_featurePresent_defaultPresentMatchInConfigEnabled_defaultInRequestAbsent_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, Toggle.ENABLED, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "video"; String defaultStateInRequest = null; PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(20); CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isTrue(); assertThat(checkResponse.state).isEqualTo(Toggle.ENABLED); }
@Test public void processConfig_featurePresent_butNoDefaultOrMatchInConfig_defaultInRequestEnabled_returnsEnabled() { Toggle toggle = new Toggle(context); List<Rule> rules = new ArrayList<>(); Value value = new Value(14, 18, null, null, null, null, null, null); rules.add(new Rule(Toggle.DISABLED, ruleMetadata, value)); Feature featureVideo = new Feature("video", null, null, featureMetadata, rules); Feature featureAudio = new Feature("audio", Toggle.ENABLED, null, featureMetadata, rules); Feature featureSpeech = new Feature("speech", null, Toggle.DISABLED, featureMetadata, rules); List<Feature> features = new ArrayList<>(); features.add(featureVideo); features.add(featureAudio); features.add(featureSpeech); Config config = new Config("myapp", features); // check the feature map assertValidConfig(config); String featureToBeSearched = "video"; String defaultStateInRequest = Toggle.ENABLED; PowerMockito.spy(RuleMatcher.class); Mockito.when(RuleMatcher.getBuildVersion()).thenReturn(20); CheckRequest checkRequest = new CheckRequest(toggle, featureToBeSearched, null, defaultStateInRequest, false, null); CheckResponse checkResponse = toggle.processConfig(config, checkRequest); assertThat(checkResponse.featureName).isEqualTo(featureToBeSearched); assertThat(checkResponse.ruleMetadata).isEqualTo(null); assertThat(checkResponse.cached).isTrue(); assertThat(checkResponse.state).isEqualTo(defaultStateInRequest); }