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 os | ||||||
| import shutil | import shutil | ||||||
| import tempfile |  | ||||||
| from unittest import mock | from unittest import mock | ||||||
|  |  | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| @@ -198,58 +197,6 @@ class TestBarcode(DirectoriesMixin, TestCase): | |||||||
|         img = Image.open(test_file) |         img = Image.open(test_file) | ||||||
|         self.assertEqual(barcodes.barcode_reader(img), ["CUSTOM BARCODE"]) |         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): |     def test_get_mime_type(self): | ||||||
|         """ |         """ | ||||||
|         GIVEN: |         GIVEN: | ||||||
| @@ -908,6 +855,144 @@ class TestBarcode(DirectoriesMixin, TestCase): | |||||||
|         self.assertEqual(doc_barcode_info.pdf_path, test_file) |         self.assertEqual(doc_barcode_info.pdf_path, test_file) | ||||||
|         self.assertListEqual(separator_page_numbers, []) |         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): |     def test_scan_file_for_asn_barcode(self): | ||||||
|         """ |         """ | ||||||
|         GIVEN: |         GIVEN: | ||||||
| @@ -952,82 +1037,6 @@ class TestBarcode(DirectoriesMixin, TestCase): | |||||||
|         self.assertEqual(doc_barcode_info.pdf_path, test_file) |         self.assertEqual(doc_barcode_info.pdf_path, test_file) | ||||||
|         self.assertEqual(asn, None) |         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) |     @override_settings(CONSUMER_ENABLE_ASN_BARCODE=True) | ||||||
|     def test_asn_too_large(self): |     def test_asn_too_large(self): | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ import shutil | |||||||
| import tempfile | import tempfile | ||||||
| from collections import namedtuple | from collections import namedtuple | ||||||
| from contextlib import contextmanager | from contextlib import contextmanager | ||||||
|  | from unittest import mock | ||||||
|  |  | ||||||
| from django.apps import apps | from django.apps import apps | ||||||
| from django.db import connection | from django.db import connection | ||||||
| @@ -86,6 +87,30 @@ class DirectoriesMixin: | |||||||
|         remove_dirs(self.dirs) |         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): | class TestMigrations(TransactionTestCase): | ||||||
|     @property |     @property | ||||||
|     def app(self): |     def app(self): | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Trenton H
					Trenton H