From 612b9b5ee58b9d76af69c575d9fbbee7335f99da Mon Sep 17 00:00:00 2001 From: SilviaAmAm Date: Thu, 2 May 2024 12:50:55 +0200 Subject: [PATCH] :white_check_mark: Test serializers for destruction list --- .../destruction/tests/test_serializers.py | 162 ++++++++++++++++++ 1 file changed, 162 insertions(+) create mode 100644 backend/src/openarchiefbeheer/destruction/tests/test_serializers.py diff --git a/backend/src/openarchiefbeheer/destruction/tests/test_serializers.py b/backend/src/openarchiefbeheer/destruction/tests/test_serializers.py new file mode 100644 index 00000000..8982e9f5 --- /dev/null +++ b/backend/src/openarchiefbeheer/destruction/tests/test_serializers.py @@ -0,0 +1,162 @@ +from django.test import TestCase +from django.utils.translation import gettext_lazy as _ + +from rest_framework.test import APIRequestFactory + +from openarchiefbeheer.accounts.tests.factories import UserFactory +from openarchiefbeheer.destruction.api.serializers import DestructionListSerializer +from openarchiefbeheer.destruction.constants import ListItemStatus +from openarchiefbeheer.destruction.tests.factories import DestructionListItemFactory + +factory = APIRequestFactory() + + +class DestructionListSerializerTests(TestCase): + def test_create_destruction_list(self): + user1 = UserFactory.create( + username="reviewer1", role__can_review_destruction=True + ) + user2 = UserFactory.create( + username="reviewer2", role__can_review_destruction=True + ) + record_manager = UserFactory.create( + username="record_manager", role__can_start_destruction=True + ) + + request = factory.get("/foo") + request.user = record_manager + + data = { + "name": "A test list", + "contains_sensitive_info": True, + "assignees": [ + {"user": user1.pk, "order": 0}, + {"user": user2.pk, "order": 1}, + ], + "items": [ + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/111-111-111", + "extra_zaak_data": {}, + }, + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/222-222-222", + "extra_zaak_data": {}, + }, + ], + } + + serializer = DestructionListSerializer(data=data, context={"request": request}) + + self.assertTrue(serializer.is_valid()) + + destruction_list = serializer.save() + + assignees = destruction_list.assignees.order_by("order") + + self.assertEqual(assignees.count(), 2) + self.assertEqual(assignees[0].user.username, "reviewer1") + self.assertEqual(assignees[1].user.username, "reviewer2") + + items = destruction_list.items.order_by("zaak") + + self.assertEqual(items.count(), 2) + self.assertEqual( + items[0].zaak, "http://localhost:8003/zaken/api/v1/zaken/111-111-111" + ) + self.assertEqual( + items[1].zaak, "http://localhost:8003/zaken/api/v1/zaken/222-222-222" + ) + + self.assertEqual(destruction_list.author, record_manager) + + def test_zaak_already_included_in_other_list(self): + user1 = UserFactory.create( + username="reviewer1", role__can_review_destruction=True + ) + user2 = UserFactory.create( + username="reviewer2", role__can_review_destruction=True + ) + record_manager = UserFactory.create( + username="record_manager", role__can_start_destruction=True + ) + + DestructionListItemFactory.create( + zaak="http://localhost:8003/zaken/api/v1/zaken/111-111-111", + status=ListItemStatus.suggested, + ) + + request = factory.get("/foo") + request.user = record_manager + + data = { + "name": "A test list", + "contains_sensitive_info": True, + "assignees": [ + {"user": user1.pk, "order": 0}, + {"user": user2.pk, "order": 1}, + ], + "items": [ + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/111-111-111", + "extra_zaak_data": {}, + }, + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/222-222-222", + "extra_zaak_data": {}, + }, + ], + } + + serializer = DestructionListSerializer(data=data, context={"request": request}) + + self.assertFalse(serializer.is_valid()) + self.assertEqual( + serializer.errors["items"][0]["zaak"], + [ + _( + "This case was already included in another destruction list and was not exempt during the review process." + ) + ], + ) + + def test_zaak_already_included_in_other_list_but_exempt(self): + user1 = UserFactory.create( + username="reviewer1", role__can_review_destruction=True + ) + user2 = UserFactory.create( + username="reviewer2", role__can_review_destruction=True + ) + record_manager = UserFactory.create( + username="record_manager", role__can_start_destruction=True + ) + + DestructionListItemFactory.create( + zaak="http://localhost:8003/zaken/api/v1/zaken/111-111-111", + status=ListItemStatus.removed, + ) + + request = factory.get("/foo") + request.user = record_manager + + data = { + "name": "A test list", + "contains_sensitive_info": True, + "assignees": [ + {"user": user1.pk, "order": 0}, + {"user": user2.pk, "order": 1}, + ], + "items": [ + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/111-111-111", + "extra_zaak_data": {}, + }, + { + "zaak": "http://localhost:8003/zaken/api/v1/zaken/222-222-222", + "extra_zaak_data": {}, + }, + ], + } + + serializer = DestructionListSerializer(data=data, context={"request": request}) + + self.assertTrue(serializer.is_valid())