]> git.ipfire.org Git - thirdparty/paperless-ngx.git/commitdiff
Moves ASN barcode testing into a dedicated class
authorTrenton H <797416+stumpylog@users.noreply.github.com>
Fri, 27 Jan 2023 16:37:00 +0000 (08:37 -0800)
committerTrenton H <797416+stumpylog@users.noreply.github.com>
Fri, 27 Jan 2023 20:24:47 +0000 (12:24 -0800)
src/documents/tests/test_barcodes.py
src/documents/tests/utils.py

index 8d8b2acfb09a5a49c087ebf2e6540f4c2826ffbc..1ff69885800cfd445205ae5610a22b673ff9fb51 100644 (file)
@@ -1,6 +1,5 @@
 import os
 import shutil
-import tempfile
 from unittest import mock
 
 from django.conf import settings
@@ -198,58 +197,6 @@ class TestBarcode(DirectoriesMixin, TestCase):
         img = Image.open(test_file)
         self.assertEqual(barcodes.barcode_reader(img), ["CUSTOM BARCODE"])
 
-    def test_barcode_reader_asn_normal(self):
-        """
-        GIVEN:
-            - Image containing standard ASNxxxxx barcode
-        WHEN:
-            - Image is scanned for barcodes
-        THEN:
-            - The barcode is located
-            - The barcode value is correct
-        """
-        test_file = os.path.join(
-            self.BARCODE_SAMPLE_DIR,
-            "barcode-39-asn-123.png",
-        )
-        img = Image.open(test_file)
-        self.assertEqual(barcodes.barcode_reader(img), ["ASN00123"])
-
-    def test_barcode_reader_asn_invalid(self):
-        """
-        GIVEN:
-            - Image containing invalid ASNxxxxx barcode
-            - The number portion of the ASN is not a number
-        WHEN:
-            - Image is scanned for barcodes
-        THEN:
-            - The barcode is located
-            - The barcode value is correct
-        """
-        test_file = os.path.join(
-            self.BARCODE_SAMPLE_DIR,
-            "barcode-39-asn-invalid.png",
-        )
-        img = Image.open(test_file)
-        self.assertEqual(barcodes.barcode_reader(img), ["ASNXYZXYZ"])
-
-    def test_barcode_reader_asn_custom_prefix(self):
-        """
-        GIVEN:
-            - Image containing custom prefix barcode
-        WHEN:
-            - Image is scanned for barcodes
-        THEN:
-            - The barcode is located
-            - The barcode value is correct
-        """
-        test_file = os.path.join(
-            self.BARCODE_SAMPLE_DIR,
-            "barcode-39-asn-custom-prefix.png",
-        )
-        img = Image.open(test_file)
-        self.assertEqual(barcodes.barcode_reader(img), ["CUSTOM-PREFIX-00123"])
-
     def test_get_mime_type(self):
         """
         GIVEN:
@@ -908,41 +855,83 @@ class TestBarcode(DirectoriesMixin, TestCase):
         self.assertEqual(doc_barcode_info.pdf_path, test_file)
         self.assertListEqual(separator_page_numbers, [])
 
-    def test_scan_file_for_asn_barcode(self):
+
+class TestAsnBarcodes(DirectoriesMixin, TestCase):
+
+    SAMPLE_DIR = os.path.join(
+        os.path.dirname(__file__),
+        "samples",
+    )
+
+    BARCODE_SAMPLE_DIR = os.path.join(SAMPLE_DIR, "barcodes")
+
+    def test_barcode_reader_asn_normal(self):
         """
         GIVEN:
-            - PDF containing an ASN barcode
-            - The ASN value is 123
+            - Image containing standard ASNxxxxx barcode
         WHEN:
-            - File is scanned for barcodes
+            - Image is scanned for barcodes
         THEN:
-            - The ASN is located
-            - The ASN integer value is correct
+            - The barcode is located
+            - The barcode value is correct
         """
         test_file = os.path.join(
             self.BARCODE_SAMPLE_DIR,
-            "barcode-39-asn-123.pdf",
+            "barcode-39-asn-123.png",
         )
-        doc_barcode_info = barcodes.scan_file_for_barcodes(
-            test_file,
+        img = Image.open(test_file)
+        self.assertEqual(barcodes.barcode_reader(img), ["ASN00123"])
+
+    def test_barcode_reader_asn_invalid(self):
+        """
+        GIVEN:
+            - Image containing invalid ASNxxxxx barcode
+            - The number portion of the ASN is not a number
+        WHEN:
+            - Image is scanned for barcodes
+        THEN:
+            - The barcode is located
+            - The barcode value is correct
+        """
+        test_file = os.path.join(
+            self.BARCODE_SAMPLE_DIR,
+            "barcode-39-asn-invalid.png",
         )
-        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
+        img = Image.open(test_file)
+        self.assertEqual(barcodes.barcode_reader(img), ["ASNXYZXYZ"])
 
-        self.assertEqual(doc_barcode_info.pdf_path, test_file)
-        self.assertEqual(asn, 123)
+    def test_barcode_reader_asn_custom_prefix(self):
+        """
+        GIVEN:
+            - Image containing custom prefix barcode
+        WHEN:
+            - Image is scanned for barcodes
+        THEN:
+            - The barcode is located
+            - The barcode value is correct
+        """
+        test_file = os.path.join(
+            self.BARCODE_SAMPLE_DIR,
+            "barcode-39-asn-custom-prefix.png",
+        )
+        img = Image.open(test_file)
+        self.assertEqual(barcodes.barcode_reader(img), ["CUSTOM-PREFIX-00123"])
 
-    def test_scan_file_for_asn_not_existing(self):
+    @override_settings(CONSUMER_ASN_BARCODE_PREFIX="CUSTOM-PREFIX-")
+    def test_scan_file_for_asn_custom_prefix(self):
         """
         GIVEN:
-            - PDF without an ASN barcode
+            - PDF containing an ASN barcode with custom prefix
+            - The ASN value is 123
         WHEN:
             - File is scanned for barcodes
         THEN:
-            - No ASN is retrieved from the document
+            - The ASN is located
+            - The ASN integer value is correct
         """
         test_file = os.path.join(
             self.BARCODE_SAMPLE_DIR,
-            "patch-code-t.pdf",
+            "barcode-39-asn-custom-prefix.pdf",
         )
         doc_barcode_info = barcodes.scan_file_for_barcodes(
             test_file,
@@ -950,7 +939,7 @@ class TestBarcode(DirectoriesMixin, TestCase):
         asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 
         self.assertEqual(doc_barcode_info.pdf_path, test_file)
-        self.assertEqual(asn, None)
+        self.assertEqual(asn, 123)
 
     def test_scan_file_for_asn_barcode_invalid(self):
         """
@@ -976,32 +965,35 @@ class TestBarcode(DirectoriesMixin, TestCase):
         self.assertEqual(doc_barcode_info.pdf_path, test_file)
         self.assertEqual(asn, None)
 
-    @override_settings(CONSUMER_ASN_BARCODE_PREFIX="CUSTOM-PREFIX-")
-    def test_scan_file_for_asn_custom_prefix(self):
+    @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
+    def test_consume_barcode_file_asn_assignment(self):
         """
         GIVEN:
-            - PDF containing an ASN barcode with custom prefix
+            - PDF containing an ASN barcode
             - The ASN value is 123
         WHEN:
             - File is scanned for barcodes
         THEN:
             - The ASN is located
             - The ASN integer value is correct
+            - The ASN is provided as the override value to the consumer
         """
         test_file = os.path.join(
             self.BARCODE_SAMPLE_DIR,
-            "barcode-39-asn-custom-prefix.pdf",
-        )
-        doc_barcode_info = barcodes.scan_file_for_barcodes(
-            test_file,
+            "barcode-39-asn-123.pdf",
         )
-        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 
-        self.assertEqual(doc_barcode_info.pdf_path, test_file)
-        self.assertEqual(asn, 123)
+        dst = os.path.join(settings.SCRATCH_DIR, "barcode-39-asn-123.pdf")
+        shutil.copy(test_file, dst)
 
-    @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
-    def test_consume_barcode_file_asn_assignment(self):
+        with mock.patch("documents.consumer.Consumer.try_consume_file") as mocked_call:
+            tasks.consume_file(dst)
+
+            args, kwargs = mocked_call.call_args
+
+            self.assertEqual(kwargs["override_asn"], 123)
+
+    def test_scan_file_for_asn_barcode(self):
         """
         GIVEN:
             - PDF containing an ASN barcode
@@ -1011,22 +1003,39 @@ class TestBarcode(DirectoriesMixin, TestCase):
         THEN:
             - The ASN is located
             - The ASN integer value is correct
-            - The ASN is provided as the override value to the consumer
         """
         test_file = os.path.join(
             self.BARCODE_SAMPLE_DIR,
             "barcode-39-asn-123.pdf",
         )
+        doc_barcode_info = barcodes.scan_file_for_barcodes(
+            test_file,
+        )
+        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 
-        dst = os.path.join(settings.SCRATCH_DIR, "barcode-39-asn-123.pdf")
-        shutil.copy(test_file, dst)
-
-        with mock.patch("documents.consumer.Consumer.try_consume_file") as mocked_call:
-            tasks.consume_file(dst)
+        self.assertEqual(doc_barcode_info.pdf_path, test_file)
+        self.assertEqual(asn, 123)
 
-            args, kwargs = mocked_call.call_args
+    def test_scan_file_for_asn_not_existing(self):
+        """
+        GIVEN:
+            - PDF without an ASN barcode
+        WHEN:
+            - File is scanned for barcodes
+        THEN:
+            - No ASN is retrieved from the document
+        """
+        test_file = os.path.join(
+            self.BARCODE_SAMPLE_DIR,
+            "patch-code-t.pdf",
+        )
+        doc_barcode_info = barcodes.scan_file_for_barcodes(
+            test_file,
+        )
+        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 
-            self.assertEqual(kwargs["override_asn"], 123)
+        self.assertEqual(doc_barcode_info.pdf_path, test_file)
+        self.assertEqual(asn, None)
 
     @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
     def test_asn_too_large(self):
index c52c9be921564eb2d2fec9af76db4450c077149a..b2ec0d0244eaf4dea5361588275120b742add45b 100644 (file)
@@ -3,6 +3,7 @@ import shutil
 import tempfile
 from collections import namedtuple
 from contextlib import contextmanager
+from unittest import mock
 
 from django.apps import apps
 from django.db import connection
@@ -86,6 +87,30 @@ class DirectoriesMixin:
         remove_dirs(self.dirs)
 
 
+class ConsumerProgressMixin:
+    def setUp(self) -> None:
+        self.send_progress_patcher = mock.patch(
+            "documents.consumer.Consumer._send_progress",
+        )
+        self.send_progress_mock = self.send_progress_patcher.start()
+        super().setUp()
+
+    def tearDown(self) -> None:
+        super().tearDown()
+        self.send_progress_patcher.stop()
+
+
+class DocumentConsumeDelayMixin:
+    def setUp(self) -> None:
+        self.consume_file_patcher = mock.patch("documents.tasks.consume_file.delay")
+        self.consume_file_mock = self.consume_file_patcher.start()
+        super().setUp()
+
+    def tearDown(self) -> None:
+        super().tearDown()
+        self.consume_file_patcher.stop()
+
+
 class TestMigrations(TransactionTestCase):
     @property
     def app(self):