mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-11-03 19:17:13 -05:00 
			
		
		
		
	Moves ASN barcode testing into a dedicated class
This commit is contained in:
		
							parent
							
								
									2ab77fbaf7
								
							
						
					
					
						commit
						4fce5aba63
					
				@ -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,6 +855,144 @@ class TestBarcode(DirectoriesMixin, TestCase):
 | 
			
		||||
        self.assertEqual(doc_barcode_info.pdf_path, test_file)
 | 
			
		||||
        self.assertListEqual(separator_page_numbers, [])
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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:
 | 
			
		||||
            - 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"])
 | 
			
		||||
 | 
			
		||||
    @override_settings(CONSUMER_ASN_BARCODE_PREFIX="CUSTOM-PREFIX-")
 | 
			
		||||
    def test_scan_file_for_asn_custom_prefix(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - PDF containing an ASN barcode with custom prefix
 | 
			
		||||
            - The ASN value is 123
 | 
			
		||||
        WHEN:
 | 
			
		||||
            - File is scanned for barcodes
 | 
			
		||||
        THEN:
 | 
			
		||||
            - The ASN is located
 | 
			
		||||
            - The ASN integer value is correct
 | 
			
		||||
        """
 | 
			
		||||
        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,
 | 
			
		||||
        )
 | 
			
		||||
        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(doc_barcode_info.pdf_path, test_file)
 | 
			
		||||
        self.assertEqual(asn, 123)
 | 
			
		||||
 | 
			
		||||
    def test_scan_file_for_asn_barcode_invalid(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - PDF containing an ASN barcode
 | 
			
		||||
            - The ASN value is XYZXYZ
 | 
			
		||||
        WHEN:
 | 
			
		||||
            - File is scanned for barcodes
 | 
			
		||||
        THEN:
 | 
			
		||||
            - The ASN is located
 | 
			
		||||
            - The ASN value is not used
 | 
			
		||||
        """
 | 
			
		||||
        test_file = os.path.join(
 | 
			
		||||
            self.BARCODE_SAMPLE_DIR,
 | 
			
		||||
            "barcode-39-asn-invalid.pdf",
 | 
			
		||||
        )
 | 
			
		||||
        doc_barcode_info = barcodes.scan_file_for_barcodes(
 | 
			
		||||
            test_file,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(doc_barcode_info.pdf_path, test_file)
 | 
			
		||||
        self.assertEqual(asn, None)
 | 
			
		||||
 | 
			
		||||
    @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
 | 
			
		||||
    def test_consume_barcode_file_asn_assignment(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - 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-123.pdf",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
 | 
			
		||||
            args, kwargs = mocked_call.call_args
 | 
			
		||||
 | 
			
		||||
            self.assertEqual(kwargs["override_asn"], 123)
 | 
			
		||||
 | 
			
		||||
    def test_scan_file_for_asn_barcode(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
@ -952,82 +1037,6 @@ class TestBarcode(DirectoriesMixin, TestCase):
 | 
			
		||||
        self.assertEqual(doc_barcode_info.pdf_path, test_file)
 | 
			
		||||
        self.assertEqual(asn, None)
 | 
			
		||||
 | 
			
		||||
    def test_scan_file_for_asn_barcode_invalid(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - PDF containing an ASN barcode
 | 
			
		||||
            - The ASN value is XYZXYZ
 | 
			
		||||
        WHEN:
 | 
			
		||||
            - File is scanned for barcodes
 | 
			
		||||
        THEN:
 | 
			
		||||
            - The ASN is located
 | 
			
		||||
            - The ASN value is not used
 | 
			
		||||
        """
 | 
			
		||||
        test_file = os.path.join(
 | 
			
		||||
            self.BARCODE_SAMPLE_DIR,
 | 
			
		||||
            "barcode-39-asn-invalid.pdf",
 | 
			
		||||
        )
 | 
			
		||||
        doc_barcode_info = barcodes.scan_file_for_barcodes(
 | 
			
		||||
            test_file,
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 | 
			
		||||
 | 
			
		||||
        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):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - PDF containing an ASN barcode with custom prefix
 | 
			
		||||
            - The ASN value is 123
 | 
			
		||||
        WHEN:
 | 
			
		||||
            - File is scanned for barcodes
 | 
			
		||||
        THEN:
 | 
			
		||||
            - The ASN is located
 | 
			
		||||
            - The ASN integer value is correct
 | 
			
		||||
        """
 | 
			
		||||
        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,
 | 
			
		||||
        )
 | 
			
		||||
        asn = barcodes.get_asn_from_barcodes(doc_barcode_info.barcodes)
 | 
			
		||||
 | 
			
		||||
        self.assertEqual(doc_barcode_info.pdf_path, test_file)
 | 
			
		||||
        self.assertEqual(asn, 123)
 | 
			
		||||
 | 
			
		||||
    @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
 | 
			
		||||
    def test_consume_barcode_file_asn_assignment(self):
 | 
			
		||||
        """
 | 
			
		||||
        GIVEN:
 | 
			
		||||
            - 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-123.pdf",
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
        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)
 | 
			
		||||
 | 
			
		||||
            args, kwargs = mocked_call.call_args
 | 
			
		||||
 | 
			
		||||
            self.assertEqual(kwargs["override_asn"], 123)
 | 
			
		||||
 | 
			
		||||
    @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True)
 | 
			
		||||
    def test_asn_too_large(self):
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
@ -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):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user