From 1b1a7216a38a83e52cd482cc95bbd22d29132b15 Mon Sep 17 00:00:00 2001 From: Sonny Bakker Date: Fri, 18 Oct 2024 12:39:50 +0200 Subject: [PATCH] [#232] use an enum for `soortDigitaalAdres` --- .../api/tests/test_digitaal_adres.py | 54 ++++++++++--------- .../components/klantinteracties/constants.py | 8 +++ ...lter_digitaaladres_soort_digitaal_adres.py | 27 ++++++++++ ...lter_digitaaladres_soort_digitaal_adres.py | 27 ++++++++++ .../klantinteracties/models/digitaal_adres.py | 2 + .../models/tests/factories/digitaal_adres.py | 5 +- .../components/klantinteracties/openapi.yaml | 14 +++-- 7 files changed, 106 insertions(+), 31 deletions(-) create mode 100644 src/openklant/components/klantinteracties/constants.py create mode 100644 src/openklant/components/klantinteracties/migrations/0020_alter_digitaaladres_soort_digitaal_adres.py create mode 100644 src/openklant/components/klantinteracties/migrations/0021_alter_digitaaladres_soort_digitaal_adres.py 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 a922be81..d248faf7 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/tests/test_digitaal_adres.py @@ -1,6 +1,7 @@ from rest_framework import status from vng_api_common.tests import reverse +from openklant.components.klantinteracties.constants import SoortDigitaalAdres from openklant.components.klantinteracties.models.tests.factories.digitaal_adres import ( DigitaalAdresFactory, ) @@ -54,8 +55,8 @@ def test_create_digitaal_adres(self): data = { "verstrektDoorBetrokkene": None, "verstrektDoorPartij": None, - "soortDigitaalAdres": "soortDigitaalAdres", - "adres": "adres", + "soortDigitaalAdres": SoortDigitaalAdres.email, + "adres": "foobar@example.com", "omschrijving": "omschrijving", } @@ -65,9 +66,9 @@ def test_create_digitaal_adres(self): data = response.json() self.assertIsNone(data["verstrektDoorBetrokkene"]) - self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.email) self.assertEqual(data["verstrektDoorPartij"], None) - self.assertEqual(data["adres"], "adres") + self.assertEqual(data["adres"], "foobar@example.com") self.assertEqual(data["omschrijving"], "omschrijving") with self.subTest("with_betrokkene_and_partij"): @@ -85,8 +86,8 @@ def test_create_digitaal_adres(self): data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid) ) self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) - self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") - self.assertEqual(data["adres"], "adres") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.email) + self.assertEqual(data["adres"], "foobar@example.com") self.assertEqual(data["omschrijving"], "omschrijving") def test_update_digitaal_adres(self): @@ -95,8 +96,8 @@ def test_update_digitaal_adres(self): digitaal_adres = DigitaalAdresFactory.create( betrokkene=betrokkene, partij=partij2, - soort_digitaal_adres="soortDigitaalAdres", - adres="adres", + soort_digitaal_adres=SoortDigitaalAdres.email, + adres="foobar@example.com", omschrijving="omschrijving", ) detail_url = reverse( @@ -108,15 +109,15 @@ def test_update_digitaal_adres(self): self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij2.uuid)) - self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") - self.assertEqual(data["adres"], "adres") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.email) + self.assertEqual(data["adres"], "foobar@example.com") self.assertEqual(data["omschrijving"], "omschrijving") data = { "verstrektDoorBetrokkene": {"uuid": str(betrokkene2.uuid)}, "verstrektDoorPartij": {"uuid": str(partij.uuid)}, - "soortDigitaalAdres": "changed", - "adres": "changed", + "soortDigitaalAdres": SoortDigitaalAdres.telefoonnummer, + "adres": "0721434543", "omschrijving": "changed", } @@ -128,16 +129,16 @@ def test_update_digitaal_adres(self): self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene2.uuid)) self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) - self.assertEqual(data["soortDigitaalAdres"], "changed") - self.assertEqual(data["adres"], "changed") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.telefoonnummer) + self.assertEqual(data["adres"], "0721434543") self.assertEqual(data["omschrijving"], "changed") with self.subTest("update_betrokkene_partij_to_none"): data = { "verstrektDoorBetrokkene": None, "verstrektDoorPartij": None, - "soortDigitaalAdres": "changed", - "adres": "changed", + "soortDigitaalAdres": SoortDigitaalAdres.telefoonnummer, + "adres": "0721434543", "omschrijving": "changed", } @@ -149,8 +150,10 @@ def test_update_digitaal_adres(self): self.assertIsNone(data["verstrektDoorBetrokkene"]) self.assertIsNone(data["verstrektDoorPartij"]) - self.assertEqual(data["soortDigitaalAdres"], "changed") - self.assertEqual(data["adres"], "changed") + self.assertEqual( + data["soortDigitaalAdres"], SoortDigitaalAdres.telefoonnummer + ) + self.assertEqual(data["adres"], "0721434543") self.assertEqual(data["omschrijving"], "changed") def test_partial_update_digitaal_adres(self): @@ -159,8 +162,8 @@ def test_partial_update_digitaal_adres(self): digitaal_adres = DigitaalAdresFactory.create( betrokkene=betrokkene, partij=partij, - soort_digitaal_adres="soortDigitaalAdres", - adres="adres", + soort_digitaal_adres=SoortDigitaalAdres.email, + adres="foobar@example.com", omschrijving="omschrijving", ) detail_url = reverse( @@ -172,12 +175,13 @@ def test_partial_update_digitaal_adres(self): self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) - self.assertEqual(data["soortDigitaalAdres"], "soortDigitaalAdres") - self.assertEqual(data["adres"], "adres") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.email) + self.assertEqual(data["adres"], "foobar@example.com") self.assertEqual(data["omschrijving"], "omschrijving") data = { - "soortDigitaalAdres": "changed", + "soortDigitaalAdres": SoortDigitaalAdres.telefoonnummer, + "adres": "0721434543", } response = self.client.patch(detail_url, data) @@ -188,8 +192,8 @@ def test_partial_update_digitaal_adres(self): self.assertEqual(data["verstrektDoorBetrokkene"]["uuid"], str(betrokkene.uuid)) self.assertEqual(data["verstrektDoorPartij"]["uuid"], str(partij.uuid)) - self.assertEqual(data["soortDigitaalAdres"], "changed") - self.assertEqual(data["adres"], "adres") + self.assertEqual(data["soortDigitaalAdres"], SoortDigitaalAdres.telefoonnummer) + self.assertEqual(data["adres"], "0721434543") self.assertEqual(data["omschrijving"], "omschrijving") def test_destroy_digitaal_adres(self): diff --git a/src/openklant/components/klantinteracties/constants.py b/src/openklant/components/klantinteracties/constants.py new file mode 100644 index 00000000..cbdaa326 --- /dev/null +++ b/src/openklant/components/klantinteracties/constants.py @@ -0,0 +1,8 @@ +from django.db.models import TextChoices +from django.utils.translation import gettext_lazy as _ + + +class SoortDigitaalAdres(TextChoices): + email = "email", _("Email") + telefoonnummer = "telefoonnummer", _("Telefoonnummer") + overig = "overig", _("Overig") diff --git a/src/openklant/components/klantinteracties/migrations/0020_alter_digitaaladres_soort_digitaal_adres.py b/src/openklant/components/klantinteracties/migrations/0020_alter_digitaaladres_soort_digitaal_adres.py new file mode 100644 index 00000000..e6f58c69 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0020_alter_digitaaladres_soort_digitaal_adres.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.15 on 2024-10-18 10:38 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("klantinteracties", "0019_alter_partij_indicatie_geheimhouding"), + ] + + operations = [ + migrations.AlterField( + model_name="digitaaladres", + name="soort_digitaal_adres", + field=models.CharField( + choices=[ + ("email", "Man"), + ("telefoonnummer", "Telefoonnummer"), + ("overig", "Overig"), + ], + help_text="Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen.", + max_length=255, + verbose_name="soort digitaal adres", + ), + ), + ] diff --git a/src/openklant/components/klantinteracties/migrations/0021_alter_digitaaladres_soort_digitaal_adres.py b/src/openklant/components/klantinteracties/migrations/0021_alter_digitaaladres_soort_digitaal_adres.py new file mode 100644 index 00000000..33ab23f1 --- /dev/null +++ b/src/openklant/components/klantinteracties/migrations/0021_alter_digitaaladres_soort_digitaal_adres.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.15 on 2024-10-18 10:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("klantinteracties", "0020_alter_digitaaladres_soort_digitaal_adres"), + ] + + operations = [ + migrations.AlterField( + model_name="digitaaladres", + name="soort_digitaal_adres", + field=models.CharField( + choices=[ + ("email", "Email"), + ("telefoonnummer", "Telefoonnummer"), + ("overig", "Overig"), + ], + help_text="Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen.", + max_length=255, + verbose_name="soort digitaal adres", + ), + ), + ] diff --git a/src/openklant/components/klantinteracties/models/digitaal_adres.py b/src/openklant/components/klantinteracties/models/digitaal_adres.py index adfc8114..79bd5f31 100644 --- a/src/openklant/components/klantinteracties/models/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/models/digitaal_adres.py @@ -3,6 +3,7 @@ from django.db import models from django.utils.translation import gettext_lazy as _ +from openklant.components.klantinteracties.constants import SoortDigitaalAdres from openklant.components.klantinteracties.models.klantcontacten import Betrokkene from openklant.components.klantinteracties.models.partijen import Partij from openklant.components.utils.mixins import APIMixin @@ -36,6 +37,7 @@ class DigitaalAdres(APIMixin, models.Model): "met dit adres contact kan worden opgenomen." ), max_length=255, + choices=SoortDigitaalAdres.choices, ) adres = models.CharField( _("adres"), diff --git a/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py b/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py index 82865036..3389c9ee 100644 --- a/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/models/tests/factories/digitaal_adres.py @@ -1,5 +1,6 @@ -import factory +import factory.fuzzy +from openklant.components.klantinteracties.constants import SoortDigitaalAdres from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres from openklant.components.klantinteracties.models.tests.factories.klantcontacten import ( BetrokkeneFactory, @@ -9,7 +10,7 @@ class DigitaalAdresFactory(factory.django.DjangoModelFactory): uuid = factory.Faker("uuid4") betrokkene = factory.SubFactory(BetrokkeneFactory) - soort_digitaal_adres = factory.Faker("word") + soort_digitaal_adres = factory.fuzzy.FuzzyChoice(SoortDigitaalAdres.values) adres = factory.Faker("word") omschrijving = factory.Faker("word") diff --git a/src/openklant/components/klantinteracties/openapi.yaml b/src/openklant/components/klantinteracties/openapi.yaml index c50ae983..be5d62fd 100644 --- a/src/openklant/components/klantinteracties/openapi.yaml +++ b/src/openklant/components/klantinteracties/openapi.yaml @@ -3355,10 +3355,10 @@ components: worden. maxLength: 80 soortDigitaalAdres: - type: string + allOf: + - $ref: '#/components/schemas/SoortDigitaalAdresEnum' description: Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen. - maxLength: 255 omschrijving: type: string description: Omschrijving van het digitaal adres. @@ -4710,10 +4710,10 @@ components: worden. maxLength: 80 soortDigitaalAdres: - type: string + allOf: + - $ref: '#/components/schemas/SoortDigitaalAdresEnum' description: Typering van het digitale adres die aangeeft via welk(e) kanaal of kanalen met dit adres contact kan worden opgenomen. - maxLength: 255 omschrijving: type: string description: Omschrijving van het digitaal adres. @@ -5145,6 +5145,12 @@ components: - geautomatiseerde_actor - organisatorische_eenheid type: string + SoortDigitaalAdresEnum: + enum: + - email + - telefoonnummer + - overig + type: string SoortPartijEnum: enum: - persoon