Skip to content

Commit 10242fb

Browse files
Copilotkhvn26
andcommitted
refactor: address code review feedback
- Use local_eval_flagsmith fixture in tests - Mock specific function with autospec - Use assert_called_once_with for cleaner assertions - Simplify context filtering with copy() and pop() Co-authored-by: khvn26 <[email protected]>
1 parent 3bda6aa commit 10242fb

File tree

2 files changed

+22
-31
lines changed

2 files changed

+22
-31
lines changed

flagsmith/flagsmith.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -334,14 +334,8 @@ def _get_environment_flags_from_document(self) -> Flags:
334334

335335
# Omit segments from evaluation context for environment flags
336336
# as they are only relevant for identity-specific evaluations
337-
context_without_segments = typing.cast(
338-
SDKEvaluationContext,
339-
{
340-
key: value
341-
for key, value in self._evaluation_context.items()
342-
if key != "segments"
343-
},
344-
)
337+
context_without_segments = self._evaluation_context.copy()
338+
context_without_segments.pop("segments", None)
345339

346340
evaluation_result = engine.get_evaluation_result(
347341
context=context_without_segments,

tests/test_flagsmith.py

Lines changed: 20 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,14 @@ def test_get_environment_flags_uses_local_environment_when_available(
9696

9797
def test_get_environment_flags_omits_segments_from_evaluation_context(
9898
mocker: MockerFixture,
99-
flagsmith: Flagsmith,
99+
local_eval_flagsmith: Flagsmith,
100100
evaluation_context: SDKEvaluationContext,
101101
) -> None:
102102
# Given
103-
flagsmith._evaluation_context = evaluation_context
104-
flagsmith.enable_local_evaluation = True
105-
mock_engine = mocker.patch("flagsmith.flagsmith.engine")
103+
mock_get_evaluation_result = mocker.patch(
104+
"flagsmith.flagsmith.engine.get_evaluation_result",
105+
autospec=True,
106+
)
106107

107108
expected_evaluation_result = {
108109
"flags": {
@@ -116,17 +117,16 @@ def test_get_environment_flags_omits_segments_from_evaluation_context(
116117
"segments": [],
117118
}
118119

119-
mock_engine.get_evaluation_result.return_value = expected_evaluation_result
120+
mock_get_evaluation_result.return_value = expected_evaluation_result
120121

121122
# When
122-
flagsmith.get_environment_flags()
123+
local_eval_flagsmith.get_environment_flags()
123124

124125
# Then
125-
mock_engine.get_evaluation_result.assert_called_once()
126-
call_args = mock_engine.get_evaluation_result.call_args
127-
context = call_args[1]["context"] # Keyword argument 'context'
128-
# Segments should not be present in the context passed to the engine
129-
assert "segments" not in context
126+
# Verify segments are not present in the context passed to the engine
127+
context_without_segments = evaluation_context.copy()
128+
context_without_segments.pop("segments", None)
129+
mock_get_evaluation_result.assert_called_once_with(context=context_without_segments)
130130

131131

132132
@responses.activate()
@@ -228,13 +228,13 @@ def test_get_identity_flags_uses_local_environment_when_available(
228228

229229
def test_get_identity_flags_includes_segments_in_evaluation_context(
230230
mocker: MockerFixture,
231-
flagsmith: Flagsmith,
232-
evaluation_context: SDKEvaluationContext,
231+
local_eval_flagsmith: Flagsmith,
233232
) -> None:
234233
# Given
235-
flagsmith._evaluation_context = evaluation_context
236-
flagsmith.enable_local_evaluation = True
237-
mock_engine = mocker.patch("flagsmith.flagsmith.engine")
234+
mock_get_evaluation_result = mocker.patch(
235+
"flagsmith.flagsmith.engine.get_evaluation_result",
236+
autospec=True,
237+
)
238238

239239
expected_evaluation_result = {
240240
"flags": {
@@ -251,19 +251,16 @@ def test_get_identity_flags_includes_segments_in_evaluation_context(
251251
identifier = "identifier"
252252
traits = {"some_trait": "some_value"}
253253

254-
mock_engine.get_evaluation_result.return_value = expected_evaluation_result
254+
mock_get_evaluation_result.return_value = expected_evaluation_result
255255

256256
# When
257-
flagsmith.get_identity_flags(identifier, traits)
257+
local_eval_flagsmith.get_identity_flags(identifier, traits)
258258

259259
# Then
260-
mock_engine.get_evaluation_result.assert_called_once()
261-
call_args = mock_engine.get_evaluation_result.call_args
260+
# Verify segments are present in the context passed to the engine for identity flags
261+
call_args = mock_get_evaluation_result.call_args
262262
context = call_args[1]["context"]
263-
# Segments should be present in the context passed to the engine for identity flags
264263
assert "segments" in context
265-
# Verify segments from evaluation_context are preserved
266-
assert context["segments"] == evaluation_context["segments"]
267264

268265

269266
@responses.activate()

0 commit comments

Comments
 (0)