Skip to content

Commit

Permalink
Merge pull request #157 from maykinmedia/feature/154-partij-categorie…
Browse files Browse the repository at this point in the history
…-filters

✨ [#154] add categorie filter on partij
  • Loading branch information
bart-maykin authored Feb 1, 2024
2 parents ce71bdd + 53ed795 commit aa44cc8
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ class PartijFilterSet(FilterSet):
method="filter_identificator_register",
)

categorierelatie__categorie__naam = filters.CharFilter(
help_text=_("Zoek partij object op basis van categorie namen."),
method="filter_categorierelatie_categorie_naam",
)

expand = ExpandFilter(
serializer_class=PartijSerializer,
help_text=_(
Expand All @@ -74,6 +79,7 @@ class Meta:
"partij_identificator__soort_object_id",
"partij_identificator__object_id",
"partij_identificator__register",
"categorierelatie__categorie__naam",
"nummer",
"indicatie_geheimhouding",
"indicatie_actief",
Expand Down Expand Up @@ -142,6 +148,15 @@ def filter_identificator_register(self, queryset, name, value):
except ValueError:
return queryset.none()

def filter_categorierelatie_categorie_naam(self, queryset, name, value):
categorie_namen = value.split(",")
try:
return queryset.filter(
categorierelatie__categorie__naam__in=categorie_namen
)
except ValueError:
return queryset.none()


class CategorieRelatieFilterSet(FilterSet):
partij__url = filters.CharFilter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
from openklant.components.token.tests.api_testcase import APITestCase


class KlantcontactFilterTests(APITestCase):
class KlantcontactFilterSetTests(APITestCase):
url = reverse("klantinteracties:klantcontact-list")

def setUp(self):
Expand Down Expand Up @@ -95,7 +95,7 @@ def test_filter_betrokkene_url(self):
self.assertEqual(response.json()["count"], 0)


class BetrokkeneFilterTests(APITestCase):
class BetrokkeneFilterSetTests(APITestCase):
url = reverse("klantinteracties:betrokkene-list")

def setUp(self):
Expand Down Expand Up @@ -365,7 +365,7 @@ def test_filter_was_partij_nummer(self):
self.assertEqual(response.json()["count"], 0)


class TestPartijFilterset(APITestCase):
class PartijFilterSetTests(APITestCase):
url = reverse("klantinteracties:partij-list")

def setUp(self):
Expand Down Expand Up @@ -399,6 +399,28 @@ def setUp(self):
partij_identificator_register=f"register-{partij_obj.nummer}",
)

self.categorie = CategorieFactory.create(naam="een")
self.categorie2 = CategorieFactory.create(naam="twee")
self.categorie3 = CategorieFactory.create(naam="drie")
self.categorie4 = CategorieFactory.create(naam="vier")
self.categorie5 = CategorieFactory.create(naam="vijf")

self.categorie_relatie = CategorieRelatieFactory.create(
partij=self.partij, categorie=self.categorie
)
self.categorie_relatie2 = CategorieRelatieFactory.create(
partij=self.partij2, categorie=self.categorie2
)
self.categorie_relatie3 = CategorieRelatieFactory.create(
partij=self.partij3, categorie=self.categorie3
)
self.categorie_relatie4 = CategorieRelatieFactory.create(
partij=self.partij4, categorie=self.categorie4
)
self.categorie_relatie5 = CategorieRelatieFactory.create(
partij=self.partij5, categorie=self.categorie5
)

def test_filter_werkt_voor_partij_url(self):
werkt_voor_partij_url = f"http://testserver/klantinteracties/api/v1/partijen/{str(self.partij4.uuid)}"
response = self.client.get(
Expand Down Expand Up @@ -571,8 +593,44 @@ def test_filter_identificator_register(self):

self.assertEqual(response.json()["count"], 0)

def test_filter_categorie_relaties_categorie_naam(self):
response = self.client.get(
self.url,
{"categorierelatie__categorie__naam": self.categorie5.naam},
)
self.assertEqual(response.status_code, status.HTTP_200_OK)

data = response.json()["results"]

self.assertEqual(1, len(data))
self.assertEqual(str(self.partij5.uuid), data[0]["uuid"])

with self.subTest("no_matches_found_return_nothing"):
response = self.client.get(
self.url,
{"categorierelatie__categorie__naam": "zes"},
)
self.assertEqual(response.status_code, status.HTTP_200_OK)

self.assertEqual(response.json()["count"], 0)

with self.subTest("search_based_on_multiple_categorie_namen"):
response = self.client.get(
self.url,
{
"categorierelatie__categorie__naam": f"{self.categorie.naam},{self.categorie2.naam}"
},
)
self.assertEqual(response.status_code, status.HTTP_200_OK)

data = response.json()["results"]

self.assertEqual(2, len(data))
self.assertEqual(str(self.partij2.uuid), data[0]["uuid"])
self.assertEqual(str(self.partij.uuid), data[1]["uuid"])


class TestCategorieRelatieFilterset(APITestCase):
class CategorieRelatieFiltersetTests(APITestCase):
url = reverse("klantinteracties:categorierelatie-list")

def setUp(self):
Expand Down

0 comments on commit aa44cc8

Please sign in to comment.