diff --git a/api/environments/models.py b/api/environments/models.py index d5b27ea318db..6bf93e2b9775 100644 --- a/api/environments/models.py +++ b/api/environments/models.py @@ -56,7 +56,6 @@ from projects.models import Project from segments.models import Segment from util.mappers import ( - map_environment_to_environment_document, map_environment_to_sdk_document, ) from webhooks.models import AbstractBaseExportableWebhookModel @@ -361,7 +360,8 @@ def write_environment_documents( ): environment_document_cache.set_many( { - e.api_key: map_environment_to_environment_document(e) + # Use the SDK mapper so the cache perfectly matches the DB fallback + e.api_key: map_environment_to_sdk_document(e) for e in environments } ) diff --git a/api/tests/unit/environments/test_unit_environments_models.py b/api/tests/unit/environments/test_unit_environments_models.py index 2f17845bfc7e..038449a33500 100644 --- a/api/tests/unit/environments/test_unit_environments_models.py +++ b/api/tests/unit/environments/test_unit_environments_models.py @@ -19,6 +19,7 @@ from audit.related_object_type import RelatedObjectType from core.constants import STRING from core.request_origin import RequestOrigin +from environments.enums import EnvironmentDocumentCacheMode from environments.identities.models import Identity from environments.metrics import CACHE_HIT, CACHE_MISS from environments.models import ( @@ -41,7 +42,10 @@ from segments.models import Segment from tests.types import EnableFeaturesFixture from users.models import FFAdminUser -from util.mappers import map_environment_to_environment_document +from util.mappers import ( + map_environment_to_environment_document, + map_environment_to_sdk_document, +) if typing.TYPE_CHECKING: from django.db.models import Model @@ -1280,3 +1284,21 @@ def test_environment_clone_from_non_versioned_environment_with_use_v2_feature_ve latest_feature_states = get_environment_flags_queryset(new_environment) assert latest_feature_states.count() == 2 assert {fs.environment_feature_version for fs in latest_feature_states} == {efv} + + +@mock.patch("environments.models.environment_document_cache") +def test_write_environment_documents__persistent_caching_enabled__caches_sdk_document( + mock_document_cache: MagicMock, environment: Environment, settings: typing.Any +) -> None: + # Given + settings.CACHE_ENVIRONMENT_DOCUMENT_MODE = EnvironmentDocumentCacheMode.PERSISTENT + + # When + Environment.write_environment_documents(environment_id=environment.id) + + # Then + cache_payload = mock_document_cache.set_many.call_args[0][0] + cached_document = cache_payload[environment.api_key] + expected_document = map_environment_to_sdk_document(environment) + + assert cached_document == expected_document