Skip to content

Commit 0b378a8

Browse files
committed
add test_refresh_environment_caches__deleted_identity_override__cached_expected
1 parent 216c582 commit 0b378a8

File tree

1 file changed

+90
-10
lines changed

1 file changed

+90
-10
lines changed

tests/test_environments.py

Lines changed: 90 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
)
1616
from edge_proxy.models import IdentityWithTraits
1717
from edge_proxy.settings import (
18+
AppSettings,
1819
EndpointCacheSettings,
1920
EndpointCachesSettings,
20-
AppSettings,
2121
)
2222
from tests.fixtures.response_data import environment_1, environment_1_api_key
2323

24+
pytestmark = pytest.mark.asyncio
25+
2426
client_key_2 = "test_env_key_2"
2527

2628
settings = AppSettings(
@@ -33,7 +35,6 @@
3335
now = datetime.now()
3436

3537

36-
@pytest.mark.asyncio
3738
async def test_refresh_makes_correct_http_call(mocker: MockerFixture):
3839
# Given
3940
mock_client = mocker.AsyncMock()
@@ -72,7 +73,6 @@ async def test_refresh_makes_correct_http_call(mocker: MockerFixture):
7273
assert environment_service.last_updated_at == now
7374

7475

75-
@pytest.mark.asyncio
7676
async def test_refresh_does_not_update_last_updated_at_if_any_request_fails(
7777
mocker: MockerFixture,
7878
):
@@ -91,7 +91,6 @@ async def test_refresh_does_not_update_last_updated_at_if_any_request_fails(
9191
assert environment_service.last_updated_at is None
9292

9393

94-
@pytest.mark.asyncio
9594
async def test_get_environment_works_correctly(mocker: MockerFixture):
9695
# Given
9796
mock_client = mocker.AsyncMock()
@@ -139,7 +138,6 @@ def test_get_environment_raises_for_unknown_keys():
139138
environment_service.get_environment(environment_key="test_env_key_unknown")
140139

141140

142-
@pytest.mark.asyncio
143141
async def test_refresh_environment_caches_clears_endpoint_caches_if_environment_changes(
144142
mocker: MockerFixture,
145143
) -> None:
@@ -196,7 +194,6 @@ async def test_refresh_environment_caches_clears_endpoint_caches_if_environment_
196194
assert environment_service.get_flags_response_data.cache_info().currsize == 0
197195

198196

199-
@pytest.mark.asyncio
200197
async def test_refresh_environment_caches_sets_last_modified_if_environment_was_cached(
201198
mocker: MockerFixture,
202199
):
@@ -231,7 +228,93 @@ def save_if_modified_since(**kwargs):
231228
assert if_modified_since == "Sun, 20 Jul 1969 20:17:40 GMT"
232229

233230

234-
@pytest.mark.asyncio
231+
async def test_refresh_environment_caches__deleted_identity_override__cached_expected(
232+
mocker: MockerFixture,
233+
) -> None:
234+
# Given
235+
modified_document = copy.deepcopy(environment_1)
236+
modified_document["identity_overrides"] = []
237+
238+
mocked_client = mocker.AsyncMock()
239+
mocked_client.get.side_effect = [
240+
mocker.MagicMock(
241+
text=orjson.dumps(environment_1), raise_for_status=lambda: None
242+
),
243+
mocker.MagicMock(
244+
text=orjson.dumps(modified_document), raise_for_status=lambda: None
245+
),
246+
]
247+
settings
248+
249+
environment_service = EnvironmentService(
250+
settings=AppSettings(
251+
api_url="http://127.0.0.1:8000/api/v1",
252+
environment_key_pairs=[
253+
{
254+
"server_side_key": "ser.key1",
255+
"client_side_key": environment_1_api_key,
256+
},
257+
],
258+
),
259+
client=mocked_client,
260+
)
261+
262+
# When
263+
await environment_service.refresh_environment_caches()
264+
265+
# Then
266+
assert environment_service.get_identity_response_data(
267+
IdentityWithTraits(identifier="overridden-id"),
268+
environment_1_api_key,
269+
) == {
270+
"flags": [
271+
{
272+
"enabled": True,
273+
"feature": {
274+
"id": 1,
275+
"name": "feature_1",
276+
"type": "STANDARD",
277+
},
278+
"feature_state_value": "identity_override",
279+
},
280+
{
281+
"enabled": True,
282+
"feature": {
283+
"id": 2,
284+
"name": "feature_2",
285+
"type": "STANDARD",
286+
},
287+
"feature_state_value": "2.3",
288+
},
289+
],
290+
"traits": [],
291+
}
292+
293+
# When
294+
# We refresh the environment caches again
295+
# and receive a document with the identity override removed
296+
await environment_service.refresh_environment_caches()
297+
298+
# Then
299+
assert environment_service.get_identity_response_data(
300+
IdentityWithTraits(identifier="overridden-id"), environment_1_api_key
301+
) == {
302+
"flags": [
303+
{
304+
"enabled": False,
305+
"feature": {"id": 1, "name": "feature_1", "type": "STANDARD"},
306+
"feature_state_value": "feature_1_value",
307+
},
308+
{
309+
"enabled": True,
310+
"feature": {"id": 2, "name": "feature_2", "type": "STANDARD"},
311+
"feature_state_value": "2.3",
312+
},
313+
],
314+
"traits": [],
315+
}
316+
317+
235318
async def test_get_identity_flags_response_skips_cache_for_different_identity(
236319
mocker: MockerFixture,
237320
) -> None:
@@ -270,7 +353,6 @@ async def test_get_identity_flags_response_skips_cache_for_different_identity(
270353
assert environment_service.get_identity_response_data.cache_info().hits == 0
271354

272355

273-
@pytest.mark.asyncio
274356
async def test_get_flags_response_data_skips_filter_for_server_key(
275357
mocker: MockerFixture,
276358
) -> None:
@@ -301,7 +383,6 @@ async def test_get_flags_response_data_skips_filter_for_server_key(
301383
assert specific_flag.get("feature").get("name") == "feature_3"
302384

303385

304-
@pytest.mark.asyncio
305386
async def test_get_flags_response_data_filters_server_side_features_for_client_key(
306387
mocker: MockerFixture,
307388
) -> None:
@@ -332,7 +413,6 @@ async def test_get_flags_response_data_filters_server_side_features_for_client_k
332413
assert len(flags) == 2
333414

334415

335-
@pytest.mark.asyncio
336416
async def test_get_identity_flags_response_skips_filter_for_server_key(
337417
mocker: MockerFixture,
338418
) -> None:

0 commit comments

Comments
 (0)