Skip to content

Commit

Permalink
✨ return validation error if object is afgestoten (#1259)
Browse files Browse the repository at this point in the history
  • Loading branch information
damm89 committed May 14, 2024
1 parent 4b5b4bd commit ca58ebd
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 12 deletions.
46 changes: 34 additions & 12 deletions backend/src/zac/core/api/tests/test_zaak_related_objects.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
from copy import deepcopy
from unittest.mock import patch

from django.urls import reverse
Expand Down Expand Up @@ -133,11 +134,15 @@ def setUpClass(cls):
)

cls.user = SuperUserFactory.create()
cls.fetch_object_patcher = patch(
"zac.core.api.views.fetch_object", return_value=OBJECT_1
)

def setUp(self):
super().setUp()

self.client.force_authenticate(self.user)
self.fetch_object_patcher.start()
self.addCleanup(self.fetch_object_patcher.stop)

def test_create_object_relation(self, m):
mock_service_oas_get(m, url=self.zrc_service.api_root, service="zrc")
Expand Down Expand Up @@ -181,10 +186,6 @@ def test_create_object_relation_fail_not_unique(self, m):
mock_resource_get(m, self.zaak)
m.get(
f"{ZRC_ROOT}zaakobjecten?zaak={self.zaak['url']}",
json=paginated_response([]),
)
m.get(
f"{ZRC_ROOT}zaakobjecten",
json=paginated_response(
[
{
Expand Down Expand Up @@ -215,6 +216,30 @@ def test_create_object_relation_fail_not_unique(self, m):

self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)

def test_create_object_relation_fail_afgestoten(self, m):
mock_service_oas_get(m, url=self.zrc_service.api_root, service="zrc")
mock_resource_get(m, self.zaak)
m.get(
f"{ZRC_ROOT}zaakobjecten?zaak={self.zaak['url']}",
json=paginated_response([]),
)
obj = deepcopy(OBJECT_1)
obj["record"]["data"]["afgestoten"] = True

with patch("zac.core.api.views.fetch_object", return_value=obj):
response = self.client.post(
reverse(
"zaakobject-create",
),
data={
"object": OBJECT_1["url"],
"zaak": self.zaak["url"],
},
)

self.assertEqual(status.HTTP_400_BAD_REQUEST, response.status_code)
self.assertEqual(response.json(), ["Object is `afgestoten`."])

def test_create_object_relation_cache_invalidation(self, m):
mock_service_oas_get(m, url=self.zrc_service.api_root, service="zrc")
mock_resource_get(m, self.zaak)
Expand All @@ -236,11 +261,6 @@ def test_create_object_relation_cache_invalidation(self, m):
"objectIdentificatie": {"overigeData": OBJECT_1["record"]["data"]},
},
)

m.get(
f"{ZRC_ROOT}zaakobjecten?zaak={self.zaak['url']}",
json=paginated_response([]),
)
self.assertEqual(m.call_count, 0)

# call to populate cache
Expand Down Expand Up @@ -456,7 +476,8 @@ def test_create_other_permission(self, m):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

@requests_mock.Mocker()
def test_create_has_perm(self, m):
@patch("zac.core.api.views.fetch_object", return_value=OBJECT_1)
def test_create_has_perm(self, m, *mocks):
mock_service_oas_get(m, ZRC_ROOT, "zrc")
mock_service_oas_get(m, CATALOGI_ROOT, "ztc")
mock_resource_get(m, self.catalogus)
Expand Down Expand Up @@ -516,7 +537,8 @@ def test_create_has_perm_but_zaak_is_closed(self, m):
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)

@requests_mock.Mocker()
def test_create_has_perm_also_for_closed_zaak(self, m):
@patch("zac.core.api.views.fetch_object", return_value=OBJECT_1)
def test_create_has_perm_also_for_closed_zaak(self, m, *mocks):
mock_service_oas_get(m, ZRC_ROOT, "zrc")
mock_service_oas_get(m, CATALOGI_ROOT, "ztc")
mock_resource_get(m, {**self.zaak, "einddatum": "2020-01-01"})
Expand Down
14 changes: 14 additions & 0 deletions backend/src/zac/core/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
delete_zaak_eigenschap,
delete_zaakobject,
fetch_latest_audit_trail_data_document,
fetch_object,
fetch_zaak_eigenschap,
fetch_zaakobject,
fetch_zaaktype,
Expand Down Expand Up @@ -1437,6 +1438,19 @@ def post(self, request):
zaak = get_zaak(zaak_url=zaak_url)
self.check_object_permissions(self.request, zaak)

try:
object = fetch_object(serializer.data["object"])
except ClientError as exc:
raise serializers.ValidationError(
_(
"Fetching OBJECT with URL: `{object}` raised a Client Error with detail: `{detail}`.".format(
object=self.initial_data["object"], detail=exc.args[0]["detail"]
)
)
)
if object["record"]["data"].get("afgestoten", False):
raise serializers.ValidationError(_("Object is `afgestoten`."))

try:
created_zaakobject = relate_object_to_zaak(serializer.validated_data)
except ClientError as exc:
Expand Down

0 comments on commit ca58ebd

Please sign in to comment.