Skip to content

Commit

Permalink
✨ [#209] added queryparams to digitaaladres
Browse files Browse the repository at this point in the history
  • Loading branch information
bart-maykin committed Aug 8, 2024
1 parent 81f16aa commit 5268000
Show file tree
Hide file tree
Showing 8 changed files with 304 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import uuid

from django.utils.translation import gettext_lazy as _

from django_filters.rest_framework import FilterSet, filters

from openklant.components.klantinteracties.models.digitaal_adres import DigitaalAdres


class DigitaalAdresFilterSet(FilterSet):
verstrekt_door_betrokkene__uuid = filters.UUIDFilter(
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van de betrokkene uuid."
),
field_name="betrokkene__uuid",
)
verstrekt_door_betrokkene__url = filters.CharFilter(
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van de betrokkene url."
),
method="filter_betrokkene_url",
)
verstrekt_door_betrokkene__rol = filters.ChoiceFilter(
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van de betrokkene rol."
),
field_name="betrokkene__rol",
)
verstrekt_door_partij__uuid = filters.UUIDFilter(
help_text=_("Zoek digitaal adres(sen) object(s) op basis van de partij uuid."),
field_name="betrokkene__uuid",
)
verstrekt_door_partij__url = filters.CharFilter(
help_text=_("Zoek digitaal adres(sen) object(s) op basis van de partij url."),
method="filter_partij_url",
)
verstrekt_door_partij__soort_partij = filters.ChoiceFilter(
help_text=_("Zoek digitaal adres(sen) object(s) op basis van de partij soort."),
field_name="partij__soort_partij",
)
adres = filters.CharFilter(
lookup_expr="exact",
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van adres die de exacte waarden bevat."
),
)
adres__icontains = filters.CharFilter(
lookup_expr="icontains",
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van adres die de opgegeven waarden bevat."
),
)
omschrijving = filters.CharFilter(
lookup_expr="icontains",
help_text=_(
"Zoek digitaal adres(sen) object(s) op basis van omschijving die de opgegeven waarden bevat."
),
)

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.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.split("/")[-1])
return queryset.filter(partij__uuid=url_uuid)
except ValueError:
return queryset.none()
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
24 changes: 13 additions & 11 deletions src/openklant/components/klantinteracties/api/filterset/partijen.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
)
Expand Down Expand Up @@ -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",
)
Expand Down Expand Up @@ -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(
Expand Down
103 changes: 103 additions & 0 deletions src/openklant/components/klantinteracties/api/tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -1174,3 +1174,106 @@ 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},
content_type="application/json",
)
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},
content_type="application/json",
)
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)
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@
from rest_framework import viewsets
from rest_framework.pagination import PageNumberPagination

from openklant.components.klantinteracties.api.filterset.digitaal_adres import (
DigitaalAdresFilterSet,
)
from openklant.components.klantinteracties.api.serializers.digitaal_adres import (
DigitaalAdresSerializer,
)
Expand Down Expand Up @@ -50,5 +53,6 @@ class DigitaalAdresViewSet(viewsets.ModelViewSet):
serializer_class = DigitaalAdresSerializer
lookup_field = "uuid"
pagination_class = PageNumberPagination
filterset_class = DigitaalAdresFilterSet
authentication_classes = (TokenAuthentication,)
permission_classes = (TokenPermissions,)
Loading

0 comments on commit 5268000

Please sign in to comment.