Skip to content

Commit a41b96e

Browse files
authored
Merge pull request #144 from maykinmedia/feature/143-expand-improvements
Feature/143 expand improvements
2 parents 19a0d9b + 34b7547 commit a41b96e

File tree

3 files changed

+145
-6
lines changed

3 files changed

+145
-6
lines changed

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

+141-4
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def setUp(self):
4141
klantcontact=self.klantcontact, partij=self.partij
4242
)
4343

44-
def test_sinle_expansion(self):
44+
def test_list_single_expansion(self):
4545
list_url = reverse("klantinteracties:klantcontact-list")
4646
response = self.client.get(list_url, {"expand": "had_betrokkenen"})
4747

@@ -55,7 +55,7 @@ def test_sinle_expansion(self):
5555
klantcontact["hadBetrokkenen"][0]["uuid"], str(self.betrokkene.uuid)
5656
)
5757
self.assertTrue(klantcontact["_expand"])
58-
expand = klantcontact["_expand"]["hadBetrokkenen"]
58+
expand = klantcontact["_expand"]["hadBetrokkenen"][0]
5959

6060
self.assertEqual(
6161
expand["bezoekadres"],
@@ -91,7 +91,7 @@ def test_sinle_expansion(self):
9191
self.assertEqual(expand["initiator"], self.betrokkene.initiator)
9292
self.assertEqual(expand["wasPartij"]["uuid"], str(self.partij.uuid))
9393

94-
def test_multiple_level_expansion(self):
94+
def test_list_multiple_level_expansion(self):
9595
list_url = reverse("klantinteracties:klantcontact-list")
9696
response = self.client.get(
9797
list_url, {"expand": "had_betrokkenen,had_betrokkenen.was_partij"}
@@ -107,7 +107,144 @@ def test_multiple_level_expansion(self):
107107
klantcontact["hadBetrokkenen"][0]["uuid"], str(self.betrokkene.uuid)
108108
)
109109
self.assertTrue(klantcontact["_expand"])
110-
expand = klantcontact["_expand"]["hadBetrokkenen"]
110+
expand = klantcontact["_expand"]["hadBetrokkenen"][0]
111+
112+
self.assertEqual(
113+
expand["bezoekadres"],
114+
{
115+
"nummeraanduidingId": self.betrokkene.bezoekadres_nummeraanduiding_id,
116+
"adresregel1": self.betrokkene.bezoekadres_adresregel1,
117+
"adresregel2": self.betrokkene.bezoekadres_adresregel2,
118+
"adresregel3": self.betrokkene.bezoekadres_adresregel3,
119+
"land": self.betrokkene.bezoekadres_land,
120+
},
121+
)
122+
self.assertEqual(
123+
expand["correspondentieadres"],
124+
{
125+
"nummeraanduidingId": self.betrokkene.correspondentieadres_nummeraanduiding_id,
126+
"adresregel1": self.betrokkene.correspondentieadres_adresregel1,
127+
"adresregel2": self.betrokkene.correspondentieadres_adresregel2,
128+
"adresregel3": self.betrokkene.correspondentieadres_adresregel3,
129+
"land": self.betrokkene.correspondentieadres_land,
130+
},
131+
)
132+
self.assertEqual(
133+
expand["contactnaam"],
134+
{
135+
"voorletters": self.betrokkene.contactnaam_voorletters,
136+
"voornaam": self.betrokkene.contactnaam_voornaam,
137+
"voorvoegselAchternaam": self.betrokkene.contactnaam_voorvoegsel_achternaam,
138+
"achternaam": self.betrokkene.contactnaam_achternaam,
139+
},
140+
)
141+
self.assertEqual(expand["rol"], self.betrokkene.rol)
142+
self.assertEqual(expand["organisatienaam"], self.betrokkene.organisatienaam)
143+
self.assertEqual(expand["initiator"], self.betrokkene.initiator)
144+
self.assertEqual(expand["wasPartij"]["uuid"], str(self.partij.uuid))
145+
self.assertTrue(expand["_expand"])
146+
147+
# second expand
148+
expand = expand["_expand"]["wasPartij"]
149+
150+
self.assertEqual(expand["nummer"], self.partij.nummer)
151+
self.assertEqual(expand["interneNotitie"], self.partij.interne_notitie)
152+
self.assertEqual(
153+
expand["digitaleAdressen"][0]["uuid"], str(self.digitaal_adres.uuid)
154+
)
155+
self.assertEqual(expand["vertegenwoordigde"], [])
156+
self.assertEqual(expand["soortPartij"], self.partij.soort_partij)
157+
self.assertEqual(
158+
expand["indicatieGeheimhouding"], self.partij.indicatie_geheimhouding
159+
)
160+
self.assertEqual(expand["voorkeurstaal"], self.partij.voorkeurstaal)
161+
self.assertEqual(expand["indicatieActief"], self.partij.indicatie_actief)
162+
self.assertEqual(
163+
expand["bezoekadres"],
164+
{
165+
"nummeraanduidingId": self.partij.bezoekadres_nummeraanduiding_id,
166+
"adresregel1": self.partij.bezoekadres_adresregel1,
167+
"adresregel2": self.partij.bezoekadres_adresregel2,
168+
"adresregel3": self.partij.bezoekadres_adresregel3,
169+
"land": self.partij.bezoekadres_land,
170+
},
171+
)
172+
self.assertEqual(
173+
expand["correspondentieadres"],
174+
{
175+
"nummeraanduidingId": self.partij.correspondentieadres_nummeraanduiding_id,
176+
"adresregel1": self.partij.correspondentieadres_adresregel1,
177+
"adresregel2": self.partij.correspondentieadres_adresregel2,
178+
"adresregel3": self.partij.correspondentieadres_adresregel3,
179+
"land": self.partij.correspondentieadres_land,
180+
},
181+
)
182+
183+
def test_detail_single_expansion(self):
184+
detail_url = reverse(
185+
"klantinteracties:klantcontact-detail",
186+
kwargs={"uuid": str(self.klantcontact.uuid)},
187+
)
188+
response = self.client.get(detail_url, {"expand": "had_betrokkenen"})
189+
190+
self.assertEqual(response.status_code, status.HTTP_200_OK)
191+
192+
data = response.json()
193+
194+
self.assertEqual(data["hadBetrokkenen"][0]["uuid"], str(self.betrokkene.uuid))
195+
self.assertTrue(data["_expand"])
196+
expand = data["_expand"]["hadBetrokkenen"][0]
197+
198+
self.assertEqual(
199+
expand["bezoekadres"],
200+
{
201+
"nummeraanduidingId": self.betrokkene.bezoekadres_nummeraanduiding_id,
202+
"adresregel1": self.betrokkene.bezoekadres_adresregel1,
203+
"adresregel2": self.betrokkene.bezoekadres_adresregel2,
204+
"adresregel3": self.betrokkene.bezoekadres_adresregel3,
205+
"land": self.betrokkene.bezoekadres_land,
206+
},
207+
)
208+
self.assertEqual(
209+
expand["correspondentieadres"],
210+
{
211+
"nummeraanduidingId": self.betrokkene.correspondentieadres_nummeraanduiding_id,
212+
"adresregel1": self.betrokkene.correspondentieadres_adresregel1,
213+
"adresregel2": self.betrokkene.correspondentieadres_adresregel2,
214+
"adresregel3": self.betrokkene.correspondentieadres_adresregel3,
215+
"land": self.betrokkene.correspondentieadres_land,
216+
},
217+
)
218+
self.assertEqual(
219+
expand["contactnaam"],
220+
{
221+
"voorletters": self.betrokkene.contactnaam_voorletters,
222+
"voornaam": self.betrokkene.contactnaam_voornaam,
223+
"voorvoegselAchternaam": self.betrokkene.contactnaam_voorvoegsel_achternaam,
224+
"achternaam": self.betrokkene.contactnaam_achternaam,
225+
},
226+
)
227+
self.assertEqual(expand["rol"], self.betrokkene.rol)
228+
self.assertEqual(expand["organisatienaam"], self.betrokkene.organisatienaam)
229+
self.assertEqual(expand["initiator"], self.betrokkene.initiator)
230+
self.assertEqual(expand["wasPartij"]["uuid"], str(self.partij.uuid))
231+
232+
def test_detail_multiple_level_expansion(self):
233+
detail_url = reverse(
234+
"klantinteracties:klantcontact-detail",
235+
kwargs={"uuid": str(self.klantcontact.uuid)},
236+
)
237+
response = self.client.get(
238+
detail_url, {"expand": "had_betrokkenen,had_betrokkenen.was_partij"}
239+
)
240+
241+
self.assertEqual(response.status_code, status.HTTP_200_OK)
242+
243+
data = response.json()
244+
245+
self.assertEqual(data["hadBetrokkenen"][0]["uuid"], str(self.betrokkene.uuid))
246+
self.assertTrue(data["_expand"])
247+
expand = data["_expand"]["hadBetrokkenen"][0]
111248

112249
self.assertEqual(
113250
expand["bezoekadres"],

src/openklant/components/utils/expansion.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,9 @@ def _field_inclusions(
230230
if isinstance(inclusion_serializer, str):
231231
inclusion_serializer = import_string(inclusion_serializer)
232232

233-
many = True if hasattr(field, "child_relation") else False
233+
many = (
234+
True if hasattr(field, "child_relation") else getattr(field, "many", False)
235+
)
234236

235237
for obj in self._some_related_field_inclusions(
236238
new_path, field, instance, inclusion_serializer

src/openklant/components/utils/mixins.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class ExpandMixin:
3636
expand_param = "expand"
3737

3838
def include_allowed(self):
39-
return self.action in ["list"]
39+
return self.action in ["list", "retrieve"]
4040

4141
def get_requested_inclusions(self, request):
4242
# Pull expand parameter from request body in case of _zoek operation

0 commit comments

Comments
 (0)