Skip to content

Commit 266e2a3

Browse files
committed
account for non-required priority
1 parent 6cdb8b6 commit 266e2a3

File tree

2 files changed

+108
-2
lines changed

2 files changed

+108
-2
lines changed

flag_engine/segments/evaluator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,8 +95,8 @@ def get_evaluation_result(context: EvaluationContext) -> EvaluationResult:
9595
feature_key = override_feature_context["feature_key"]
9696
if (
9797
feature_key not in segment_feature_contexts
98-
or override_feature_context["priority"]
99-
< segment_feature_contexts[feature_key]["priority"]
98+
or override_feature_context.get("priority", 0)
99+
< segment_feature_contexts[feature_key].get("priority", 0)
100100
):
101101
segment_feature_contexts[feature_key] = override_feature_context
102102

tests/unit/segments/test_segments_evaluator.py

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -667,6 +667,112 @@ def test_get_evaluation_result__returns_expected(
667667
}
668668

669669

670+
def test_get_evaluation_result__two_segments_override_same_feature__returns_expected() -> (
671+
None
672+
):
673+
# Given
674+
context_in_segments: EvaluationContext = {
675+
"environment": {"key": "api-key", "name": ""},
676+
"identity": {
677+
"identifier": "identity_2",
678+
"key": "api-key_identity_2",
679+
"traits": {"foo": "bar"},
680+
},
681+
"features": {
682+
"feature_1": {
683+
"key": "1",
684+
"feature_key": "1",
685+
"name": "feature_1",
686+
"enabled": False,
687+
"value": None,
688+
},
689+
"feature_2": {
690+
"key": "2",
691+
"feature_key": "2",
692+
"name": "feature_2",
693+
"enabled": False,
694+
"value": None,
695+
},
696+
},
697+
"segments": {
698+
"1": {
699+
"key": "1",
700+
"name": "my_segment",
701+
"rules": [
702+
{
703+
"type": "ALL",
704+
"conditions": [
705+
{"property": "foo", "operator": "EQUAL", "value": "bar"}
706+
],
707+
"rules": [],
708+
}
709+
],
710+
"overrides": [
711+
{
712+
"key": "4",
713+
"feature_key": "1",
714+
"name": "feature_1",
715+
"enabled": False,
716+
"value": "segment_override",
717+
"priority": 2,
718+
}
719+
],
720+
},
721+
"3": {
722+
"key": "3",
723+
"name": "higher_priority_segment",
724+
"rules": [
725+
{
726+
"type": "ALL",
727+
"conditions": [
728+
{"property": "foo", "operator": "EQUAL", "value": "bar"}
729+
],
730+
"rules": [],
731+
}
732+
],
733+
"overrides": [
734+
{
735+
"enabled": True,
736+
"key": "2",
737+
"feature_key": "1",
738+
"name": "feature_1",
739+
"value": "segment_override_other",
740+
"priority": 1,
741+
}
742+
],
743+
},
744+
},
745+
}
746+
747+
# When
748+
result = get_evaluation_result(context_in_segments)
749+
750+
# Then
751+
assert result == {
752+
"context": context_in_segments,
753+
"flags": [
754+
{
755+
"enabled": True,
756+
"feature_key": "1",
757+
"name": "feature_1",
758+
"reason": "TARGETING_MATCH; segment=higher_priority_segment",
759+
"value": "segment_override_other",
760+
},
761+
{
762+
"enabled": False,
763+
"feature_key": "2",
764+
"name": "feature_2",
765+
"reason": "DEFAULT",
766+
"value": None,
767+
},
768+
],
769+
"segments": [
770+
{"key": "1", "name": "my_segment"},
771+
{"key": "3", "name": "higher_priority_segment"},
772+
],
773+
}
774+
775+
670776
@pytest.mark.parametrize(
671777
"percentage_value, expected_result",
672778
(

0 commit comments

Comments
 (0)