From 871711d394fa12da881b3a1a70e63ab97a660e6e Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Fri, 13 Nov 2026 13:35:25 -0800 Subject: [PATCH] Tests for the actions --- src/documents/tests/test_bulk_operations.py | 43 ++++++++++++++----- .../tests/test_merge_documents_as_versions.py | 17 +++++++- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/documents/tests/test_bulk_operations.py b/src/documents/tests/test_bulk_operations.py index d4cd350dc4..2e40a23b1b 100644 --- a/src/documents/tests/test_bulk_operations.py +++ b/src/documents/tests/test_bulk_operations.py @@ -123,6 +123,26 @@ def test_document_action_runs_with_user_in_worker(bulk_setup): assert result == {"operation": "rotate", "document_count": 1} +@pytest.mark.django_db +def test_document_action_queue_contains_only_serializable_parameters(bulk_setup): + user, client, doc, _ = bulk_setup + with mock.patch("documents.views.execute_bulk_operation.apply_async") as enqueue: + enqueue.return_value.id = "rotate-task" + response = client.post( + "/api/documents/rotate/", + {"documents": [doc.pk], "degrees": 90, "from_webui": True}, + format="json", + ) + assert response.data == {"result": "OK", "task_id": "rotate-task"} + assert enqueue.call_args.kwargs["kwargs"] == { + "operation": "rotate", + "document_ids": [doc.pk], + "parameters": {"degrees": 90, "source_mode": "latest_version"}, + "user_id": user.pk, + "trigger_source": "web_ui", + } + + @pytest.mark.django_db def test_reprocess_keeps_bulk_audit_entry(bulk_setup, settings): user, _, doc, _ = bulk_setup @@ -386,19 +406,22 @@ def test_legacy_trash_queues_without_deleting_in_request(bulk_setup): @pytest.mark.django_db -def test_dedicated_trash_remains_synchronous(bulk_setup): - _, client, doc, _ = bulk_setup - with ( - mock.patch("documents.views.execute_bulk_operation.apply_async") as enqueue, - mock.patch("documents.search.get_backend"), - ): +def test_dedicated_trash_queues_without_deleting_in_request(bulk_setup): + user, client, doc, _ = bulk_setup + with mock.patch("documents.views.execute_bulk_operation.apply_async") as enqueue: + enqueue.return_value.id = "delete-task" response = client.post( "/api/documents/delete/", {"documents": [doc.pk]}, format="json", ) assert response.status_code == 200 - assert response.data == {"result": "OK"} - assert not Document.objects.filter(pk=doc.pk).exists() - assert Document.deleted_objects.filter(pk=doc.pk).exists() - enqueue.assert_not_called() + assert response.data == {"result": "OK", "task_id": "delete-task"} + assert Document.objects.filter(pk=doc.pk).exists() + assert enqueue.call_args.kwargs["kwargs"] == { + "operation": "delete", + "document_ids": [doc.pk], + "parameters": {}, + "user_id": user.pk, + "trigger_source": "api_upload", + } diff --git a/src/documents/tests/test_merge_documents_as_versions.py b/src/documents/tests/test_merge_documents_as_versions.py index 060036d815..cb0a744316 100644 --- a/src/documents/tests/test_merge_documents_as_versions.py +++ b/src/documents/tests/test_merge_documents_as_versions.py @@ -8,6 +8,7 @@ from rest_framework import status from rest_framework.test import APITestCase from documents.bulk_edit import merge_as_versions +from documents.bulk_operations import execute_bulk_operation from documents.models import Document from documents.serialisers import MergeDocumentsAsVersionsSerializer from paperless_testing.factories import UserFactory @@ -349,6 +350,17 @@ class TestMergeDocumentsAsVersionsAPI(APITestCase): owner=self.user, ) self.client.force_authenticate(user=self.user) + enqueue = mock.patch( + "documents.views.execute_bulk_operation.apply_async", + side_effect=lambda *, kwargs, headers: self.run_operation(kwargs), + ) + enqueue.start() + self.addCleanup(enqueue.stop) + + @staticmethod + def run_operation(kwargs): + execute_bulk_operation(**kwargs) + return mock.Mock(id="test-bulk-operation") @mock.patch("documents.views.bulk_edit.merge_as_versions") def test_merges_documents_as_versions(self, merge_mock) -> None: @@ -368,7 +380,10 @@ class TestMergeDocumentsAsVersionsAPI(APITestCase): ) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(response.data, {"result": "OK"}) + self.assertEqual( + response.data, + {"result": "OK", "task_id": "test-bulk-operation"}, + ) merge_mock.assert_called_once_with( [self.doc1.id, self.doc2.id], root_document_id=self.doc2.id,