Skip to content

Commit

Permalink
fix: enableAll and disableAll overrides fallback
Browse files Browse the repository at this point in the history
As discussed in #239 - When all is enabled, we had a bit of a surprising
behaviour where we'd fallback to fallback action for
`isEnabled(featureName, fallback)` even if all was enabled and feature
did not exist.

This PR fixes that, and adds tests to confirm this behaviour is
intentional.

closes: #239
  • Loading branch information
chriswk committed May 8, 2024
1 parent ecff361 commit a602ca4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/java/io/getunleash/FakeUnleash.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public boolean isEnabled(
@Override
public boolean isEnabled(
String toggleName, BiPredicate<String, UnleashContext> fallbackAction) {
if (!features.containsKey(toggleName)) {
if ((!enableAll && !disableAll || excludedFeatures.containsKey(toggleName)) && !features.containsKey(toggleName)) {
return fallbackAction.test(toggleName, UnleashContext.builder().build());
}
return isEnabled(toggleName);
Expand Down
21 changes: 21 additions & 0 deletions src/test/java/io/getunleash/FakeUnleashTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,25 @@ public void should_countVariant_and_not_throw_an_error() {
FakeUnleash fakeUnleash = new FakeUnleash();
fakeUnleash.more().countVariant("toggleName", "variantName");
}

@Test
public void if_all_is_enabled_should_return_true_even_if_feature_does_not_exist_and_fallback_returns_false() {
FakeUnleash fakeUnleash = new FakeUnleash();
fakeUnleash.enableAll();
assertThat(fakeUnleash.isEnabled("my.non.existing.feature", (name, context) -> false)).isTrue();
}

@Test
public void if_all_is_disabled_should_return_false_even_if_feature_does_not_exist_and_fallback_returns_true() {
FakeUnleash fakeUnleash = new FakeUnleash();
fakeUnleash.disableAll();
assertThat(fakeUnleash.isEnabled("my.non.existing.feature", (name, context) -> true)).isFalse();
}

@Test
public void all_enabled_and_exclusion_toggle_returns_expected_result() {
FakeUnleash fakeUnleash = new FakeUnleash();
fakeUnleash.enableAllExcept("my.feature.that.should.be.disabled");
assertThat(fakeUnleash.isEnabled("my.feature.that.should.be.disabled", (name, context) -> false)).isFalse();
}
}

0 comments on commit a602ca4

Please sign in to comment.