Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion flag_engine/segments/evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,11 @@ def context_matches_condition(
if condition.operator == constants.IS_SET:
return context_value is not None

return _matches_context_value(condition, context_value) if context_value else False
return (
_matches_context_value(condition, context_value)
if context_value is not None
else False
)


def _get_trait(context: EvaluationContext, trait_key: str) -> ContextValue:
Expand Down
63 changes: 62 additions & 1 deletion tests/unit/segments/test_segments_evaluator.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@

from flag_engine.context.types import EvaluationContext
from flag_engine.segments import constants
from flag_engine.segments.evaluator import _matches_context_value, is_context_in_segment
from flag_engine.segments.evaluator import (
_matches_context_value,
context_matches_condition,
is_context_in_segment,
)
from flag_engine.segments.models import (
SegmentConditionModel,
SegmentModel,
Expand Down Expand Up @@ -479,6 +483,63 @@ def test_segment_condition_matches_context_value_for_semver(
assert result == expected_result


@pytest.mark.parametrize(
"context,condition,segment_key,expected_result",
(
(
{"identity": {"traits": {trait_key_1: False}}},
SegmentConditionModel(
operator=constants.EQUAL,
property_=trait_key_1,
value="false",
),
"segment_key",
True,
),
(
{"identity": {"traits": {trait_key_1: True}}},
SegmentConditionModel(
operator=constants.EQUAL,
property_=trait_key_1,
value="true",
),
"segment_key",
True,
),
(
{"identity": {"traits": {trait_key_1: 12}}},
SegmentConditionModel(
operator=constants.EQUAL,
property_=trait_key_1,
value="12",
),
"segment_key",
True,
),
(
{"identity": {"traits": {trait_key_1: None}}},
SegmentConditionModel(
operator=constants.IS_SET,
property_=trait_key_1,
value="false",
),
"segment_key",
False,
),
),
)
def test_context_matches_condition(
context: EvaluationContext,
condition: SegmentConditionModel,
segment_key: str,
expected_result: bool,
) -> None:
# Given / When
result = context_matches_condition(context, condition, segment_key)
# Then
assert result == expected_result


@pytest.mark.parametrize(
"trait_value, condition_value, expected_result",
[
Expand Down