diff --git a/src/documents/signals/handlers.py b/src/documents/signals/handlers.py index f83f88783..3afb0d1cf 100755 --- a/src/documents/signals/handlers.py +++ b/src/documents/signals/handlers.py @@ -9,6 +9,7 @@ from django.contrib.contenttypes.models import ContentType from django.db import models, DatabaseError from django.dispatch import receiver from django.utils import timezone +from rest_framework.reverse import reverse from .. import index, matching from ..file_handling import delete_empty_directories, generate_filename, \ @@ -157,10 +158,10 @@ def run_post_consume_script(sender, document, **kwargs): settings.POST_CONSUME_SCRIPT, str(document.pk), document.file_name, - document.source_path, - document.thumbnail_path, - None, - None, + os.path.normpath(document.source_path), + os.path.normpath(document.thumbnail_path), + reverse("document-download", kwargs={"pk": document.pk}), + reverse("document-thumb", kwargs={"pk": document.pk}), str(document.correspondent), str(",".join(document.tags.all().values_list("slug", flat=True))) )).wait() diff --git a/src/documents/tests/test_post_consume_handlers.py b/src/documents/tests/test_post_consume_handlers.py new file mode 100644 index 000000000..aa712832a --- /dev/null +++ b/src/documents/tests/test_post_consume_handlers.py @@ -0,0 +1,57 @@ +from unittest import mock + +from django.test import TestCase, override_settings + +from documents.models import Document, Tag, Correspondent +from documents.signals.handlers import run_post_consume_script + + +class PostConsumeTestCase(TestCase): + + @mock.patch("documents.signals.handlers.Popen") + @override_settings(POST_CONSUME_SCRIPT=None) + def test_no_post_consume_script(self, m): + doc = Document.objects.create(title="Test", mime_type="application/pdf") + tag1 = Tag.objects.create(name="a") + tag2 = Tag.objects.create(name="b") + doc.tags.add(tag1) + doc.tags.add(tag2) + + run_post_consume_script(None, doc) + + m.assert_not_called() + + @mock.patch("documents.signals.handlers.Popen") + @override_settings(POST_CONSUME_SCRIPT="script") + def test_post_consume_script_simple(self, m): + doc = Document.objects.create(title="Test", mime_type="application/pdf") + + run_post_consume_script(None, doc) + + m.assert_called_once() + + @mock.patch("documents.signals.handlers.Popen") + @override_settings(POST_CONSUME_SCRIPT="script") + def test_post_consume_script_simple(self, m): + c = Correspondent.objects.create(name="my_bank") + doc = Document.objects.create(title="Test", mime_type="application/pdf", correspondent=c) + tag1 = Tag.objects.create(name="a") + tag2 = Tag.objects.create(name="b") + doc.tags.add(tag1) + doc.tags.add(tag2) + + run_post_consume_script(None, doc) + + m.assert_called_once() + + args, kwargs = m.call_args + + command = args[0] + + self.assertEqual(command[0], "script") + self.assertEqual(command[1], str(doc.pk)) + self.assertEqual(command[5], f"/api/documents/{doc.pk}/download/") + self.assertEqual(command[6], f"/api/documents/{doc.pk}/thumb/") + self.assertEqual(command[7], "my_bank") + # TODO: tags are unordered by default. + self.assertEqual(command[8], "a,b")