Skip to content

Commit 23e4428

Browse files
committed
✅ [#127] Test endpoint to create a response to a review
1 parent 1872a80 commit 23e4428

File tree

1 file changed

+145
-56
lines changed

1 file changed

+145
-56
lines changed

backend/src/openarchiefbeheer/destruction/tests/test_endpoints.py

+145-56
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,20 @@
88
from openarchiefbeheer.accounts.tests.factories import UserFactory
99
from openarchiefbeheer.zaken.tests.factories import ZaakFactory
1010

11-
from ..constants import ListItemStatus, ListRole, ListStatus, ReviewDecisionChoices
12-
from ..models import DestructionList, DestructionListItemReview, DestructionListReview
11+
from ..constants import (
12+
DestructionListItemAction,
13+
ListItemStatus,
14+
ListRole,
15+
ListStatus,
16+
ReviewDecisionChoices,
17+
)
18+
from ..models import (
19+
DestructionList,
20+
DestructionListItemReview,
21+
DestructionListReview,
22+
ReviewItemResponse,
23+
ReviewResponse,
24+
)
1325
from .factories import (
1426
DestructionListAssigneeFactory,
1527
DestructionListFactory,
@@ -355,57 +367,6 @@ def test_destruction_list_filter_on_assignee(self):
355367
[lists[0].uuid, lists[1].uuid].sort(),
356368
)
357369

358-
def test_cannot_make_requested_changes_if_not_author(self):
359-
record_manager1 = UserFactory.create(role__can_start_destruction=True)
360-
record_manager2 = UserFactory.create(role__can_start_destruction=True)
361-
362-
destruction_list = DestructionListFactory.create(
363-
name="A test list",
364-
contains_sensitive_info=True,
365-
author=record_manager1,
366-
status=ListStatus.changes_requested,
367-
)
368-
369-
self.client.force_authenticate(user=record_manager2)
370-
endpoint = reverse(
371-
"api:destructionlist-make-requested-changes",
372-
kwargs={"uuid": destruction_list.uuid},
373-
)
374-
response = self.client.patch(
375-
endpoint,
376-
data={
377-
"name": "An updated test list",
378-
},
379-
format="json",
380-
)
381-
382-
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
383-
384-
def test_cannot_update_destruction_list_if_not_changes_requested(self):
385-
record_manager = UserFactory.create(role__can_start_destruction=True)
386-
387-
destruction_list = DestructionListFactory.create(
388-
name="A test list",
389-
contains_sensitive_info=True,
390-
author=record_manager,
391-
status=ListStatus.ready_to_review,
392-
)
393-
394-
self.client.force_authenticate(user=record_manager)
395-
endpoint = reverse(
396-
"api:destructionlist-make-requested-changes",
397-
kwargs={"uuid": destruction_list.uuid},
398-
)
399-
response = self.client.patch(
400-
endpoint,
401-
data={
402-
"name": "An updated test list",
403-
},
404-
format="json",
405-
)
406-
407-
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
408-
409370

410371
class DestructionListItemsViewSetTest(APITestCase):
411372
def test_not_authenticated(self):
@@ -717,8 +678,8 @@ def test_no_auth(self):
717678
def test_filter_on_review(self):
718679
user = UserFactory.create()
719680

720-
review = DestructionListReviewFactory.create()
721-
response = ReviewResponseFactory.create(review=review)
681+
review = DestructionListReviewFactory.create(destruction_list__name="List 1")
682+
review_response = ReviewResponseFactory.create(review=review)
722683
ReviewItemResponseFactory.create_batch(2, review_item__review=review)
723684
another_response = ReviewResponseFactory.create()
724685
ReviewItemResponseFactory.create(review_item__review=another_response.review)
@@ -734,5 +695,133 @@ def test_filter_on_review(self):
734695
data = response.json()
735696

736697
self.assertEqual(len(data), 1)
737-
self.assertEqual(data[0]["pk"], review.pk)
698+
self.assertEqual(data[0]["pk"], review_response.pk)
738699
self.assertEqual(len(data[0]["itemsResponses"]), 2)
700+
701+
def test_create_review_response(self):
702+
record_manager = UserFactory.create(role__can_start_destruction=True)
703+
review = DestructionListReviewFactory.create(
704+
destruction_list__author=record_manager,
705+
destruction_list__status=ListStatus.changes_requested,
706+
destruction_list__assignee=record_manager,
707+
)
708+
items_reviews = DestructionListItemReviewFactory.create_batch(
709+
3,
710+
destruction_list_item__destruction_list=review.destruction_list,
711+
review=review,
712+
)
713+
714+
endpoint = reverse("api:review-responses-list")
715+
self.client.force_authenticate(user=record_manager)
716+
717+
response = self.client.post(
718+
endpoint,
719+
data={
720+
"review": review.pk,
721+
"comment": "A comment about the review.",
722+
"itemsResponses": [
723+
{
724+
"reviewItem": items_reviews[0].pk,
725+
"actionItem": DestructionListItemAction.keep,
726+
"comment": "This zaak needs to stay in the list.",
727+
},
728+
{
729+
"reviewItem": items_reviews[1].pk,
730+
"actionItem": DestructionListItemAction.remove,
731+
"actionZaak": {"selectielijstklasse": "http://some-url.nl"},
732+
"comment": "Changed the selectielijstklasse and removed from the list.",
733+
},
734+
{
735+
"reviewItem": items_reviews[2].pk,
736+
"actionItem": DestructionListItemAction.remove,
737+
"actionZaak": {"archiefactiedatum": "2030-01-01"},
738+
"comment": "Changed the archiefactiedatum and removed from the list.",
739+
},
740+
],
741+
},
742+
format="json",
743+
)
744+
745+
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
746+
self.assertEqual(ReviewResponse.objects.filter(review=review).count(), 1)
747+
self.assertEqual(
748+
ReviewItemResponse.objects.filter(review_item__review=review).count(), 3
749+
)
750+
751+
item_response1 = ReviewItemResponse.objects.get(review_item=items_reviews[0].pk)
752+
753+
self.assertEqual(item_response1.action_item, DestructionListItemAction.keep)
754+
self.assertEqual(item_response1.comment, "This zaak needs to stay in the list.")
755+
756+
item_response2 = ReviewItemResponse.objects.get(review_item=items_reviews[1].pk)
757+
758+
self.assertEqual(
759+
item_response2.action_zaak["selectielijstklasse"], "http://some-url.nl"
760+
)
761+
762+
item_response3 = ReviewItemResponse.objects.get(review_item=items_reviews[2].pk)
763+
764+
self.assertEqual(item_response3.action_zaak["archiefactiedatum"], "2030-01-01")
765+
766+
def test_cannot_create_response_if_not_author(self):
767+
record_manager1 = UserFactory.create(role__can_start_destruction=True)
768+
record_manager2 = UserFactory.create(role__can_start_destruction=True)
769+
770+
review = DestructionListReviewFactory.create(
771+
destruction_list__author=record_manager1,
772+
destruction_list__status=ListStatus.changes_requested,
773+
destruction_list__assignee=record_manager1,
774+
)
775+
776+
endpoint = reverse("api:review-responses-list")
777+
self.client.force_authenticate(user=record_manager2)
778+
779+
response = self.client.post(
780+
endpoint,
781+
data={
782+
"review": review.pk,
783+
"comment": "A comment about the review.",
784+
"itemsResponses": [],
785+
},
786+
format="json",
787+
)
788+
789+
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
790+
self.assertEqual(
791+
response.json()["nonFieldErrors"][0],
792+
_(
793+
"This user is either not allowed to update the destruction list or "
794+
"the destruction list cannot currently be updated."
795+
),
796+
)
797+
798+
def test_cannot_create_response_if_not_changes_requested(self):
799+
record_manager = UserFactory.create(role__can_start_destruction=True)
800+
801+
review = DestructionListReviewFactory.create(
802+
destruction_list__author=record_manager,
803+
destruction_list__status=ListStatus.ready_to_review,
804+
destruction_list__assignee=record_manager,
805+
)
806+
807+
endpoint = reverse("api:review-responses-list")
808+
self.client.force_authenticate(user=record_manager)
809+
810+
response = self.client.post(
811+
endpoint,
812+
data={
813+
"review": review.pk,
814+
"comment": "A comment about the review.",
815+
"itemsResponses": [],
816+
},
817+
format="json",
818+
)
819+
820+
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
821+
self.assertEqual(
822+
response.json()["nonFieldErrors"][0],
823+
_(
824+
"This user is either not allowed to update the destruction list or "
825+
"the destruction list cannot currently be updated."
826+
),
827+
)

0 commit comments

Comments
 (0)