Skip to content

Commit 7f0f21c

Browse files
committed
fix coverage
1 parent 53e55f6 commit 7f0f21c

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

flag_engine/engine.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ def _get_identity_feature_states_dict(
107107
identity=identity,
108108
)
109109
if override_traits:
110-
if typing.TYPE_CHECKING:
110+
if typing.TYPE_CHECKING: # pragma: no cover
111111
assert context["identity"]
112112
context["identity"].setdefault("traits", {}).update(
113113
{trait.trait_key: trait.trait_value for trait in override_traits}

flag_engine/segments/evaluator.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,11 @@ def context_matches_condition(
105105

106106

107107
def _get_trait(context: EvaluationContext, trait_key: str) -> TraitValue:
108-
if identity_context := context["identity"]:
109-
return identity_context["traits"][trait_key]
110-
return None
108+
return (
109+
identity_context["traits"][trait_key]
110+
if (identity_context := context["identity"])
111+
else None
112+
)
111113

112114

113115
def get_context_value(

tests/unit/segments/test_segments_evaluator.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ def test_context_in_segment(
218218
"segment_split_value, identity_hashed_percentage, expected_result",
219219
((10, 1, True), (100, 50, True), (0, 1, False), (10, 20, False)),
220220
)
221-
def test_identity_in_segment_percentage_split(
221+
def test_context_in_segment_percentage_split(
222222
mocker: MockerFixture,
223223
context: EvaluationContext,
224224
segment_split_value: int,
@@ -246,6 +246,36 @@ def test_identity_in_segment_percentage_split(
246246
assert result == expected_result
247247

248248

249+
def test_context_in_segment_percentage_split__trait_value__calls_expected(
250+
mocker: MockerFixture,
251+
context: EvaluationContext,
252+
) -> None:
253+
# Given
254+
assert context["identity"] is not None
255+
context["identity"]["traits"]["custom_trait"] = "custom_value"
256+
percentage_split_condition = SegmentConditionModel(
257+
operator=constants.PERCENTAGE_SPLIT,
258+
value="10",
259+
property_="custom_trait",
260+
)
261+
rule = SegmentRuleModel(
262+
type=constants.ALL_RULE, conditions=[percentage_split_condition]
263+
)
264+
segment = SegmentModel(id=1, name="% split", rules=[rule])
265+
266+
mock_get_hashed_percentage = mocker.patch(
267+
"flag_engine.segments.evaluator.get_hashed_percentage_for_object_ids"
268+
)
269+
mock_get_hashed_percentage.return_value = 1
270+
271+
# When
272+
result = is_context_in_segment(context=context, segment=segment)
273+
274+
# Then
275+
mock_get_hashed_percentage.assert_called_once_with([segment.id, "custom_value"])
276+
assert result
277+
278+
249279
@pytest.mark.parametrize(
250280
"operator, property_, expected_result",
251281
(

0 commit comments

Comments
 (0)