Skip to content

Commit e77a919

Browse files
author
Kwame Efah
committed
Fix race in tests by completing executor tasks before assertion
1 parent d86b6df commit e77a919

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

mixpanel/flags/test_local_feature_flags.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,19 +227,22 @@ async def test_get_variant_value_tracks_exposure_when_variant_selected(self):
227227
with patch('mixpanel.flags.utils.normalized_hash') as mock_hash:
228228
mock_hash.return_value = 0.5
229229
_ = flags.get_variant_value("test_flag", "fallback", {"distinct_id": "user123"})
230+
flags._executor.shutdown()
230231
flags._tracker.assert_called_once()
231232

232233
@respx.mock
233234
async def test_get_variant_value_does_not_track_exposure_on_fallback(self):
234235
flags = await self.setup_flags([])
235236
_ = flags.get_variant_value("nonexistent_flag", "fallback", {"distinct_id": "user123"})
237+
flags._executor.shutdown()
236238
flags._tracker.assert_not_called()
237239

238240
@respx.mock
239241
async def test_get_variant_value_does_not_track_exposure_without_distinct_id(self):
240242
flag = create_test_flag(context="company")
241243
flags = await self.setup_flags([flag])
242244
_ = flags.get_variant_value("nonexistent_flag", "fallback", {"company_id": "company123"})
245+
flags._executor.shutdown()
243246
flags._tracker.assert_not_called()
244247

245248
@respx.mock
@@ -283,7 +286,6 @@ async def track_fetch_calls(self):
283286

284287
flags_in_order=[[flag_v1], [flag_v2]]
285288
flags = await self.setup_flags_with_polling(flags_in_order)
286-
287289
async with polling_limit_check:
288290
await polling_limit_check.wait_for(lambda: polling_iterations >= len(flags_in_order))
289291

mixpanel/flags/test_remote_feature_flags.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,12 +64,14 @@ async def test_get_variant_value_tracks_exposure_event_if_variant_selected(self)
6464
if pending:
6565
await asyncio.gather(*pending, return_exceptions=True)
6666

67+
self._flags._executor.shutdown()
6768
self.mock_tracker.assert_called_once()
6869

6970
@respx.mock
7071
async def test_get_variant_value_does_not_track_exposure_event_if_fallback(self):
7172
respx.get(ENDPOINT).mock(side_effect=httpx.RequestError("Network error"))
7273
await self._flags.aget_variant_value("test_flag", "control", {"distinct_id": "user123"})
74+
self._flags._executor.shutdown()
7375
self.mock_tracker.assert_not_called()
7476

7577
@respx.mock
@@ -133,13 +135,14 @@ def test_get_variant_value_tracks_exposure_event_if_variant_selected(self):
133135
return_value=create_success_response({"test_flag": SelectedVariant(variant_key="treatment", variant_value="treatment")}))
134136

135137
self._flags.get_variant_value("test_flag", "control", {"distinct_id": "user123"})
138+
self._flags._executor.shutdown()
136139
self.mock_tracker.assert_called_once()
137140

138141
@respx.mock
139142
def test_get_variant_value_does_not_track_exposure_event_if_fallback(self):
140143
respx.get(ENDPOINT).mock(side_effect=httpx.RequestError("Network error"))
141-
142144
self._flags.get_variant_value("test_flag", "control", {"distinct_id": "user123"})
145+
self._flags._executor.shutdown()
143146
self.mock_tracker.assert_not_called()
144147

145148
@respx.mock

0 commit comments

Comments
 (0)