diff --git a/src/openklant/components/klantinteracties/api/filterset/actoren.py b/src/openklant/components/klantinteracties/api/filterset/actoren.py index 4f4b634a..b866be10 100644 --- a/src/openklant/components/klantinteracties/api/filterset/actoren.py +++ b/src/openklant/components/klantinteracties/api/filterset/actoren.py @@ -8,7 +8,7 @@ class ActorenFilterSet(FilterSet): naam = filters.CharFilter( lookup_expr="icontains", - help_text=_("Zoek klantcontacten met specifieke tekst in inhoud"), + help_text=_("Zoek klantcontacten met specifieke tekst in inhoud."), ) class Meta: diff --git a/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py b/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py index 242391d2..75afb499 100644 --- a/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/filterset/digitaal_adres.py @@ -1,10 +1,106 @@ -from django_filters.rest_framework import FilterSet +import uuid + +from django.utils.translation import gettext_lazy as _ + +from django_filters.rest_framework import FilterSet, filters from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( DigitaalAdresSerializer, ) +from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres from openklant.components.utils.filters import ExpandFilter -class DigitaalAdresExpandFilterSet(FilterSet): +class DigitaalAdresDetailFilterSet(FilterSet): expand = ExpandFilter(serializer_class=DigitaalAdresSerializer) + + +class DigitaalAdresFilterSet(FilterSet): + verstrekt_door_betrokkene__uuid = filters.UUIDFilter( + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van de betrokkene uuid." + ), + field_name="betrokkene__uuid", + ) + verstrekt_door_betrokkene__url = filters.CharFilter( + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van de betrokkene url." + ), + method="filter_betrokkene_url", + ) + verstrekt_door_betrokkene__rol = filters.ChoiceFilter( + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van de betrokkene rol." + ), + field_name="betrokkene__rol", + ) + verstrekt_door_partij__uuid = filters.UUIDFilter( + help_text=_("Zoek digitaal adres(sen) object(en) op basis van de partij uuid."), + field_name="betrokkene__uuid", + ) + verstrekt_door_partij__url = filters.CharFilter( + help_text=_("Zoek digitaal adres(sen) object(en) op basis van de partij url."), + method="filter_partij_url", + ) + verstrekt_door_partij__soort_partij = filters.ChoiceFilter( + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van de partij soort." + ), + field_name="partij__soort_partij", + ) + adres = filters.CharFilter( + lookup_expr="exact", + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van adres dat exact gelijk moet zijn aan deze waarde." + ), + ) + adres__icontains = filters.CharFilter( + lookup_expr="icontains", + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van adres die de opgegeven waarden bevat." + ), + ) + soort_digitaal_adres = filters.CharFilter( + lookup_expr="exact", + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van het soort digitaal adres " + "dat exact gelijk moet zijn aan deze waarde." + ), + ) + omschrijving = filters.CharFilter( + lookup_expr="icontains", + help_text=_( + "Zoek digitaal adres(sen) object(en) op basis van omschijving die de opgegeven waarden bevat." + ), + ) + + expand = ExpandFilter(serializer_class=DigitaalAdresSerializer) + + class Meta: + model = DigitaalAdres + fields = ( + "verstrekt_door_betrokkene__uuid", + "verstrekt_door_betrokkene__url", + "verstrekt_door_betrokkene__rol", + "verstrekt_door_partij__uuid", + "verstrekt_door_partij__url", + "verstrekt_door_partij__soort_partij", + "adres", + "adres__icontains", + "soort_digitaal_adres", + "omschrijving", + ) + + def filter_betrokkene_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) + return queryset.filter(betrokkene__uuid=url_uuid) + except ValueError: + return queryset.none() + + def filter_partij_url(self, queryset, name, value): + try: + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) + return queryset.filter(partij__uuid=url_uuid) + except ValueError: + return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/filterset/internetaken.py b/src/openklant/components/klantinteracties/api/filterset/internetaken.py index 49239120..35c07cfd 100644 --- a/src/openklant/components/klantinteracties/api/filterset/internetaken.py +++ b/src/openklant/components/klantinteracties/api/filterset/internetaken.py @@ -9,22 +9,22 @@ class InternetaakFilterSet(FilterSet): toegewezen_aan_actor__uuid = filters.UUIDFilter( - help_text=_("Zoek internetaak object op basis van het toegewezen actor uuid"), + help_text=_("Zoek internetaak object op basis van het toegewezen actor uuid."), field_name="actor__uuid", ) toegewezen_aan_actor__url = filters.CharFilter( - help_text=_("Zoek internetaak object op basis van het toegewezen actor url"), + help_text=_("Zoek internetaak object op basis van het toegewezen actor url."), method="filter_toegewezen_aan_actor_url", ) aanleidinggevend_klantcontact__uuid = filters.UUIDFilter( help_text=_( - "Zoek internetaak object op basis van het aanleidingevende klantcontact uuid" + "Zoek internetaak object op basis van het aanleidingevende klantcontact uuid." ), field_name="klantcontact__uuid", ) aanleidinggevend_klantcontact__url = filters.CharFilter( help_text=_( - "Zoek internetaak object op basis van het aanleidingevende klantcontact url" + "Zoek internetaak object op basis van het aanleidingevende klantcontact url." ), method="filter_aanleidinggevend_klantcontact_url", ) @@ -46,14 +46,14 @@ class Meta: def filter_toegewezen_aan_actor_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(actor__uuid=url_uuid) except ValueError: return queryset.none() def filter_aanleidinggevend_klantcontact_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(klantcontact__uuid=url_uuid) except ValueError: return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py b/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py index 9f70a0ca..13b3c69f 100644 --- a/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py +++ b/src/openklant/components/klantinteracties/api/filterset/klantcontacten.py @@ -21,30 +21,30 @@ class KlantcontactDetailFilterSet(FilterSet): class KlantcontactFilterSet(FilterSet): had_betrokkene__url = filters.CharFilter( - help_text=_("Zoek klantcontact object op basis van het betrokkene url"), + help_text=_("Zoek klantcontact object op basis van het betrokkene url."), method="filter_betrokkene_url", ) had_betrokkene__uuid = filters.UUIDFilter( - help_text=_("Zoek klantcontact object op basis van het betrokkene uuid"), + help_text=_("Zoek klantcontact object op basis van het betrokkene uuid."), field_name="betrokkene__uuid", ) onderwerpobject__url = filters.CharFilter( - help_text=_("Zoek klantcontact object op basis van het onderwerpobject url"), + help_text=_("Zoek klantcontact object op basis van het onderwerpobject url."), method="filter_onderwerpobject_url", ) was_onderwerpobject__url = filters.CharFilter( help_text=_( - "Zoek was klantcontact object op basis van het onderwerpobject url" + "Zoek was klantcontact object op basis van het onderwerpobject url." ), method="filter_was_onderwerpobject_url", ) inhoud = filters.CharFilter( lookup_expr="icontains", - help_text=_("Zoek klantcontacten met specifieke tekst in inhoud"), + help_text=_("Zoek klantcontacten met specifieke tekst in inhoud."), ) onderwerp = filters.CharFilter( lookup_expr="icontains", - help_text=_("Zoek klantcontacten met specifieke tekst in onderwerp"), + help_text=_("Zoek klantcontacten met specifieke tekst in onderwerp."), ) expand = ExpandFilter(serializer_class=KlantcontactSerializer) @@ -77,21 +77,21 @@ class Meta: def filter_betrokkene_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(betrokkene__uuid=url_uuid) except ValueError: return queryset.none() def filter_onderwerpobject_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(onderwerpobject__uuid=url_uuid) except ValueError: return queryset.none() def filter_was_onderwerpobject_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(was_onderwerpobject__uuid=url_uuid) except ValueError: return queryset.none() @@ -157,7 +157,7 @@ class Meta: def filter_had_klantcontact_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(klantcontact__uuid=url_uuid) except ValueError: return queryset.none() @@ -180,7 +180,7 @@ def filter_digitaaladres_adres(self, queryset, name, value): def filter_digitaaladres_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(digitaaladres__uuid=url_uuid) except ValueError: return queryset.none() @@ -197,7 +197,7 @@ def filter_partij_nummer(self, queryset, name, value): def filter_partij_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(partij__uuid=url_uuid) except ValueError: return queryset.none() @@ -233,14 +233,14 @@ class Meta: def filter_actor_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(actor__uuid=url_uuid) except ValueError: return queryset.none() def filter_klantcontact_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(klantcontact__uuid=url_uuid) except ValueError: return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/filterset/partijen.py b/src/openklant/components/klantinteracties/api/filterset/partijen.py index 72e123a4..2c59471c 100644 --- a/src/openklant/components/klantinteracties/api/filterset/partijen.py +++ b/src/openklant/components/klantinteracties/api/filterset/partijen.py @@ -22,35 +22,37 @@ class PartijDetailFilterSet(FilterSet): class PartijFilterSet(FilterSet): vertegenwoordigde_partij__uuid = filters.UUIDFilter( help_text=_( - "Zoek partij object op basis van het vertegenwoordigde partij uuid" + "Zoek partij object op basis van het vertegenwoordigde partij uuid." ), field_name="vertegenwoordigde__vertegenwoordigende_partij__uuid", ) vertegenwoordigde_partij__url = filters.CharFilter( - help_text=_("Zoek partij object op basis van het vertegenwoordigde partij url"), + help_text=_( + "Zoek partij object op basis van het vertegenwoordigde partij url." + ), method="filter_vertegenwoordigde_partij_url", ) partij_identificator__code_objecttype = filters.CharFilter( help_text=_( - "Zoek partij object op basis van het partij identificator objecttype" + "Zoek partij object op basis van het partij identificator objecttype." ), method="filter_identificator_code_objecttype", ) partij_identificator__code_soort_object_id = filters.CharFilter( help_text=_( - "Zoek partij object op basis van het partij identificator soort object ID" + "Zoek partij object op basis van het partij identificator soort object ID." ), method="filter_identificator_code_soort_object_id", ) partij_identificator__object_id = filters.CharFilter( help_text=_( - "Zoek partij object op basis van het partij identificator object ID" + "Zoek partij object op basis van het partij identificator object ID." ), method="filter_identificator_object_id", ) partij_identificator__code_register = filters.CharFilter( help_text=_( - "Zoek partij object op basis van het partij identificator register" + "Zoek partij object op basis van het partij identificator register." ), method="filter_identificator_code_register", ) @@ -90,7 +92,7 @@ class Meta: def filter_vertegenwoordigde_partij_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter( vertegenwoordigde__vertegenwoordigende_partij__uuid=url_uuid ) @@ -142,13 +144,13 @@ def filter_categorierelatie_categorie_naam(self, queryset, name, value): class VertegenwoordigdenFilterSet(FilterSet): vertegenwoordigende_partij__url = filters.CharFilter( help_text=_( - "Zoek Vertegenwoordigden object op basis van het vertegenwoordigende partij url" + "Zoek Vertegenwoordigden object op basis van het vertegenwoordigende partij url." ), method="filter_vertegenwoordigende_partij_url", ) vertegenwoordigde_partij__url = filters.CharFilter( help_text=_( - "Zoek Vertegenwoordigden object op basis van het vertegenwoordigde partij url" + "Zoek Vertegenwoordigden object op basis van het vertegenwoordigde partij url." ), method="filter_vertegenwoordigde_partij_url", ) @@ -164,14 +166,14 @@ class Meta: def filter_vertegenwoordigende_partij_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(vertegenwoordigende_partij__uuid=url_uuid) except ValueError: return queryset.none() def filter_vertegenwoordigde_partij_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(vertegenwoordigde_partij__uuid=url_uuid) except ValueError: return queryset.none() @@ -179,15 +181,15 @@ def filter_vertegenwoordigde_partij_url(self, queryset, name, value): class CategorieRelatieFilterSet(FilterSet): partij__url = filters.CharFilter( - help_text=_("Zoek categorie relatie object op basis van de partij url"), + help_text=_("Zoek categorie relatie object op basis van de partij url."), method="filter_partij_url", ) partij__uuid = filters.CharFilter( - help_text=_("Zoek categorie relatie object op basis van de partij uuid"), + help_text=_("Zoek categorie relatie object op basis van de partij uuid."), method="filter_partij_uuid", ) partij__nummer = filters.CharFilter( - help_text=_("Zoek categorie relatie object op basis van het partij nummer"), + help_text=_("Zoek categorie relatie object op basis van het partij nummer."), method="filter_partij_nummer", ) categorie__naam = filters.CharFilter( @@ -225,7 +227,7 @@ def filter_partij_uuid(self, queryset, name, value): def filter_partij_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(partij__uuid=url_uuid) except ValueError: return queryset.none() @@ -245,7 +247,7 @@ def filter_categorie_uuid(self, queryset, name, value): def filter_categorie_url(self, queryset, name, value): try: - url_uuid = uuid.UUID(value.split("/")[-1]) + url_uuid = uuid.UUID(value.rstrip("/").split("/")[-1]) return queryset.filter(categorie__uuid=url_uuid) except ValueError: return queryset.none() diff --git a/src/openklant/components/klantinteracties/api/tests/test_filters.py b/src/openklant/components/klantinteracties/api/tests/test_filters.py index b0a0c5ba..134f0d8d 100644 --- a/src/openklant/components/klantinteracties/api/tests/test_filters.py +++ b/src/openklant/components/klantinteracties/api/tests/test_filters.py @@ -521,9 +521,7 @@ def setUp(self): def test_filter_vertegenwoordigde_partij_url(self): partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij5.uuid)}" response = self.client.get( - self.url, - {"vertegenwoordigdePartij__url": partij_url}, - content_type="application/json", + self.url, {"vertegenwoordigdePartij__url": partij_url} ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -714,11 +712,7 @@ def setUp(self): def test_filter_partij_url(self): partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij5.uuid)}" - response = self.client.get( - self.url, - {"partij__url": partij_url}, - content_type="application/json", - ) + response = self.client.get(self.url, {"partij__url": partij_url}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json()["results"] @@ -793,11 +787,7 @@ def test_filter_partij_nummer(self): def test_filter_categorie_url(self): categorie_url = f"http://testserver/klantinteracties/api/v1/categorieen/{str(self.categorie5.uuid)}" - response = self.client.get( - self.url, - {"categorie__url": categorie_url}, - content_type="application/json", - ) + response = self.client.get(self.url, {"categorie__url": categorie_url}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json()["results"] @@ -909,11 +899,7 @@ def setUp(self): def test_filter_klantcontact_url(self): klantcontact_url = f"http://testserver/klantinteracties/api/v1/klantcontacten/{str(self.klantcontact5.uuid)}" - response = self.client.get( - self.url, - {"klantcontact__url": klantcontact_url}, - content_type="application/json", - ) + response = self.client.get(self.url, {"klantcontact__url": klantcontact_url}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json()["results"] @@ -942,11 +928,7 @@ def test_filter_actor_url(self): actor_url = ( f"http://testserver/klantinteracties/api/v1/actoren/{str(self.actor5.uuid)}" ) - response = self.client.get( - self.url, - {"actor__url": actor_url}, - content_type="application/json", - ) + response = self.client.get(self.url, {"actor__url": actor_url}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json()["results"] @@ -1007,9 +989,7 @@ def setUp(self): def test_filter_vertegenwoordigende_partij_url(self): partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij5.uuid)}" response = self.client.get( - self.url, - {"vertegenwoordigendePartij__url": partij_url}, - content_type="application/json", + self.url, {"vertegenwoordigendePartij__url": partij_url} ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -1041,9 +1021,7 @@ def test_filter_vertegenwoordigende_partij_url(self): def test_filter_vertegenwoordigde_partij_url(self): partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij5.uuid)}" response = self.client.get( - self.url, - {"vertegenwoordigdePartij__url": partij_url}, - content_type="application/json", + self.url, {"vertegenwoordigdePartij__url": partij_url} ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -1112,11 +1090,7 @@ def test_filter_toegewezen_aan_actor_url(self): actor_url = ( f"http://testserver/klantinteracties/api/v1/actoren/{str(self.actor5.uuid)}" ) - response = self.client.get( - self.url, - {"toegewezenAanActor__url": actor_url}, - content_type="application/json", - ) + response = self.client.get(self.url, {"toegewezenAanActor__url": actor_url}) self.assertEqual(response.status_code, status.HTTP_200_OK) data = response.json()["results"] @@ -1146,9 +1120,7 @@ def test_filter_toegewezen_aan_actor_url(self): def test_filter_aanleidinggevend_klantcontact_url(self): klantcontact_url = f"http://testserver/klantinteracties/api/v1/klantcontacten/{str(self.klantcontact5.uuid)}" response = self.client.get( - self.url, - {"aanleidinggevendKlantcontact__url": klantcontact_url}, - content_type="application/json", + self.url, {"aanleidinggevendKlantcontact__url": klantcontact_url} ) self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -1174,3 +1146,100 @@ def test_filter_aanleidinggevend_klantcontact_url(self): self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.json()["count"], 0) + + +class DigitaalAdresFilterSetTests(APITestCase): + url = reverse("klantinteracties:digitaaladres-list") + + def setUp(self): + super().setUp() + ( + self.betrokkene, + self.betrokkene2, + self.betrokkene3, + self.betrokkene4, + self.betrokkene5, + ) = BetrokkeneFactory.create_batch(5) + ( + self.partij, + self.partij2, + self.partij3, + self.partij4, + self.partij5, + ) = PartijFactory.create_batch(5) + self.digitaal_adres = DigitaalAdresFactory.create( + partij=self.partij, betrokkene=self.betrokkene + ) + self.digitaal_adres2 = DigitaalAdresFactory.create( + partij=self.partij2, betrokkene=self.betrokkene2 + ) + self.digitaal_adres3 = DigitaalAdresFactory.create( + partij=self.partij3, betrokkene=self.betrokkene3 + ) + self.digitaal_adres4 = DigitaalAdresFactory.create( + partij=self.partij4, betrokkene=self.betrokkene4 + ) + self.digitaal_adres5 = DigitaalAdresFactory.create( + partij=self.partij5, betrokkene=self.betrokkene5 + ) + + def test_filter_verstrekt_door_betrokkene_url(self): + betrokkene_url = f"http://testserver/klantinteracties/api/v1/betrokkenen/{str(self.betrokkene5.uuid)}" + response = self.client.get( + self.url, {"verstrektDoorBetrokkene__url": betrokkene_url} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.digitaal_adres5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + betrokkene_url = ( + f"http://testserver/klantinteracties/api/v1/betrokkenen/{str(uuid4())}" + ) + response = self.client.get( + self.url, + {"verstrektDoorBetrokkene__url": betrokkene_url}, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"verstrektDoorBetrokkene__url": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + def test_filter_verstrekt_door_partij_url(self): + partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij5.uuid)}" + response = self.client.get(self.url, {"verstrektDoorPartij__url": partij_url}) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + data = response.json()["results"] + + self.assertEqual(1, len(data)) + self.assertEqual(str(self.digitaal_adres5.uuid), data[0]["uuid"]) + + with self.subTest("no_matches_found_return_nothing"): + response = self.client.get( + self.url, + { + "verstrektDoorPartij__url": f"http://testserver/klantinteracties/api/v1/partijen/{str(uuid4())}" + }, + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) + + with self.subTest("invalid_value_returns_empty_query"): + response = self.client.get( + self.url, {"verstrektDoorPartij__url": "ValueError"} + ) + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.json()["count"], 0) diff --git a/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py index a1805c58..e6a6b23f 100644 --- a/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py +++ b/src/openklant/components/klantinteracties/api/viewsets/digitaal_adres.py @@ -3,7 +3,8 @@ from rest_framework.pagination import PageNumberPagination from openklant.components.klantinteracties.api.filterset.digitaal_adres import ( - DigitaalAdresExpandFilterSet, + DigitaalAdresDetailFilterSet, + DigitaalAdresFilterSet, ) from openklant.components.klantinteracties.api.serializers.digitaal_adres import ( DigitaalAdresSerializer, @@ -62,4 +63,6 @@ def filterset_class(self): """ support expand in the detail endpoint """ - return DigitaalAdresExpandFilterSet + if self.detail: + return DigitaalAdresDetailFilterSet + return DigitaalAdresFilterSet diff --git a/src/openklant/components/klantinteracties/openapi.yaml b/src/openklant/components/klantinteracties/openapi.yaml index 1879eaf5..05f1053a 100644 --- a/src/openklant/components/klantinteracties/openapi.yaml +++ b/src/openklant/components/klantinteracties/openapi.yaml @@ -42,7 +42,7 @@ paths: name: naam schema: type: string - description: Zoek klantcontacten met specifieke tekst in inhoud + description: Zoek klantcontacten met specifieke tekst in inhoud. - name: page required: false in: query @@ -771,17 +771,17 @@ paths: name: partij__nummer schema: type: string - description: Zoek categorie relatie object op basis van het partij nummer + description: Zoek categorie relatie object op basis van het partij nummer. - in: query name: partij__url schema: type: string - description: Zoek categorie relatie object op basis van de partij url + description: Zoek categorie relatie object op basis van de partij url. - in: query name: partij__uuid schema: type: string - description: Zoek categorie relatie object op basis van de partij uuid + description: Zoek categorie relatie object op basis van de partij uuid. tags: - categorie relaties security: @@ -1065,6 +1065,18 @@ paths: description: Alle digitale adressen opvragen. summary: Alle digitale adressen opvragen. parameters: + - in: query + name: adres + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van adres dat exact + gelijk moet zijn aan deze waarde. + - in: query + name: adres__icontains + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van adres die de + opgegeven waarden bevat. - in: query name: expand schema: @@ -1080,12 +1092,66 @@ paths: explode: false style: form + - in: query + name: omschrijving + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van omschijving + die de opgegeven waarden bevat. - name: page required: false in: query description: Een pagina binnen de gepagineerde set resultaten. schema: type: integer + - in: query + name: soortDigitaalAdres + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van het soort digitaal + adres dat exact gelijk moet zijn aan deze waarde. + - in: query + name: verstrektDoorBetrokkene__rol + schema: + type: string + enum: + - klant + - vertegenwoordiger + description: Zoek digitaal adres(sen) object(en) op basis van de betrokkene + rol. + - in: query + name: verstrektDoorBetrokkene__url + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van de betrokkene + url. + - in: query + name: verstrektDoorBetrokkene__uuid + schema: + type: string + format: uuid + description: Zoek digitaal adres(sen) object(en) op basis van de betrokkene + uuid. + - in: query + name: verstrektDoorPartij__soortPartij + schema: + type: string + enum: + - contactpersoon + - organisatie + - persoon + description: Zoek digitaal adres(sen) object(en) op basis van de partij soort. + - in: query + name: verstrektDoorPartij__url + schema: + type: string + description: Zoek digitaal adres(sen) object(en) op basis van de partij url. + - in: query + name: verstrektDoorPartij__uuid + schema: + type: string + format: uuid + description: Zoek digitaal adres(sen) object(en) op basis van de partij uuid. tags: - digitale adressen security: @@ -1244,14 +1310,14 @@ paths: schema: type: string description: Zoek internetaak object op basis van het aanleidingevende klantcontact - url + url. - in: query name: aanleidinggevendKlantcontact__uuid schema: type: string format: uuid description: Zoek internetaak object op basis van het aanleidingevende klantcontact - uuid + uuid. - in: query name: actor__naam schema: @@ -1289,13 +1355,13 @@ paths: name: toegewezenAanActor__url schema: type: string - description: Zoek internetaak object op basis van het toegewezen actor url + description: Zoek internetaak object op basis van het toegewezen actor url. - in: query name: toegewezenAanActor__uuid schema: type: string format: uuid - description: Zoek internetaak object op basis van het toegewezen actor uuid + description: Zoek internetaak object op basis van het toegewezen actor uuid. - in: query name: toegewezenOp schema: @@ -1461,13 +1527,13 @@ paths: name: hadBetrokkene__url schema: type: string - description: Zoek klantcontact object op basis van het betrokkene url + description: Zoek klantcontact object op basis van het betrokkene url. - in: query name: hadBetrokkene__uuid schema: type: string format: uuid - description: Zoek klantcontact object op basis van het betrokkene uuid + description: Zoek klantcontact object op basis van het betrokkene uuid. - in: query name: indicatieContactGelukt schema: @@ -1476,7 +1542,7 @@ paths: name: inhoud schema: type: string - description: Zoek klantcontacten met specifieke tekst in inhoud + description: Zoek klantcontacten met specifieke tekst in inhoud. - in: query name: kanaal schema: @@ -1489,7 +1555,7 @@ paths: name: onderwerp schema: type: string - description: Zoek klantcontacten met specifieke tekst in onderwerp + description: Zoek klantcontacten met specifieke tekst in onderwerp. - in: query name: onderwerpobject__onderwerpobjectidentificatorCodeObjecttype schema: @@ -1510,7 +1576,7 @@ paths: name: onderwerpobject__url schema: type: string - description: Zoek klantcontact object op basis van het onderwerpobject url + description: Zoek klantcontact object op basis van het onderwerpobject url. - in: query name: onderwerpobject__uuid schema: @@ -1552,7 +1618,7 @@ paths: schema: type: string description: Zoek was klantcontact object op basis van het onderwerpobject - url + url. - in: query name: wasOnderwerpobject__uuid schema: @@ -2125,24 +2191,24 @@ paths: name: partijIdentificator__codeObjecttype schema: type: string - description: Zoek partij object op basis van het partij identificator objecttype + description: Zoek partij object op basis van het partij identificator objecttype. - in: query name: partijIdentificator__codeRegister schema: type: string - description: Zoek partij object op basis van het partij identificator register + description: Zoek partij object op basis van het partij identificator register. - in: query name: partijIdentificator__codeSoortObjectId schema: type: string description: Zoek partij object op basis van het partij identificator soort - object ID + object ID. - in: query name: partijIdentificator__objectId schema: type: string description: Zoek partij object op basis van het partij identificator object - ID + ID. - in: query name: soortPartij schema: @@ -2159,14 +2225,14 @@ paths: schema: type: string description: Zoek partij object op basis van het vertegenwoordigde partij - url + url. - in: query name: vertegenwoordigdePartij__uuid schema: type: string format: uuid description: Zoek partij object op basis van het vertegenwoordigde partij - uuid + uuid. tags: - partijen security: @@ -2489,7 +2555,7 @@ paths: schema: type: string description: Zoek Vertegenwoordigden object op basis van het vertegenwoordigde - partij url + partij url. - in: query name: vertegenwoordigdePartij__uuid schema: @@ -2500,7 +2566,7 @@ paths: schema: type: string description: Zoek Vertegenwoordigden object op basis van het vertegenwoordigende - partij url + partij url. - in: query name: vertegenwoordigendePartij__uuid schema: