From 1c35a2a8fd8caeb4d65130d943a448425ed5c0d2 Mon Sep 17 00:00:00 2001 From: wadii Date: Tue, 29 Apr 2025 09:22:40 +0200 Subject: [PATCH 1/2] fix/validate-returns-empty-trait-list-if-persistence-false --- api/environments/sdk/serializers.py | 4 +-- .../sdk/test_unit_sdk_serializers.py | 33 +++++++++++++++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/api/environments/sdk/serializers.py b/api/environments/sdk/serializers.py index a2fa9fdfcec7..23b1013eed9b 100644 --- a/api/environments/sdk/serializers.py +++ b/api/environments/sdk/serializers.py @@ -193,7 +193,5 @@ def save(self, **kwargs): # type: ignore[no-untyped-def] def validate_traits(self, traits: typing.List[dict] = None): # type: ignore[no-untyped-def,type-arg,assignment] request = self.context["request"] if traits and not request.environment.trait_persistence_allowed(request): - raise serializers.ValidationError( - "Setting traits not allowed with client key." - ) + return [] return traits diff --git a/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py b/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py index 90466c87d97c..2689abc6866d 100644 --- a/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py +++ b/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py @@ -115,3 +115,36 @@ def test_identify_with_traits_serializer__transient__identity_and_traits_not_per # Then assert not Identity.objects.filter(identifier=identity_identifier).exists() assert not Trait.objects.filter(identity__identifier=identity_identifier).exists() + + +def test_identify_with_traits_serializer_validate_traits_returns_empty_list_when_persistence_not_allowed( + mocker: MockerFixture, + environment: Environment, +) -> None: + # Given + data = { + "identifier": "test_user", + "traits": [ + {"trait_key": "key1", "trait_value": "value1"}, + {"trait_key": "key2", "trait_value": "value2"}, + ], + } + + # Set up environment to not allow trait persistence + environment.allow_client_traits = False + environment.save() + + mock_request = mocker.MagicMock() + mock_request.environment = environment + + serializer = IdentifyWithTraitsSerializer( + data=data, + context={"environment": environment, "request": mock_request} + ) + + # When + serializer.is_valid() + validated_traits = serializer.validated_data.get("traits") + + # Then + assert validated_traits == [] \ No newline at end of file From a804b9c4c01be20c1cfb2fe6da56d72614629915 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 07:24:30 +0000 Subject: [PATCH 2/2] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .../environments/sdk/test_unit_sdk_serializers.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py b/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py index 2689abc6866d..32a06dd502cb 100644 --- a/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py +++ b/api/tests/unit/environments/sdk/test_unit_sdk_serializers.py @@ -129,17 +129,16 @@ def test_identify_with_traits_serializer_validate_traits_returns_empty_list_when {"trait_key": "key2", "trait_value": "value2"}, ], } - + # Set up environment to not allow trait persistence environment.allow_client_traits = False environment.save() - + mock_request = mocker.MagicMock() mock_request.environment = environment - + serializer = IdentifyWithTraitsSerializer( - data=data, - context={"environment": environment, "request": mock_request} + data=data, context={"environment": environment, "request": mock_request} ) # When @@ -147,4 +146,4 @@ def test_identify_with_traits_serializer_validate_traits_returns_empty_list_when validated_traits = serializer.validated_data.get("traits") # Then - assert validated_traits == [] \ No newline at end of file + assert validated_traits == []