Skip to content

Commit

Permalink
fix: enableAll and disableAll overrides fallback (#243)
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 authored May 14, 2024
1 parent 5fddde5 commit 132a086
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/main/java/io/getunleash/FakeUnleash.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@ 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
28 changes: 28 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,32 @@ 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 132a086

Please sign in to comment.