Skip to content

Commit 7e92d27

Browse files
committed
✨ [#146] added onderwerpobject filters on klantcontact endpoint
1 parent c952db1 commit 7e92d27

File tree

3 files changed

+310
-12
lines changed

3 files changed

+310
-12
lines changed

src/openklant/components/klantinteracties/api/filterset/klantcontacten.py

+86-2
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,41 @@
1616

1717
class KlantcontactFilterSet(FilterSet):
1818
had_betrokkene__url = filters.CharFilter(
19-
help_text=_("Zoek klantcontract object op basis van het betrokkene url"),
19+
help_text=_("Zoek klantcontact object op basis van het betrokkene url"),
2020
method="filter_betrokkene_url",
2121
)
2222
had_betrokkene__uuid = filters.CharFilter(
23-
help_text=_("Zoek klantcontract object op basis van het betrokkene uuid"),
23+
help_text=_("Zoek klantcontact object op basis van het betrokkene uuid"),
2424
method="filter_betrokkene_uuid",
2525
)
26+
onderwerpobject__uuid = filters.CharFilter(
27+
help_text=_("Zoek klantcontact object op basis van het onderwerpobject uuid"),
28+
method="filter_onderwerpobject_uuid",
29+
)
30+
onderwerpobject__url = filters.CharFilter(
31+
help_text=_("Zoek klantcontact object op basis van het onderwerpobject url"),
32+
method="filter_onderwerpobject_url",
33+
)
34+
onderwerpobject__objectidentificator_objecttype = filters.CharFilter(
35+
help_text=_(
36+
"Zoek klantcontact object op basis van het onderwerpobject objecttype"
37+
),
38+
method="filter_onderwerpobject_objectidentificator_objecttype",
39+
)
40+
onderwerpobject__objectidentificator_soort_object_id = filters.CharFilter(
41+
help_text=_("Zoek klantcontact object op basis van het soort object ID"),
42+
method="filter_onderwerpobject_objectidentificator_soort_object_id",
43+
)
44+
onderwerpobject__objectidentificator_object_id = filters.CharFilter(
45+
help_text=_("Zoek klantcontact object op basis van het object ID"),
46+
method="filter_onderwerpobject_objectidentificator_object_id",
47+
)
48+
onderwerpobject__objectidentificator_register = filters.CharFilter(
49+
help_text=_(
50+
"Zoek klantcontact object op basis van het onderwerpobject register"
51+
),
52+
method="filter_onderwerpobject_objectidentificator_register",
53+
)
2654
inhoud = filters.CharFilter(
2755
lookup_expr="icontains",
2856
help_text=_("Zoek klantcontacten met specifieke tekst in inhoud"),
@@ -44,6 +72,12 @@ class Meta:
4472
fields = (
4573
"had_betrokkene__url",
4674
"had_betrokkene__uuid",
75+
"onderwerpobject__uuid",
76+
"onderwerpobject__url",
77+
"onderwerpobject__objectidentificator_objecttype",
78+
"onderwerpobject__objectidentificator_soort_object_id",
79+
"onderwerpobject__objectidentificator_object_id",
80+
"onderwerpobject__objectidentificator_register",
4781
"nummer",
4882
"kanaal",
4983
"inhoud",
@@ -64,6 +98,56 @@ def filter_betrokkene_url(self, queryset, name, value):
6498
except ValueError:
6599
return queryset.none()
66100

101+
def filter_onderwerpobject_uuid(self, queryset, name, value):
102+
try:
103+
onderwerpobject_uuid = uuid.UUID(value)
104+
return queryset.filter(onderwerpobject__uuid=onderwerpobject_uuid)
105+
except ValueError:
106+
return queryset.none()
107+
108+
def filter_onderwerpobject_url(self, queryset, name, value):
109+
try:
110+
url_uuid = uuid.UUID(value.split("/")[-1])
111+
return queryset.filter(onderwerpobject__uuid=url_uuid)
112+
except ValueError:
113+
return queryset.none()
114+
115+
def filter_onderwerpobject_objectidentificator_objecttype(
116+
self, queryset, name, value
117+
):
118+
try:
119+
return queryset.filter(
120+
onderwerpobject__objectidentificator_objecttype=value
121+
)
122+
except ValueError:
123+
return queryset.none()
124+
125+
def filter_onderwerpobject_objectidentificator_soort_object_id(
126+
self, queryset, name, value
127+
):
128+
try:
129+
return queryset.filter(
130+
onderwerpobject__objectidentificator_soort_object_id=value
131+
)
132+
except ValueError:
133+
return queryset.none()
134+
135+
def filter_onderwerpobject_objectidentificator_object_id(
136+
self, queryset, name, value
137+
):
138+
try:
139+
return queryset.filter(onderwerpobject__objectidentificator_object_id=value)
140+
except ValueError:
141+
return queryset.none()
142+
143+
def filter_onderwerpobject_objectidentificator_register(
144+
self, queryset, name, value
145+
):
146+
try:
147+
return queryset.filter(onderwerpobject__objectidentificator_register=value)
148+
except ValueError:
149+
return queryset.none()
150+
67151

68152
class BetrokkeneFilterSet(FilterSet):
69153
klantcontact__nummer = filters.CharFilter(

src/openklant/components/klantinteracties/api/tests/test_filters.py

+187-8
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from openklant.components.klantinteracties.models.tests.factories.klantcontacten import (
1010
BetrokkeneFactory,
1111
KlantcontactFactory,
12+
OnderwerpobjectFactory,
1213
)
1314
from openklant.components.klantinteracties.models.tests.factories.partijen import (
1415
CategorieFactory,
@@ -25,23 +26,59 @@ class KlantcontactFilterSetTests(APITestCase):
2526
def setUp(self):
2627
super().setUp()
2728
(
28-
klantcontact,
29-
klantcontact2,
30-
klantcontact3,
31-
klantcontact4,
29+
self.klantcontact,
30+
self.klantcontact2,
31+
self.klantcontact3,
32+
self.klantcontact4,
3233
self.klantcontact5,
3334
) = KlantcontactFactory.create_batch(5)
3435
for betrokkene_klantcontact in [
35-
klantcontact,
36-
klantcontact2,
37-
klantcontact3,
38-
klantcontact4,
36+
self.klantcontact,
37+
self.klantcontact2,
38+
self.klantcontact3,
39+
self.klantcontact4,
3940
self.klantcontact5,
4041
]:
4142
self.betrokkene = BetrokkeneFactory.create(
4243
klantcontact=betrokkene_klantcontact
4344
)
4445

46+
self.onderwerpobject = OnderwerpobjectFactory.create(
47+
klantcontact=self.klantcontact,
48+
objectidentificator_objecttype="1",
49+
objectidentificator_soort_object_id="1",
50+
objectidentificator_object_id="1",
51+
objectidentificator_register="1",
52+
)
53+
self.onderwerpobject2 = OnderwerpobjectFactory.create(
54+
klantcontact=self.klantcontact2,
55+
objectidentificator_objecttype="2",
56+
objectidentificator_soort_object_id="2",
57+
objectidentificator_object_id="2",
58+
objectidentificator_register="2",
59+
)
60+
self.onderwerpobject3 = OnderwerpobjectFactory.create(
61+
klantcontact=self.klantcontact3,
62+
objectidentificator_objecttype="3",
63+
objectidentificator_soort_object_id="3",
64+
objectidentificator_object_id="3",
65+
objectidentificator_register="3",
66+
)
67+
self.onderwerpobject4 = OnderwerpobjectFactory.create(
68+
klantcontact=self.klantcontact4,
69+
objectidentificator_objecttype="4",
70+
objectidentificator_soort_object_id="4",
71+
objectidentificator_object_id="4",
72+
objectidentificator_register="4",
73+
)
74+
self.onderwerpobject5 = OnderwerpobjectFactory.create(
75+
klantcontact=self.klantcontact5,
76+
objectidentificator_objecttype="5",
77+
objectidentificator_soort_object_id="5",
78+
objectidentificator_object_id="5",
79+
objectidentificator_register="5",
80+
)
81+
4582
def test_filter_betrokkene_uuid(self):
4683
response = self.client.get(
4784
self.url, {"had_betrokkene__uuid": f"{self.betrokkene.uuid}"}
@@ -94,6 +131,148 @@ def test_filter_betrokkene_url(self):
94131

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

134+
def test_filter_onderwerpobject_uuid(self):
135+
response = self.client.get(
136+
self.url, {"onderwerpobject__uuid": f"{self.onderwerpobject5.uuid}"}
137+
)
138+
self.assertEqual(response.status_code, status.HTTP_200_OK)
139+
140+
data = response.json()["results"]
141+
142+
self.assertEqual(1, len(data))
143+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
144+
145+
with self.subTest("no_matches_found_return_empty_query"):
146+
response = self.client.get(
147+
self.url, {"onderwerpobject__uuid": str(uuid4())}
148+
)
149+
self.assertEqual(response.status_code, status.HTTP_200_OK)
150+
151+
self.assertEqual(response.json()["count"], 0)
152+
153+
with self.subTest("invalid_value_returns_empty_query"):
154+
response = self.client.get(
155+
self.url, {"onderwerpobject__uuid": "ValueError"}
156+
)
157+
self.assertEqual(response.status_code, status.HTTP_200_OK)
158+
159+
self.assertEqual(response.json()["count"], 0)
160+
161+
def test_filter_onderwerpobject__url(self):
162+
response = self.client.get(
163+
self.url,
164+
{
165+
"onderwerpobject__url": f"http://testserver/klantinteracties/api/v1/onderwerpobjecten/{self.onderwerpobject5.uuid}"
166+
},
167+
)
168+
data = response.json()["results"]
169+
170+
self.assertEqual(1, len(data))
171+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
172+
173+
with self.subTest("no_matches_found_return_nothing"):
174+
response = self.client.get(
175+
self.url,
176+
{
177+
"onderwerpobject__url": f"http://testserver/klantinteracties/api/v1/onderwerpobjecten/{str(uuid4())}"
178+
},
179+
)
180+
self.assertEqual(response.status_code, status.HTTP_200_OK)
181+
182+
self.assertEqual(response.json()["count"], 0)
183+
184+
with self.subTest("invalid_value_returns_empty_query"):
185+
response = self.client.get(self.url, {"onderwerpobject__url": "ValueError"})
186+
self.assertEqual(response.status_code, status.HTTP_200_OK)
187+
188+
self.assertEqual(response.json()["count"], 0)
189+
190+
def test_filter_onderwerpobject_objectidentificator_objecttype(self):
191+
response = self.client.get(
192+
self.url,
193+
{"onderwerpobject__objectidentificator_objecttype": "5"},
194+
)
195+
self.assertEqual(response.status_code, status.HTTP_200_OK)
196+
197+
data = response.json()["results"]
198+
199+
self.assertEqual(1, len(data))
200+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
201+
202+
with self.subTest("no_matches_found_return_nothing"):
203+
response = self.client.get(
204+
self.url,
205+
{"onderwerpobject__objectidentificator_objecttype": "lorum impsum"},
206+
)
207+
self.assertEqual(response.status_code, status.HTTP_200_OK)
208+
209+
self.assertEqual(response.json()["count"], 0)
210+
211+
def test_filter_onderwerpobject_objectidentificator_soort_object_id(self):
212+
response = self.client.get(
213+
self.url,
214+
{"onderwerpobject__objectidentificator_soort_object_id": "5"},
215+
)
216+
self.assertEqual(response.status_code, status.HTTP_200_OK)
217+
218+
data = response.json()["results"]
219+
220+
self.assertEqual(1, len(data))
221+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
222+
223+
with self.subTest("no_matches_found_return_nothing"):
224+
response = self.client.get(
225+
self.url,
226+
{
227+
"onderwerpobject__objectidentificator_soort_object_id": "lorum impsum"
228+
},
229+
)
230+
self.assertEqual(response.status_code, status.HTTP_200_OK)
231+
232+
self.assertEqual(response.json()["count"], 0)
233+
234+
def test_filter_objectidentificator_object_id(self):
235+
response = self.client.get(
236+
self.url,
237+
{"onderwerpobject__objectidentificator_object_id": "5"},
238+
)
239+
self.assertEqual(response.status_code, status.HTTP_200_OK)
240+
241+
data = response.json()["results"]
242+
243+
self.assertEqual(1, len(data))
244+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
245+
246+
with self.subTest("no_matches_found_return_nothing"):
247+
response = self.client.get(
248+
self.url,
249+
{"onderwerpobject__objectidentificator_object_id": "lorum impsum"},
250+
)
251+
self.assertEqual(response.status_code, status.HTTP_200_OK)
252+
253+
self.assertEqual(response.json()["count"], 0)
254+
255+
def test_filter_objectidentificator_register(self):
256+
response = self.client.get(
257+
self.url,
258+
{"onderwerpobject__objectidentificator_register": "5"},
259+
)
260+
self.assertEqual(response.status_code, status.HTTP_200_OK)
261+
262+
data = response.json()["results"]
263+
264+
self.assertEqual(1, len(data))
265+
self.assertEqual(str(self.klantcontact5.uuid), data[0]["uuid"])
266+
267+
with self.subTest("no_matches_found_return_nothing"):
268+
response = self.client.get(
269+
self.url,
270+
{"onderwerpobject__objectidentificator_register": "lorum impsum"},
271+
)
272+
self.assertEqual(response.status_code, status.HTTP_200_OK)
273+
274+
self.assertEqual(response.json()["count"], 0)
275+
97276

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

0 commit comments

Comments
 (0)