8
8
from openarchiefbeheer .accounts .tests .factories import UserFactory
9
9
from openarchiefbeheer .zaken .tests .factories import ZaakFactory
10
10
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
+ )
13
25
from .factories import (
14
26
DestructionListAssigneeFactory ,
15
27
DestructionListFactory ,
@@ -355,57 +367,6 @@ def test_destruction_list_filter_on_assignee(self):
355
367
[lists [0 ].uuid , lists [1 ].uuid ].sort (),
356
368
)
357
369
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
-
409
370
410
371
class DestructionListItemsViewSetTest (APITestCase ):
411
372
def test_not_authenticated (self ):
@@ -717,8 +678,8 @@ def test_no_auth(self):
717
678
def test_filter_on_review (self ):
718
679
user = UserFactory .create ()
719
680
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 )
722
683
ReviewItemResponseFactory .create_batch (2 , review_item__review = review )
723
684
another_response = ReviewResponseFactory .create ()
724
685
ReviewItemResponseFactory .create (review_item__review = another_response .review )
@@ -734,5 +695,133 @@ def test_filter_on_review(self):
734
695
data = response .json ()
735
696
736
697
self .assertEqual (len (data ), 1 )
737
- self .assertEqual (data [0 ]["pk" ], review .pk )
698
+ self .assertEqual (data [0 ]["pk" ], review_response .pk )
738
699
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