diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java index 9f2d1859f..5722f08d1 100644 --- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java +++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java @@ -51,23 +51,16 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx final List propertyList = new ArrayList<>(); - double distribution = 0; try { for (Object dist : distibutions) { FractionProperty fractionProperty = new FractionProperty(dist); propertyList.add(fractionProperty); - distribution += fractionProperty.getPercentage(); } } catch (JsonLogicException e) { log.debug("Error parsing fractional targeting rule", e); return null; } - if (distribution != 100) { - log.debug("Fractional properties do not sum to 100"); - return null; - } - // find distribution return distributeValue(bucketBy, propertyList); } diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java index 9ef877d41..6c96686c1 100644 --- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java +++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java @@ -151,7 +151,7 @@ void targetingBackedFractional() throws JsonLogicEvaluationException { @Test - void invalidRuleSumNot100() throws JsonLogicEvaluationException { + void invalidRuleSumGreater100() throws JsonLogicEvaluationException { // given Fractional fractional = new Fractional(); @@ -189,7 +189,49 @@ void invalidRuleSumNot100() throws JsonLogicEvaluationException { Object evaluate = fractional.evaluate(rule, data); // then - assertNull(evaluate); + assertEquals("blue", evaluate); + } + + @Test + void invalidRuleSumlower100() throws JsonLogicEvaluationException { + // given + Fractional fractional = new Fractional(); + + /* Rule + * [ + * [ + * "blue", + * 50 + * ], + * [ + * "green", + * 30 + * ] + * ] + * */ + + final List rule = new ArrayList<>(); + + final List bucket1 = new ArrayList<>(); + bucket1.add("blue"); + bucket1.add(50); + + final List bucket2 = new ArrayList<>(); + bucket2.add("green"); + bucket2.add(70); + + rule.add(bucket1); + rule.add(bucket2); + + Map data = new HashMap<>(); + data.put(FLAG_KEY, "headerColor"); + data.put(TARGET_KEY, "foo@foo.com"); + + // when + Object evaluate = fractional.evaluate(rule, data); + + // then + assertEquals("blue", evaluate); } @Test @@ -266,4 +308,4 @@ void invalidRule() throws JsonLogicEvaluationException { assertNull(evaluate); } -} \ No newline at end of file +}