mirror of
				https://github.com/paperless-ngx/paperless-ngx.git
				synced 2025-10-30 03:56:23 -05:00 
			
		
		
		
	Moves ASN barcode testing into a dedicated class
This commit is contained in:
		| @@ -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): | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Trenton H
					Trenton H