diff --git a/src/main/java/io/getunleash/strategy/constraints/StringConstraintOperator.java b/src/main/java/io/getunleash/strategy/constraints/StringConstraintOperator.java index 5a300b420..3106d1c8b 100644 --- a/src/main/java/io/getunleash/strategy/constraints/StringConstraintOperator.java +++ b/src/main/java/io/getunleash/strategy/constraints/StringConstraintOperator.java @@ -58,17 +58,18 @@ private boolean startsWith( List values, Optional contextValue, boolean caseInsensitive) { return contextValue .map( - c -> + actualContextValue -> values.stream() .anyMatch( - v -> { + value -> { if (caseInsensitive) { - return v.toLowerCase(comparisonLocale) + return actualContextValue + .toLowerCase(comparisonLocale) .startsWith( - c.toLowerCase( + value.toLowerCase( comparisonLocale)); } else { - return c.startsWith(v); + return actualContextValue.startsWith(value); } })) .orElse(false); diff --git a/src/test/java/io/getunleash/strategy/constraints/StringConstraintOperatorTest.java b/src/test/java/io/getunleash/strategy/constraints/StringConstraintOperatorTest.java index 34234ee85..1ed3f76dd 100644 --- a/src/test/java/io/getunleash/strategy/constraints/StringConstraintOperatorTest.java +++ b/src/test/java/io/getunleash/strategy/constraints/StringConstraintOperatorTest.java @@ -211,4 +211,56 @@ public void shouldSupportInvertingStringContains() { .build(); assertThat(strategy.isEnabled(parameters, ctx, constraintList)).isFalse(); } + + @Test + public void startsWithShouldMatchCorrectlyWhenCaseSensitive() { + Strategy strategy = new DefaultStrategy(); + List constraintList = + Collections.singletonList( + new Constraint( + "email", + Operator.STR_STARTS_WITH, + Collections.singletonList("testuser"), + false, + false)); + Map parameters = new HashMap<>(); + UnleashContext ctx = + UnleashContext.builder() + .environment("dev") + .addProperty("email", "TESTUSER@getunleash.io") + .build(); + assertThat(strategy.isEnabled(parameters, ctx, constraintList)).isFalse(); + UnleashContext ctx2 = + UnleashContext.builder() + .environment("dev") + .addProperty("email", "testuser@getunleash.io") + .build(); + assertThat(strategy.isEnabled(parameters, ctx2, constraintList)).isTrue(); + } + + @Test + public void startsWithShouldMatchCorrectlyWhenCaseInsensitive() { + Strategy strategy = new DefaultStrategy(); + List constraintList = + Collections.singletonList( + new Constraint( + "email", + Operator.STR_STARTS_WITH, + Collections.singletonList("testuser"), + false, + true)); + Map parameters = new HashMap<>(); + UnleashContext ctx = + UnleashContext.builder() + .environment("dev") + .addProperty("email", "TESTUSER@getunleash.io") + .build(); + assertThat(strategy.isEnabled(parameters, ctx, constraintList)).isTrue(); + UnleashContext ctx2 = + UnleashContext.builder() + .environment("dev") + .addProperty("email", "testuser@getunleash.io") + .build(); + assertThat(strategy.isEnabled(parameters, ctx2, constraintList)).isTrue(); + } }