From 8076b6a1a15c49c93d8dc6c20c3f9c3c88c248d2 Mon Sep 17 00:00:00 2001 From: Steven Bal Date: Thu, 21 Nov 2024 16:03:38 +0100 Subject: [PATCH] :sparkles: [#246] Only allow is_standaard_adres if partij is set --- .../api/serializers/digitaal_adres.py | 15 ++++++++ .../api/tests/test_digitaal_adres.py | 35 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py index f45ccca3..d779d94b 100644 --- a/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/serializers/digitaal_adres.py @@ -116,6 +116,21 @@ def validate_adres(self, adres): OptionalEmailValidator()(adres, soort_digitaal_adres) return adres + def validate(self, attrs): + partij = get_field_value(self, attrs, "partij") + is_standaard_adres = get_field_value(self, attrs, "is_standaard_adres") + if is_standaard_adres and not partij: + raise serializers.ValidationError( + { + "is_standaard_adres": _( + "`is_standaard_adres` kan alleen gezet worden " + "als `verstrekt_door_partij` niet leeg is." + ) + } + ) + + return super().validate(attrs) + @transaction.atomic def update(self, instance, validated_data): if "partij" in validated_data: diff --git a/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py b/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py index 5272dbee..f6eb1517 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py @@ -203,6 +203,41 @@ def test_create_digitaal_adres_is_standaard_adres(self): self.assertEqual(existing_adres.is_standaard_adres, False) self.assertEqual(new_adres.is_standaard_adres, True) + def test_create_digitaal_adres_is_standaard_adres_without_partij_not_possible(self): + """ + Creating a DigitaalAdres with isStandaardAdres=True should not be possible with + verstrektDoorPartij=None + """ + betrokkene = BetrokkeneFactory.create() + + list_url = reverse("klantinteracties:digitaaladres-list") + data = { + "verstrektDoorBetrokkene": {"uuid": str(betrokkene.uuid)}, + "verstrektDoorPartij": None, + "soortDigitaalAdres": "email", + "adres": "foo@bar.com", + "omschrijving": "omschrijving", + "isStandaardAdres": True, + } + + response = self.client.post(list_url, data) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + data = response.json() + self.assertEqual( + data["invalidParams"], + [ + { + "name": "isStandaardAdres", + "code": "invalid", + "reason": _( + "`is_standaard_adres` kan alleen gezet worden als `verstrekt_door_partij` niet leeg is." + ), + } + ], + ) + self.assertEqual(DigitaalAdres.objects.count(), 0) + def test_update_digitaal_adres(self): betrokkene, betrokkene2 = BetrokkeneFactory.create_batch(2) partij, partij2 = PartijFactory.create_batch(2)