From 08a7d1d4b8a853daa62085e18f0be99c325fcf06 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Thu, 29 Oct 2026 12:43:51 -0700 Subject: [PATCH] Chore: Consolidate test sample files (#14430) Co-authored-by: Claude Sonnet 5.5 --- pyproject.toml | 4 +- src-ui/e2e/backend.py | 4 +- src/conftest.py | 38 +++++++ src/documents/tests/conftest.py | 16 +-- src/documents/tests/examples/no-text.png | Bin 32595 -> 0 bytes .../barcodes/barcode-128-asn-too-large.pdf | Bin 23427 -> 0 bytes .../samples/documents/archive/0000001.pdf | Bin 150479 -> 0 bytes .../samples/documents/originals/0000001.pdf | Bin 22926 -> 0 bytes .../samples/documents/originals/0000002.pdf | Bin 25743 -> 0 bytes .../samples/documents/originals/0000003.pdf | Bin 12022 -> 0 bytes .../samples/documents/thumbnails/0000002.webp | Bin 2624 -> 0 bytes .../samples/documents/thumbnails/0000003.webp | Bin 2624 -> 0 bytes .../samples/documents/thumbnails/0000004.webp | Bin 2624 -> 0 bytes src/documents/tests/samples/simple.pdf | Bin 22926 -> 0 bytes src/documents/tests/samples/simple.txt | 1 - src/documents/tests/test_api_bulk_download.py | 2 +- src/documents/tests/test_api_documents.py | 82 ++++++++------ src/documents/tests/test_api_email.py | 13 ++- src/documents/tests/test_barcodes.py | 4 +- src/documents/tests/test_bulk_edit.py | 39 ++----- src/documents/tests/test_consumer.py | 37 ++---- src/documents/tests/test_double_sided.py | 7 +- src/documents/tests/test_management.py | 3 +- .../tests/test_management_exporter.py | 101 ++++------------- .../tests/test_management_thumbnails.py | 5 +- src/documents/tests/test_pdf_ops.py | 3 +- src/documents/tests/test_tasks.py | 28 +---- src/documents/tests/test_workflows.py | 54 ++++----- src/documents/tests/utils.py | 3 + src/paperless/tests/parsers/conftest.py | 36 ++---- .../tests/parsers/test_tesseract_parser.py | 105 +++++++++--------- src/paperless/tests/samples/mail/sample.html | 19 ---- .../tests/samples/mail/sample.html.pdf | Bin 30170 -> 0 bytes .../tests/samples/mail/sample.html.pdf.webp | Bin 2830 -> 0 bytes src/paperless/tests/samples/mail/sample.png | Bin 7057 -> 0 bytes .../tests/samples/tesseract/no-text-alpha.png | Bin 32595 -> 0 bytes src/paperless/tests/test_parser_utils.py | 22 ++-- .../sample_files}/multi-page-digital.pdf | Bin .../sample_files}/multi-page-images.pdf | Bin .../sample_files}/simple-digital.pdf | Bin .../sample_files/thumbnail.webp} | Bin .../sample_files}/with-form.pdf | Bin src/paperless_testing/samples.py | 48 ++++++++ 43 files changed, 319 insertions(+), 355 deletions(-) delete mode 100644 src/documents/tests/examples/no-text.png delete mode 100644 src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf delete mode 100644 src/documents/tests/samples/documents/archive/0000001.pdf delete mode 100644 src/documents/tests/samples/documents/originals/0000001.pdf delete mode 100644 src/documents/tests/samples/documents/originals/0000002.pdf delete mode 100644 src/documents/tests/samples/documents/originals/0000003.pdf delete mode 100644 src/documents/tests/samples/documents/thumbnails/0000002.webp delete mode 100644 src/documents/tests/samples/documents/thumbnails/0000003.webp delete mode 100644 src/documents/tests/samples/documents/thumbnails/0000004.webp delete mode 100644 src/documents/tests/samples/simple.pdf delete mode 100644 src/documents/tests/samples/simple.txt delete mode 100644 src/paperless/tests/samples/mail/sample.html delete mode 100644 src/paperless/tests/samples/mail/sample.html.pdf delete mode 100644 src/paperless/tests/samples/mail/sample.html.pdf.webp delete mode 100644 src/paperless/tests/samples/mail/sample.png delete mode 100644 src/paperless/tests/samples/tesseract/no-text-alpha.png rename src/{paperless/tests/samples/tesseract => paperless_testing/sample_files}/multi-page-digital.pdf (100%) rename src/{paperless/tests/samples/tesseract => paperless_testing/sample_files}/multi-page-images.pdf (100%) rename src/{paperless/tests/samples/tesseract => paperless_testing/sample_files}/simple-digital.pdf (100%) rename src/{documents/tests/samples/documents/thumbnails/0000001.webp => paperless_testing/sample_files/thumbnail.webp} (100%) rename src/{paperless/tests/samples/tesseract => paperless_testing/sample_files}/with-form.pdf (100%) create mode 100644 src/paperless_testing/samples.py diff --git a/pyproject.toml b/pyproject.toml index 5967a6fda..401f0bdb0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -256,8 +256,8 @@ isort.force-single-line = true [tool.codespell] ignore-words-list = "criterias,afterall,valeu,ureue,equest,ure,assertIn,Oktober,commitish,NIN,nin,reprot" skip = """\ - src-ui/src/locale/*,src-ui/pnpm-lock.yaml,src-ui/e2e/*,src/paperless_mail/tests/samples/*,src/paperless/tests/samples\ - /mail/*,src/documents/tests/samples/*,*.po,*.json\ + src-ui/src/locale/*,src-ui/pnpm-lock.yaml,src-ui/e2e/*,src/paperless/tests/samples/mail/*,src/documents/tests/samples\ + /*,src/paperless_testing/sample_files/*,*.po,*.json\ """ write-changes = true diff --git a/src-ui/e2e/backend.py b/src-ui/e2e/backend.py index e706b0f8a..0a4ed8fa3 100644 --- a/src-ui/e2e/backend.py +++ b/src-ui/e2e/backend.py @@ -134,7 +134,9 @@ def seed_database() -> None: originals.mkdir(parents=True) thumbnails = Path(os.environ["PAPERLESS_MEDIA_ROOT"]) / "documents" / "thumbnails" thumbnails.mkdir(parents=True) - sample_pdf = SOURCE_ROOT / "documents" / "tests" / "samples" / "simple.pdf" + sample_pdf = ( + SOURCE_ROOT / "paperless_testing" / "sample_files" / "simple-digital.pdf" + ) for document in documents: shutil.copyfile(sample_pdf, originals / document.filename) shutil.copyfile( diff --git a/src/conftest.py b/src/conftest.py index 781cdff61..91f5635a2 100644 --- a/src/conftest.py +++ b/src/conftest.py @@ -11,6 +11,8 @@ from typing import TYPE_CHECKING import pytest +from paperless_testing import samples + if TYPE_CHECKING: from collections.abc import Generator from pathlib import Path @@ -149,3 +151,39 @@ def fake_progress_manager( monkeypatch.setattr("documents.tasks.ProgressManager", FakeProgressManager) return FakeProgressManager + + +@pytest.fixture(scope="session") +def shared_samples_dir() -> Path: + """Directory of sample files used by more than one app's tests.""" + return samples.SHARED_SAMPLES_DIR + + +@pytest.fixture(scope="session") +def simple_digital_pdf_file() -> Path: + """One-page PDF with a text layer.""" + return samples.SIMPLE_DIGITAL_PDF + + +@pytest.fixture(scope="session") +def multi_page_digital_pdf_file() -> Path: + """Three-page PDF with a text layer.""" + return samples.MULTI_PAGE_DIGITAL_PDF + + +@pytest.fixture(scope="session") +def with_form_pdf_file() -> Path: + """PDF containing a fillable form.""" + return samples.WITH_FORM_PDF + + +@pytest.fixture(scope="session") +def multi_page_images_pdf_file() -> Path: + """Multi-page PDF of scanned images, no text layer.""" + return samples.MULTI_PAGE_IMAGES_PDF + + +@pytest.fixture(scope="session") +def thumbnail_webp_file() -> Path: + """Small WebP thumbnail.""" + return samples.THUMBNAIL_WEBP diff --git a/src/documents/tests/conftest.py b/src/documents/tests/conftest.py index 567342dcc..c41f200a2 100644 --- a/src/documents/tests/conftest.py +++ b/src/documents/tests/conftest.py @@ -12,29 +12,25 @@ if TYPE_CHECKING: from paperless_testing.dirs import PaperlessDirs -@pytest.fixture(scope="session") -def document_samples_dir() -> Path: - """Path to the shared test sample documents.""" - return Path(__file__).parent / "samples" / "documents" - - @pytest.fixture() def sample_doc( paperless_dirs: "PaperlessDirs", - document_samples_dir: Path, + simple_digital_pdf_file: Path, + multi_page_images_pdf_file: Path, + thumbnail_webp_file: Path, ) -> "Document": """Create a document with valid files and matching checksums.""" with filelock.FileLock(paperless_dirs.media_lock): shutil.copy( - document_samples_dir / "originals" / "0000001.pdf", + simple_digital_pdf_file, paperless_dirs.originals_dir / "0000001.pdf", ) shutil.copy( - document_samples_dir / "archive" / "0000001.pdf", + multi_page_images_pdf_file, paperless_dirs.archive_dir / "0000001.pdf", ) shutil.copy( - document_samples_dir / "thumbnails" / "0000001.webp", + thumbnail_webp_file, paperless_dirs.thumbnail_dir / "0000001.webp", ) diff --git a/src/documents/tests/examples/no-text.png b/src/documents/tests/examples/no-text.png deleted file mode 100644 index e78b22bfbe53be5a9046bbfb32fef7e98abb9be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32595 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 LNkvXXu0mjfD4>h= diff --git a/src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf b/src/documents/tests/samples/barcodes/barcode-128-asn-too-large.pdf deleted file mode 100644 index 2d190c8762e5573b39572f941dc9935d7c581a66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23427 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 Mj}VcUCz|U12lQL;TmS$7 diff --git a/src/documents/tests/samples/documents/archive/0000001.pdf b/src/documents/tests/samples/documents/archive/0000001.pdf deleted file mode 100644 index ea08363bfe30f5728675913667557755113fe4f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150479 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 L<;wMr8!-O@UHFXz diff --git a/src/documents/tests/samples/documents/originals/0000001.pdf b/src/documents/tests/samples/documents/originals/0000001.pdf deleted file mode 100644 index e450de48269ce43785b8344c63e233a1794abae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22926 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 diff --git a/src/documents/tests/samples/documents/originals/0000002.pdf b/src/documents/tests/samples/documents/originals/0000002.pdf deleted file mode 100644 index 5e75266ca7e534ae87533e612c662a32320eb0c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25743 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 diff --git a/src/documents/tests/samples/documents/originals/0000003.pdf b/src/documents/tests/samples/documents/originals/0000003.pdf deleted file mode 100644 index afbeef5c8fc783d55b40d5a642a6d523413472d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12022 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 Iq^$({f5Aoqy#N3J diff --git a/src/documents/tests/samples/documents/thumbnails/0000002.webp b/src/documents/tests/samples/documents/thumbnails/0000002.webp deleted file mode 100644 index a7ff623b24a24c1490dec1742efb28ce7da545d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 zcmV-G3cvMINk&FE3IG6CMM6+kP&gng3IG7`KLDKpD)a%406vjOp-UyCqoJiWn24|v z32AQObfFvbd-1RJp4C6aep2<=`Fq-~SUo}JSMqgTjulSz% zUf4Ns^#b*m>VNIOzxe6uiQvCr59Z(1y)N&WpeN~HR$ub`n0;yNBmCq0xBTH$)_p+u zH5g^;>IcE7!!K7*J`F}0db)w|YB0;y)DDcpile-!BGTR)&60>d2p)3sf6InmuAqDw z(zfHF^ZC$xro3zu6@{+aHz-mtsTgJcd<38+QQ@mdETJM%iOZvQy!xIj3qkyA${-N5 zj83zqC02XQNxa@6kuO{uWYOk37rSKg`K1qE#g|5wtU+|~?81Gud0~<+;GL1UlnMNa z^YX;l)-rD8ie|?>j8_ku>96IT4%vmuYq}*fiMEo@CUpRSgTUXBz948*b@7D4G?+{oB8)00C3a`crLiAJMIT;)F0Q4@pTg= zk8TKVpSj9BlOD^U_Vtd@u7Vcfp9Z50yIcE7!!K7*J`F}0db)w|YB0;y z)DMGEhF-3qd>V{0^>qW_)M1yas2>KS47C6N{{LS<022BlC{>70i&@QiW1W$cX@RHh z&$~wT&cZZ5ZzWxr&}HBKxV?IK33{DDzuXf!8n}3C7gB94(TK^{}EA}4n>7Ny_jMijR%-xoD0JK1< zyK!Jib*~}pltq>L8HnpYIzUk?U7LhyFOmM&;|Oaxa~Z3HP-s^zLrsn#NN`#;_GUTb z#_n!>RiP(Hvb9K2Hk@AT!spjPHv9q)i9Uf)E6V$WuUbKH@;b%pn^qQ7wH%ZNW}0)w z^)wQ`^WXd5QE_pS%vl$vBN~*Kf|1vnY61ukCkU=c=WuddH#0*TXMPx(hDV$KU$9?t zL`#!I*2q>euUU5S`lpk!qAd5ZRhy-VzxSa_Ni>LBnx;L79obH{#=Ek9gBFrH58KRz z#=)6S;p~6=11R3l$2Pvo7&{`sQQfb zOLbS48SXz(_@ThOkBlq6zj!KZl-FN}lQ4XA7HyfGEi7%ZjhRS~Q`_)}eG)=3yC?4s z5(*>Wv?@8<=+_CfU@&q}TNL*l8N~_>A-c8;(=aXtM9-r7ad)ImdcAw6dxW zHOgelATJ~5IScJi`6*Za&Z2wv_?9Di&mZ>0`}6iUi?H2MoxkW)5giHsT|DilWJSYF z6)stGfpvDp@j115D$=z6n z1NQQ%yGt(wgViY8yNi(~DXe2*aR9`R(HSqKSx8cxwEyZf94ZJ1NTyw(#NX9w{y#?he7v5k8d`_t1RdIrvWe+Xj& z9oEoqKHr<;{>AnSd zogP_2+qlLnz5AZ>&`>GF34=)WG26*ow0t*dkIC}WW??y8K)T0YOP$#88XSJis;)y+ z*WZZ0A=;4oECTVqLUYyE7D7`>x%e2G zo{0(_rv;S~AWM5T-2JDuSS0Dv{=VU1e%Y|=c&jeRFr1`TRNa3DQpjy( zw=NLvPru9rt~Z*{vndHkP6F3aDyrsm_h59Zi?FIim z(it9Y+jd%l9+(yb00VJ@&f>q+jT|$+?Z9-iqY#k~@(HG}3kJ3P z!6}u8ApsDt)v-C_yDz+g%y_M-JyR z9c!iH=&>aHv6tVv#Ajj3|M=^^QZUl{D>D9!Q_^0L9!LSF1|&vuvX9vCa(JWBs8wiiWY2ZMY7 z=Fg#yHB6Uauc{ARHobWbgz?8I@ewfUyN_n#_Hce4J*GGX1dge6M@dLdOnp^IwwL1% z{$)m7+JGHYw_OY2m1jCU4_>*%di}Z&5YdW`bFhv0jBvu*{T2##(O7KYCLTpg3R5KX zFG=K{F4X%&n8MI7PsvqQvSUE(+d>69)d5kDpLU4(nI&Du=l;!@7H7BZ0r3|ZvA^vG z_SP<+yflz%bRnTrAWxtgHF+~K(}?AU9FTy*Ux3ZPk7Mbb2lUfcp$H5nn@|2}8Ajvx zfp0~o9C*82Qrid4sxr?fhFjr?FOf9*Ou&}io*@Xhb|8=^-OKRnG#j<&uUQ{nirzGM z%c@AWw^JRP|7d|%)Ey4>(LYcw%hwYkcXnfJq`W64oBzs-Fuw`^h}H)4BY7n|!WYX0 z*qOc&(G$0+_JSNHOUL!#{jBH~3PCqOqswuP-fu1a{XN5XCZ_n^l&yQ8X>q3eQ@04? z&3h(EFCzTACB=gUy=weuxqRZlXe%;B@sVnZD#7eSth1XrSgHT+rY{TrtQBa?BFZu8 in}?oeZhY4Q)o&wyi3@~zh-WNDh`8wL1V8`)0002IHZUas diff --git a/src/documents/tests/samples/documents/thumbnails/0000003.webp b/src/documents/tests/samples/documents/thumbnails/0000003.webp deleted file mode 100644 index a7ff623b24a24c1490dec1742efb28ce7da545d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 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 diff --git a/src/documents/tests/samples/documents/thumbnails/0000004.webp b/src/documents/tests/samples/documents/thumbnails/0000004.webp deleted file mode 100644 index a7ff623b24a24c1490dec1742efb28ce7da545d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2624 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 diff --git a/src/documents/tests/samples/simple.pdf b/src/documents/tests/samples/simple.pdf deleted file mode 100644 index e450de48269ce43785b8344c63e233a1794abae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22926 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 diff --git a/src/documents/tests/samples/simple.txt b/src/documents/tests/samples/simple.txt deleted file mode 100644 index 6de7b8c69..000000000 --- a/src/documents/tests/samples/simple.txt +++ /dev/null @@ -1 +0,0 @@ -This is a test file. diff --git a/src/documents/tests/test_api_bulk_download.py b/src/documents/tests/test_api_bulk_download.py index b031a5105..0f8dc7afe 100644 --- a/src/documents/tests/test_api_bulk_download.py +++ b/src/documents/tests/test_api_bulk_download.py @@ -53,7 +53,7 @@ class TestBulkDownload(DirectoriesMixin, SampleDirMixin, APITestCase): archive_checksum="D", ) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", self.doc2.source_path) + shutil.copy(self.SIMPLE_PDF, self.doc2.source_path) shutil.copy(self.SAMPLE_DIR / "simple.png", self.doc2b.source_path) shutil.copy(self.SAMPLE_DIR / "simple.jpg", self.doc3.source_path) shutil.copy(self.SAMPLE_DIR / "test_with_bom.pdf", self.doc3.archive_path) diff --git a/src/documents/tests/test_api_documents.py b/src/documents/tests/test_api_documents.py index c37a8d3ee..eeb1ab59a 100644 --- a/src/documents/tests/test_api_documents.py +++ b/src/documents/tests/test_api_documents.py @@ -57,6 +57,8 @@ from paperless_testing.http import read_streaming_response from paperless_testing.permissions import grant_all_global from paperless_testing.permissions import grant_global from paperless_testing.permissions import grant_object +from paperless_testing.samples import SIMPLE_DIGITAL_PDF +from paperless_testing.samples import THUMBNAIL_WEBP class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): @@ -1917,7 +1919,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SimpleUploadedFile( + "simple.pdf", + SIMPLE_DIGITAL_PDF.read_bytes(), + content_type="application/pdf", + ) as f: response = self.client.post( "/api/documents/post_document/", {"document": f}, @@ -1945,7 +1951,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): payload = SimpleUploadedFile( "../../outside.pdf", - (Path(__file__).parent / "samples" / "simple.pdf").read_bytes(), + SIMPLE_DIGITAL_PDF.read_bytes(), content_type="application/pdf", ) @@ -1974,7 +1980,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - pdf_bytes = (Path(__file__).parent / "samples" / "simple.pdf").read_bytes() + pdf_bytes = SIMPLE_DIGITAL_PDF.read_bytes() boundary = "paperless-boundary" payload = ( ( @@ -2050,7 +2056,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): def test_upload_insufficient_permissions(self) -> None: self.client.force_authenticate(user=UserFactory(username="testuser2")) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f}, @@ -2063,7 +2069,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SimpleUploadedFile( + "simple.pdf", + SIMPLE_DIGITAL_PDF.read_bytes(), + content_type="application/pdf", + ) as f: response = self.client.post( "/api/documents/post_document/", { @@ -2096,7 +2106,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"documenst": f}, @@ -2122,7 +2132,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "title": "my custom title"}, @@ -2142,7 +2152,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): ) c = Correspondent.objects.create(name="test-corres") - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "correspondent": c.id}, @@ -2161,7 +2171,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "correspondent": 3456}, @@ -2176,7 +2186,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): ) dt = DocumentType.objects.create(name="invoice") - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "document_type": dt.id}, @@ -2195,7 +2205,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "document_type": 34578}, @@ -2210,7 +2220,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): ) sp = StoragePath.objects.create(name="invoices") - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "storage_path": sp.id}, @@ -2229,7 +2239,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "storage_path": 34578}, @@ -2245,7 +2255,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): t1 = Tag.objects.create(name="tag1") t2 = Tag.objects.create(name="tag2") - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "tags": [t2.id, t1.id]}, @@ -2266,7 +2276,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): t1 = Tag.objects.create(name="tag1") t2 = Tag.objects.create(name="tag2") - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "tags": [t2.id, t1.id, 734563]}, @@ -2290,7 +2300,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): 0, tzinfo=zoneinfo.ZoneInfo("America/Los_Angeles"), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "created": created}, @@ -2306,7 +2316,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SimpleUploadedFile( + "simple.pdf", + SIMPLE_DIGITAL_PDF.read_bytes(), + content_type="application/pdf", + ) as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "archive_serial_number": 500}, @@ -2333,7 +2347,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): data_type=CustomField.FieldDataType.STRING, ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SimpleUploadedFile( + "simple.pdf", + SIMPLE_DIGITAL_PDF.read_bytes(), + content_type="application/pdf", + ) as f: response = self.client.post( "/api/documents/post_document/", { @@ -2388,7 +2406,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): w1.actions.add(action1) w1.save() - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", { @@ -2429,7 +2447,11 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): data_type=CustomField.FieldDataType.INT, ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SimpleUploadedFile( + "simple.pdf", + SIMPLE_DIGITAL_PDF.read_bytes(), + content_type="application/pdf", + ) as f: response = self.client.post( "/api/documents/post_document/", { @@ -2478,7 +2500,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): ] for payload in error_payloads: - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: data = {"document": f, **payload} response = self.client.post( "/api/documents/post_document/", @@ -2536,7 +2558,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): id=str(uuid.uuid4()), ) - with (Path(__file__).parent / "samples" / "simple.pdf").open("rb") as f: + with SIMPLE_DIGITAL_PDF.open("rb") as f: response = self.client.post( "/api/documents/post_document/", {"document": f, "from_webui": True}, @@ -2575,14 +2597,8 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): archive_filename="archive.pdf", ) - source_file: Path = ( - Path(__file__).parent - / "samples" - / "documents" - / "thumbnails" - / "0000001.webp" - ) - archive_file: Path = Path(__file__).parent / "samples" / "simple.pdf" + source_file: Path = THUMBNAIL_WEBP + archive_file: Path = SIMPLE_DIGITAL_PDF shutil.copy(source_file, doc.source_path) shutil.copy(archive_file, doc.archive_path) @@ -2615,7 +2631,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): mime_type="application/pdf", ) - shutil.copy(Path(__file__).parent / "samples" / "simple.pdf", doc.source_path) + shutil.copy(SIMPLE_DIGITAL_PDF, doc.source_path) response = self.client.get(f"/api/documents/{doc.pk}/metadata/") self.assertEqual(response.status_code, status.HTTP_200_OK) @@ -4381,8 +4397,8 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): filename="test2.pdf", ) - archive_file = Path(__file__).parent / "samples" / "simple.pdf" - source_file = Path(__file__).parent / "samples" / "simple.pdf" + archive_file = SIMPLE_DIGITAL_PDF + source_file = SIMPLE_DIGITAL_PDF shutil.copy(archive_file, doc.archive_path) shutil.copy(source_file, doc2.source_path) diff --git a/src/documents/tests/test_api_email.py b/src/documents/tests/test_api_email.py index d26f26d85..c0a3fc9ac 100644 --- a/src/documents/tests/test_api_email.py +++ b/src/documents/tests/test_api_email.py @@ -12,6 +12,9 @@ from documents.tests.utils import SampleDirMixin from paperless_testing.dirs import DirectoriesMixin from paperless_testing.factories import UserFactory from paperless_testing.permissions import grant_global +from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF +from paperless_testing.samples import SIMPLE_DIGITAL_PDF +from paperless_testing.samples import WITH_FORM_PDF class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase): @@ -42,15 +45,15 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase): # Copy sample files to document paths (using different files to distinguish versions) shutil.copy( - self.SAMPLE_DIR / "documents" / "originals" / "0000001.pdf", + SIMPLE_DIGITAL_PDF, self.doc1.archive_path, ) shutil.copy( - self.SAMPLE_DIR / "documents" / "originals" / "0000002.pdf", + MULTI_PAGE_DIGITAL_PDF, self.doc1.source_path, ) shutil.copy( - self.SAMPLE_DIR / "documents" / "originals" / "0000003.pdf", + WITH_FORM_PDF, self.doc2.source_path, ) @@ -377,7 +380,7 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase): checksum="3", filename="test3.pdf", ) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", doc3.source_path) + shutil.copy(self.SIMPLE_PDF, doc3.source_path) doc4 = Document.objects.create( title="test1", @@ -386,7 +389,7 @@ class TestEmail(DirectoriesMixin, SampleDirMixin, APITestCase): checksum="4", filename="test4.pdf", ) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", doc4.source_path) + shutil.copy(self.SIMPLE_PDF, doc4.source_path) response = self.client.post( self.ENDPOINT, diff --git a/src/documents/tests/test_barcodes.py b/src/documents/tests/test_barcodes.py index 36322d2ab..9dc8f2353 100644 --- a/src/documents/tests/test_barcodes.py +++ b/src/documents/tests/test_barcodes.py @@ -169,7 +169,7 @@ class TestBarcode( - No barcodes detected - No pages to split on """ - test_file = self.SAMPLE_DIR / "simple.pdf" + test_file = self.SIMPLE_PDF with self.get_reader(test_file) as reader: reader.detect() separator_page_numbers = reader.get_separation_pages() @@ -461,7 +461,7 @@ class TestBarcode( THEN: - Nothing happens """ - test_file = self.SAMPLE_DIR / "simple.pdf" + test_file = self.SIMPLE_PDF with self.get_reader(test_file) as reader: try: diff --git a/src/documents/tests/test_bulk_edit.py b/src/documents/tests/test_bulk_edit.py index 9688b5cad..b341f5744 100644 --- a/src/documents/tests/test_bulk_edit.py +++ b/src/documents/tests/test_bulk_edit.py @@ -29,6 +29,9 @@ from documents.permissions import set_permissions_for_objects from paperless_testing.dirs import DirectoriesMixin from paperless_testing.factories import DocumentFactory from paperless_testing.permissions import grant_object +from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF +from paperless_testing.samples import SIMPLE_DIGITAL_PDF +from paperless_testing.samples import WITH_FORM_PDF class TestBulkEdit(DirectoriesMixin, TestCase): @@ -706,47 +709,27 @@ class TestPDFActions(DirectoriesMixin, TestCase): super().setUp() sample1 = self.dirs.scratch_dir / "sample.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, sample1, ) sample1_archive = self.dirs.archive_dir / "sample_archive.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, sample1_archive, ) sample2 = self.dirs.scratch_dir / "sample2.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000002.pdf", + MULTI_PAGE_DIGITAL_PDF, sample2, ) sample2_archive = self.dirs.archive_dir / "sample2_archive.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000002.pdf", + MULTI_PAGE_DIGITAL_PDF, sample2_archive, ) sample3 = self.dirs.scratch_dir / "sample3.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000003.pdf", + WITH_FORM_PDF, sample3, ) self.doc1 = Document.objects.create( @@ -780,11 +763,7 @@ class TestPDFActions(DirectoriesMixin, TestCase): ) img_doc_archive = self.dirs.archive_dir / "sample_image.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, img_doc_archive, ) self.img_doc = Document.objects.create( diff --git a/src/documents/tests/test_consumer.py b/src/documents/tests/test_consumer.py index b9afd61a0..7c607e1e3 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -39,6 +39,9 @@ from paperless_testing.factories import TagFactory from paperless_testing.factories import UserFactory from paperless_testing.fakes.progress import FakeProgressManager from paperless_testing.permissions import grant_object +from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF +from paperless_testing.samples import MULTI_PAGE_IMAGES_PDF +from paperless_testing.samples import SIMPLE_DIGITAL_PDF class _BaseNewStyleParser: @@ -115,9 +118,7 @@ class _BaseNewStyleParser: class DummyParser(_BaseNewStyleParser): - _ARCHIVE_SRC = ( - Path(__file__).parent / "samples" / "documents" / "archive" / "0000001.pdf" - ) + _ARCHIVE_SRC = MULTI_PAGE_IMAGES_PDF def parse(self, document_path, mime_type, *, produce_archive: bool = True) -> None: self._text = "The Text" @@ -203,33 +204,19 @@ class TestConsumer( self.addCleanup(patcher.stop) def get_test_file(self): - src = ( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf" - ) + src = SIMPLE_DIGITAL_PDF dst = self.dirs.scratch_dir / "sample.pdf" shutil.copy(src, dst) return dst def get_test_file2(self): - src = ( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000002.pdf" - ) + src = MULTI_PAGE_DIGITAL_PDF dst = self.dirs.scratch_dir / "sample2.pdf" shutil.copy(src, dst) return dst def get_test_archive_file(self): - src = ( - Path(__file__).parent / "samples" / "documents" / "archive" / "0000001.pdf" - ) + src = MULTI_PAGE_IMAGES_PDF dst = self.dirs.scratch_dir / "sample_archive.pdf" shutil.copy(src, dst) return dst @@ -1124,7 +1111,7 @@ class TestConsumer( @mock.patch("documents.consumer.get_parser_registry") def test_similar_filenames(self, m) -> None: shutil.copy( - Path(__file__).parent / "samples" / "simple.pdf", + SIMPLE_DIGITAL_PDF, settings.CONSUMPTION_DIR / "simple.pdf", ) shutil.copy( @@ -1665,13 +1652,7 @@ class TestConsumerRemoteOCR( self.addCleanup(patcher.stop) def _consume(self, *, overrides: DocumentMetadataOverrides | None = None) -> bool: - src = ( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf" - ) + src = SIMPLE_DIGITAL_PDF dst = self.dirs.scratch_dir / "sample.pdf" shutil.copy(src, dst) diff --git a/src/documents/tests/test_double_sided.py b/src/documents/tests/test_double_sided.py index 7ea806e93..c35b82486 100644 --- a/src/documents/tests/test_double_sided.py +++ b/src/documents/tests/test_double_sided.py @@ -37,12 +37,15 @@ class TestDoubleSided( self.double_sided_dir.mkdir() self.staging_file = self.dirs.scratch_dir / STAGING_FILE_NAME + def _sample(self, name: str) -> Path: + return self.SIMPLE_PDF if name == "simple.pdf" else self.SAMPLE_DIR / name + def consume_file(self, srcname, dstname: str | Path = "foo.pdf"): """ Starts the consume process and also ensures the destination file does not exist afterwards """ - src = self.SAMPLE_DIR / srcname + src = self._sample(srcname) dst = self.double_sided_dir / dstname dst.parent.mkdir(parents=True, exist_ok=True) shutil.copy(src, dst) @@ -57,7 +60,7 @@ class TestDoubleSided( return msg def create_staging_file(self, src="double-sided-odd.pdf", datetime=None) -> None: - shutil.copy(self.SAMPLE_DIR / src, self.staging_file) + shutil.copy(self._sample(src), self.staging_file) if datetime is None: datetime = dt.datetime.now() os.utime(str(self.staging_file), (datetime.timestamp(),) * 2) diff --git a/src/documents/tests/test_management.py b/src/documents/tests/test_management.py index 19ab4e269..0fe5d7eb5 100644 --- a/src/documents/tests/test_management.py +++ b/src/documents/tests/test_management.py @@ -23,8 +23,9 @@ from documents.tasks import update_document_content_maybe_archive_file from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin from paperless_testing.factories import DocumentFactory +from paperless_testing.samples import SIMPLE_DIGITAL_PDF -sample_file: Path = Path(__file__).parent / "samples" / "simple.pdf" +sample_file: Path = SIMPLE_DIGITAL_PDF @pytest.mark.management diff --git a/src/documents/tests/test_management_exporter.py b/src/documents/tests/test_management_exporter.py index b4cee95da..ec6a21b77 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -59,6 +59,7 @@ from paperless_testing.dirs import paperless_environment from paperless_testing.factories import DocumentBarcodeFactory from paperless_testing.factories import DocumentFactory from paperless_testing.permissions import grant_object +from paperless_testing.samples import install_document_samples @pytest.mark.management @@ -204,10 +205,7 @@ class TestExportImport( def test_exporter(self, *, use_filename_format=False) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") num_permission_objects = Permission.objects.count() @@ -311,10 +309,7 @@ class TestExportImport( def test_exporter_with_filename_format(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") with override_settings( FILENAME_FORMAT="{created_year}/{correspondent}/{title}", @@ -323,10 +318,7 @@ class TestExportImport( def test_exporter_includes_share_links_and_bundles(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") share_link = ShareLink.objects.create( slug="share-link-slug", @@ -425,10 +417,7 @@ class TestExportImport( def test_update_export_changed_time(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") self._do_export() self.assertIsFile(self.target / "manifest.json") @@ -464,10 +453,7 @@ class TestExportImport( def test_update_export_changed_checksum(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") self._do_export() @@ -494,10 +480,7 @@ class TestExportImport( def test_update_export_deleted_document(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") manifest = self._do_export() @@ -529,10 +512,7 @@ class TestExportImport( @override_settings(FILENAME_FORMAT="{title}/{correspondent}") def test_update_export_changed_location(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") self._do_export(use_filename_format=True) self.assertIsFile(self.target / "wow1" / "c.pdf") @@ -574,10 +554,7 @@ class TestExportImport( - Zipfile contains exported files """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") args = ["document_exporter", self.target, "--zip"] @@ -606,10 +583,7 @@ class TestExportImport( - Zipfile contains exported files """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") args = ["document_exporter", self.target, "--zip", "--use-filename-format"] @@ -645,10 +619,7 @@ class TestExportImport( - The existing file and directory in target are removed """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") # Create stuff in target directory existing_file = self.target / "test.txt" @@ -744,10 +715,7 @@ class TestExportImport( - Documents can be imported again """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") manifest = self._do_export() has_archive = False @@ -790,10 +758,7 @@ class TestExportImport( - Documents can be imported again """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") manifest = self._do_export() has_thumbnail = False @@ -838,10 +803,7 @@ class TestExportImport( - Documents can be imported again """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") manifest = self._do_export(split_manifest=True) has_document = False @@ -866,10 +828,7 @@ class TestExportImport( def _export_import_barcodes(self, *, split_manifest: bool) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") DocumentBarcodeFactory(document=self.d1, value="https://example.com") DocumentBarcodeFactory(document=self.d2, page=2, value="DE8937") @@ -905,10 +864,7 @@ class TestExportImport( - Documents can be imported again """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") self._do_export(use_folder_prefix=True) @@ -935,10 +891,7 @@ class TestExportImport( - Documents can be imported again """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") self._do_export(use_folder_prefix=True, split_manifest=True) @@ -965,10 +918,7 @@ class TestExportImport( """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") num_content_type_objects = ContentType.objects.count() num_permission_objects = Permission.objects.count() @@ -1005,10 +955,7 @@ class TestExportImport( def test_exporter_with_auditlog_disabled(self) -> None: shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") with override_settings( AUDIT_LOG_ENABLED=False, @@ -1028,10 +975,7 @@ class TestExportImport( survive the round-trip with deleted_at preserved """ shutil.rmtree(Path(self.dirs.media_dir) / "documents") - shutil.copytree( - Path(__file__).parent / "samples" / "documents", - Path(self.dirs.media_dir) / "documents", - ) + install_document_samples(Path(self.dirs.media_dir) / "documents") # d1 has self.note and self.cfi1 attached via setUp self.d1.delete() @@ -1075,10 +1019,7 @@ class TestExportImport( """ shutil.rmtree(self.dirs.media_dir / "documents") - shutil.copytree( - self.SAMPLE_DIR / "documents", - self.dirs.media_dir / "documents", - ) + install_document_samples(self.dirs.media_dir / "documents") _ = self._do_export(data_only=True) diff --git a/src/documents/tests/test_management_thumbnails.py b/src/documents/tests/test_management_thumbnails.py index 4da0caf5a..595aedc64 100644 --- a/src/documents/tests/test_management_thumbnails.py +++ b/src/documents/tests/test_management_thumbnails.py @@ -11,6 +11,7 @@ from documents.models import Document from documents.parsers import get_default_thumbnail from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin +from paperless_testing.samples import SIMPLE_DIGITAL_PDF @pytest.mark.management @@ -24,7 +25,7 @@ class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase): filename="test.pdf", ) shutil.copy( - Path(__file__).parent / "samples" / "simple.pdf", + SIMPLE_DIGITAL_PDF, self.d1.source_path, ) @@ -36,7 +37,7 @@ class TestMakeThumbnails(DirectoriesMixin, FileSystemAssertsMixin, TestCase): filename="test2.pdf", ) shutil.copy( - Path(__file__).parent / "samples" / "simple.pdf", + SIMPLE_DIGITAL_PDF, self.d2.source_path, ) diff --git a/src/documents/tests/test_pdf_ops.py b/src/documents/tests/test_pdf_ops.py index eb4cf7005..632ebc927 100644 --- a/src/documents/tests/test_pdf_ops.py +++ b/src/documents/tests/test_pdf_ops.py @@ -15,10 +15,11 @@ import pytest from documents import pdf_ops from documents.pdf_ops import PageSpec +from paperless_testing.samples import MULTI_PAGE_DIGITAL_PDF SRC_ROOT = Path(__file__).parents[2] SAMPLES = Path(__file__).parent / "samples" -THREE_PAGES = SAMPLES / "documents" / "originals" / "0000002.pdf" +THREE_PAGES = MULTI_PAGE_DIGITAL_PDF TWELVE_PAGES = SAMPLES / "barcodes" / "split-by-asn-2.pdf" ENCRYPTED = SAMPLES / "password-is-test.pdf" SIGNED = SRC_ROOT / "paperless" / "tests" / "samples" / "tesseract" / "signed.pdf" diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index 50d16233b..a5def0944 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -21,6 +21,7 @@ from documents.tests.helpers import dummy_preprocess from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin from paperless_testing.factories import DocumentFactory +from paperless_testing.samples import SIMPLE_DIGITAL_PDF @pytest.mark.django_db @@ -229,20 +230,12 @@ class TestUpdateContent(DirectoriesMixin, TestCase): """ sample1 = self.dirs.scratch_dir / "sample.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, sample1, ) sample1_archive = self.dirs.archive_dir / "sample_archive.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, sample1_archive, ) doc = Document.objects.create( @@ -270,11 +263,7 @@ class TestUpdateContent(DirectoriesMixin, TestCase): """ sample1 = self.dirs.scratch_dir / "sample.pdf" shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", + SIMPLE_DIGITAL_PDF, sample1, ) doc = Document.objects.create( @@ -290,14 +279,7 @@ class TestUpdateContent(DirectoriesMixin, TestCase): def _create_root_with_version(self) -> tuple[Document, Document]: sample1 = self.dirs.scratch_dir / "sample.pdf" - shutil.copy( - Path(__file__).parent - / "samples" - / "documents" - / "originals" - / "0000001.pdf", - sample1, - ) + shutil.copy(SIMPLE_DIGITAL_PDF, sample1) root = DocumentFactory(content="root content", mime_type="application/pdf") version = DocumentFactory( content="my document", diff --git a/src/documents/tests/test_workflows.py b/src/documents/tests/test_workflows.py index 506fa6872..820882b49 100644 --- a/src/documents/tests/test_workflows.py +++ b/src/documents/tests/test_workflows.py @@ -178,7 +178,7 @@ class TestWorkflows( self.assertEqual(action.__str__(), "WorkflowAction 1") test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -290,7 +290,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -409,7 +409,7 @@ class TestWorkflows( w2.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -478,7 +478,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -531,7 +531,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -608,7 +608,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -687,7 +687,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -765,7 +765,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -876,7 +876,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -928,7 +928,7 @@ class TestWorkflows( generated = generate_unique_filename(doc) destination = (settings.ORIGINALS_DIR / generated).resolve() create_source_path_directory(destination) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination) + shutil.copy(self.SIMPLE_PDF, destination) Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix()) doc.refresh_from_db() @@ -2067,7 +2067,7 @@ class TestWorkflows( superuser = UserFactory(username="superuser", superuser=True) self.client.force_authenticate(user=superuser) test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) tasks.consume_file( @@ -3053,7 +3053,7 @@ class TestWorkflows( generated = generate_unique_filename(doc) destination = (settings.ORIGINALS_DIR / generated).resolve() create_source_path_directory(destination) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination) + shutil.copy(self.SIMPLE_PDF, destination) Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix()) doc.refresh_from_db() doc.tags.set([self.t1, self.t2]) @@ -3117,7 +3117,7 @@ class TestWorkflows( generated = generate_unique_filename(doc) destination = (settings.ORIGINALS_DIR / generated).resolve() create_source_path_directory(destination) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination) + shutil.copy(self.SIMPLE_PDF, destination) Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix()) doc.refresh_from_db() doc.tags.set([self.t1]) @@ -3266,7 +3266,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -3390,7 +3390,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -3540,7 +3540,7 @@ class TestWorkflows( workflow.actions.set([assignment_action, email_action]) temp_working_copy = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "working-copy.pdf", ) @@ -3640,7 +3640,7 @@ class TestWorkflows( # move the file test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -3748,7 +3748,7 @@ class TestWorkflows( generated = generate_unique_filename(doc) destination = (settings.ORIGINALS_DIR / generated).resolve() create_source_path_directory(destination) - shutil.copy(self.SAMPLE_DIR / "simple.pdf", destination) + shutil.copy(self.SIMPLE_PDF, destination) Document.objects.filter(pk=doc.pk).update(filename=generated.as_posix()) run_workflows(WorkflowTrigger.WorkflowTriggerType.DOCUMENT_UPDATED, doc) @@ -3959,7 +3959,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -4080,7 +4080,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -4431,7 +4431,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -4879,7 +4879,7 @@ class TestWorkflows( w.save() test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) @@ -5071,7 +5071,7 @@ class TestWorkflows( # Create a test file to be consumed test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) test_file_path = Path(test_file) @@ -5135,7 +5135,7 @@ class TestWorkflows( # Create a test file to be consumed test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple2.pdf", ) test_file_path = Path(test_file) @@ -5639,7 +5639,7 @@ class TestDateWorkflowLocalization( ) test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, tmp_path / "simple.pdf", ) @@ -5706,7 +5706,7 @@ class TestRemoteOCRWorkflowAction(DirectoriesMixin, SampleDirMixin, APITestCase) self._make_workflow(WorkflowTrigger.WorkflowTriggerType.CONSUMPTION) test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) overrides = DocumentMetadataOverrides() @@ -5924,7 +5924,7 @@ class TestApplyAISuggestionsWorkflowAction( ) test_file = shutil.copy( - self.SAMPLE_DIR / "simple.pdf", + self.SIMPLE_PDF, self.dirs.scratch_dir / "simple.pdf", ) diff --git a/src/documents/tests/utils.py b/src/documents/tests/utils.py index 63e907855..18769dfc9 100644 --- a/src/documents/tests/utils.py +++ b/src/documents/tests/utils.py @@ -11,6 +11,7 @@ from documents.data_models import ConsumableDocument from documents.data_models import DocumentMetadataOverrides from documents.data_models import DocumentSource from paperless_testing.fakes.progress import FakeProgressManager +from paperless_testing.samples import SIMPLE_DIGITAL_PDF class ConsumeTaskMixin: @@ -53,6 +54,8 @@ class SampleDirMixin: BARCODE_SAMPLE_DIR = SAMPLE_DIR / "barcodes" + SIMPLE_PDF = SIMPLE_DIGITAL_PDF + class GetConsumerMixin: @contextmanager diff --git a/src/paperless/tests/parsers/conftest.py b/src/paperless/tests/parsers/conftest.py index 343e9ea8a..5e834e959 100644 --- a/src/paperless/tests/parsers/conftest.py +++ b/src/paperless/tests/parsers/conftest.py @@ -432,30 +432,6 @@ def tesseract_samples_dir(parser_samples_dir: Path) -> Path: return parser_samples_dir / "tesseract" -@pytest.fixture(scope="session") -def multi_page_images_pdf_file(tesseract_samples_dir: Path) -> Path: - """Path to a multi-page PDF with images. - - Returns - ------- - Path - Absolute path to ``tesseract/multi-page-images.pdf``. - """ - return tesseract_samples_dir / "multi-page-images.pdf" - - -@pytest.fixture(scope="session") -def simple_digital_pdf_file(tesseract_samples_dir: Path) -> Path: - """Path to a simple digital PDF sample file. - - Returns - ------- - Path - Absolute path to ``tesseract/simple-digital.pdf``. - """ - return tesseract_samples_dir / "simple-digital.pdf" - - @pytest.fixture(scope="session") def simple_no_dpi_png_file(tesseract_samples_dir: Path) -> Path: """Path to a simple PNG without DPI information. @@ -480,6 +456,18 @@ def simple_png_file(tesseract_samples_dir: Path) -> Path: return tesseract_samples_dir / "simple.png" +@pytest.fixture(scope="session") +def rotated_pdf_file(tesseract_samples_dir: Path) -> Path: + """Path to a landscape (rotated) PDF sample file. + + Returns + ------- + Path + Absolute path to ``tesseract/rotated.pdf``. + """ + return tesseract_samples_dir / "rotated.pdf" + + # ------------------------------------------------------------------ # Tesseract parser instance and settings helpers # ------------------------------------------------------------------ diff --git a/src/paperless/tests/parsers/test_tesseract_parser.py b/src/paperless/tests/parsers/test_tesseract_parser.py index f057ad086..a44d23bec 100644 --- a/src/paperless/tests/parsers/test_tesseract_parser.py +++ b/src/paperless/tests/parsers/test_tesseract_parser.py @@ -161,11 +161,11 @@ class TestGetPageCount: def test_single_page_pdf( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: assert ( tesseract_parser.get_page_count( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", ) == 1 @@ -188,7 +188,7 @@ class TestGetPageCount: self, mocker: MockerFixture, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, caplog, ) -> None: """ @@ -204,7 +204,7 @@ class TestGetPageCount: with caplog.at_level(logging.WARNING): page_count = tesseract_parser.get_page_count( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", ) assert page_count is None @@ -273,26 +273,26 @@ class TestGetThumbnail: def test_thumbnail_is_file( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: thumb = tesseract_parser.get_thumbnail( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", ) assert thumb.is_file() @pytest.mark.parametrize( - ("filename", "expected_height"), + ("sample_fixture", "expected_height"), [ - pytest.param("simple-digital.pdf", 647, id="portrait-letter"), - pytest.param("rotated.pdf", 386, id="landscape"), + pytest.param("simple_digital_pdf_file", 647, id="portrait-letter"), + pytest.param("rotated_pdf_file", 386, id="landscape"), ], ) def test_thumbnail_is_correct_format_and_size( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, - filename: str, + request: pytest.FixtureRequest, + sample_fixture: str, expected_height: int, ) -> None: """ @@ -304,7 +304,7 @@ class TestGetThumbnail: - A 500px wide WebP keeping the page's aspect ratio """ thumb = tesseract_parser.get_thumbnail( - tesseract_samples_dir / filename, + request.getfixturevalue(sample_fixture), "application/pdf", ) with Image.open(thumb) as im: @@ -316,7 +316,7 @@ class TestGetThumbnail: self, mocker: MockerFixture, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -326,7 +326,7 @@ class TestGetThumbnail: THEN: - The PDF is repaired with qpdf and a real thumbnail is rendered """ - original = tesseract_samples_dir / "simple-digital.pdf" + original = simple_digital_pdf_file def _fail_on_original(in_path: Path, out_path: Path, **kwargs) -> None: if in_path == original: @@ -368,11 +368,11 @@ class TestExtractText: def test_extract_text_from_digital_pdf( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: text = tesseract_parser.extract_text( None, - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, ) assert text is not None assert "This is a test document." in text.strip() @@ -387,7 +387,7 @@ class TestParsePdf: def test_simple_digital_creates_archive( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -401,7 +401,7 @@ class TestParsePdf: - Text is extracted """ tesseract_parser.parse( - tesseract_samples_dir / "multi-page-digital.pdf", + multi_page_digital_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -416,10 +416,10 @@ class TestParsePdf: def test_with_form_default( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + with_form_pdf_file: Path, ) -> None: tesseract_parser.parse( - tesseract_samples_dir / "with-form.pdf", + with_form_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -432,11 +432,11 @@ class TestParsePdf: def test_with_form_redo_no_archive_when_not_requested( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + with_form_pdf_file: Path, ) -> None: tesseract_parser.settings.mode = ModeChoices.REDO tesseract_parser.parse( - tesseract_samples_dir / "with-form.pdf", + with_form_pdf_file, "application/pdf", produce_archive=False, ) @@ -449,11 +449,11 @@ class TestParsePdf: def test_with_form_force( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + with_form_pdf_file: Path, ) -> None: tesseract_parser.settings.mode = ModeChoices.FORCE tesseract_parser.parse( - tesseract_samples_dir / "with-form.pdf", + with_form_pdf_file, "application/pdf", ) assert_ordered_substrings( @@ -494,7 +494,7 @@ class TestParsePdf: self, mocker: MockerFixture, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: mocker.patch( "ocrmypdf.ocr", @@ -502,7 +502,7 @@ class TestParsePdf: ) with pytest.raises(ParseError): tesseract_parser.parse( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", ) @@ -578,10 +578,10 @@ class TestParseMultiPage: def test_multi_page_digital( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_digital_pdf_file: Path, ) -> None: tesseract_parser.parse( - tesseract_samples_dir / "multi-page-digital.pdf", + multi_page_digital_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -605,12 +605,12 @@ class TestParseMultiPage: self, mode: str, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_digital_pdf_file: Path, ) -> None: tesseract_parser.settings.pages = 2 tesseract_parser.settings.mode = mode tesseract_parser.parse( - tesseract_samples_dir / "multi-page-digital.pdf", + multi_page_digital_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -624,11 +624,11 @@ class TestParseMultiPage: def test_multi_page_images_skip( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_images_pdf_file: Path, ) -> None: tesseract_parser.settings.mode = ModeChoices.AUTO tesseract_parser.parse( - tesseract_samples_dir / "multi-page-images.pdf", + multi_page_images_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -642,7 +642,7 @@ class TestParseMultiPage: def test_multi_page_images_redo_pages_2( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_images_pdf_file: Path, ) -> None: """ GIVEN: @@ -657,7 +657,7 @@ class TestParseMultiPage: tesseract_parser.settings.pages = 2 tesseract_parser.settings.mode = ModeChoices.REDO tesseract_parser.parse( - tesseract_samples_dir / "multi-page-images.pdf", + multi_page_images_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -670,7 +670,7 @@ class TestParseMultiPage: def test_multi_page_images_force_page_1( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_images_pdf_file: Path, ) -> None: """ GIVEN: @@ -685,7 +685,7 @@ class TestParseMultiPage: tesseract_parser.settings.pages = 1 tesseract_parser.settings.mode = ModeChoices.FORCE tesseract_parser.parse( - tesseract_samples_dir / "multi-page-images.pdf", + multi_page_images_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -781,7 +781,7 @@ class TestSkipArchive: def test_skip_noarchive_with_text_layer( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -795,7 +795,7 @@ class TestSkipArchive: """ tesseract_parser.settings.mode = ModeChoices.AUTO tesseract_parser.parse( - tesseract_samples_dir / "multi-page-digital.pdf", + multi_page_digital_pdf_file, "application/pdf", produce_archive=False, ) @@ -810,7 +810,7 @@ class TestSkipArchive: def test_skip_noarchive_image_only_creates_archive( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + multi_page_images_pdf_file: Path, ) -> None: """ GIVEN: @@ -823,7 +823,7 @@ class TestSkipArchive: """ tesseract_parser.settings.mode = ModeChoices.AUTO tesseract_parser.parse( - tesseract_samples_dir / "multi-page-images.pdf", + multi_page_images_pdf_file, "application/pdf", ) assert tesseract_parser.archive_path is not None @@ -835,29 +835,29 @@ class TestSkipArchive: ) @pytest.mark.parametrize( - ("produce_archive", "filename", "expect_archive"), + ("produce_archive", "sample_fixture", "expect_archive"), [ pytest.param( True, - "multi-page-digital.pdf", + "multi_page_digital_pdf_file", True, id="produce-archive-with-text", ), pytest.param( True, - "multi-page-images.pdf", + "multi_page_images_pdf_file", True, id="produce-archive-no-text", ), pytest.param( False, - "multi-page-digital.pdf", + "multi_page_digital_pdf_file", False, id="no-archive-with-text-layer", ), pytest.param( False, - "multi-page-images.pdf", + "multi_page_images_pdf_file", False, id="no-archive-no-text-layer", ), @@ -866,10 +866,10 @@ class TestSkipArchive: def test_produce_archive_flag( self, produce_archive: bool, # noqa: FBT001 - filename: str, + sample_fixture: str, expect_archive: bool, # noqa: FBT001 tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + request: pytest.FixtureRequest, ) -> None: """ GIVEN: @@ -882,8 +882,9 @@ class TestSkipArchive: - Text is always extracted """ tesseract_parser.settings.mode = ModeChoices.AUTO + sample = request.getfixturevalue(sample_fixture) tesseract_parser.parse( - tesseract_samples_dir / filename, + sample, "application/pdf", produce_archive=produce_archive, ) @@ -900,7 +901,7 @@ class TestSkipArchive: self, mocker: MockerFixture, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -916,7 +917,7 @@ class TestSkipArchive: tesseract_parser.settings.mode = ModeChoices.AUTO mock_ocr = mocker.patch("ocrmypdf.ocr") tesseract_parser.parse( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", produce_archive=False, ) @@ -955,7 +956,7 @@ class TestSkipArchive: def test_tagged_pdf_produces_pdfa_archive_without_ocr( self, tesseract_parser: RasterisedDocumentParser, - tesseract_samples_dir: Path, + simple_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -970,7 +971,7 @@ class TestSkipArchive: """ tesseract_parser.settings.mode = ModeChoices.AUTO tesseract_parser.parse( - tesseract_samples_dir / "simple-digital.pdf", + simple_digital_pdf_file, "application/pdf", produce_archive=True, ) diff --git a/src/paperless/tests/samples/mail/sample.html b/src/paperless/tests/samples/mail/sample.html deleted file mode 100644 index 9d535dba6..000000000 --- a/src/paperless/tests/samples/mail/sample.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - -

Some Text

-

- Has to be rewritten to work.. - This image should not be shown. -

- -

and an embedded image.
-

-

Paragraph unchanged.

- - - diff --git a/src/paperless/tests/samples/mail/sample.html.pdf b/src/paperless/tests/samples/mail/sample.html.pdf deleted file mode 100644 index 24c2dbf87373267b9c473712406a131a9d71dc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30170 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 R1mu8nfxu`qG!lxE{|oGNHG%*D diff --git a/src/paperless/tests/samples/mail/sample.html.pdf.webp b/src/paperless/tests/samples/mail/sample.html.pdf.webp deleted file mode 100644 index 534157660b25e9bf210b2ab898aff969aa8a655b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2830 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

Zi(r5V-(`20+(2k8mSThh^QiKciIQP_>gxV z@poUl`0Jb=1THp=1PrukTTEZ_z|vLAS04C^!*ekzTq`T9sH65=gpcoY!P$54_`_7TePE&cATRz-&16A!LnW(c(ob?_2qT z-Jg5F3-{}GI<3KJ-@pC`mtA>TqtO`ZoA#!||MJ;e?eyXoE!buLvj?+55z>3#=?Yv! z3lX8k51&XgVJ2coA4Q>wtfUXidO9%?S*ukz87>^3M~zAFk z(m$#LF3@*J+w-T-`^L%tx#zZfg-Y*TegB(3@WuyM-9LbVg&+I;p)dN2cwCcUK8*k( zwKjVP?^VB8=Lgig{G@*V^ev_J&IP5)14#N#O%X@{s#^Hs!|(jy3IFu3)AGUgim^WF z(+aOY^!0mh|GdsvM;qDsm!E&%ie-V}uaA7ot6y|TS(a5*nVA?|mO~vhjT#E1?yL56 zO94bDJW5>+^`1YC#`T$5dQ1}wHo-y&-F7)Vwq}@Pzg+yAqd#-({DZbX^n*t%sg@0o zuJ+zvcl-4_9=^-0!{+Y&wio<<#gcL?RHe7*X(3EJ6xaElp3scObsuTzwCbwiX|eUk zmkBqfo=@woI|wpSpcotN?6uwQXZ`c%TwCs3bY}yNB5MqnYd-(A&ka|rI^Fi04}Iga zW^P-JcvrYISH(0JSr63qfXP+iw*=0|lb(=5-Y^$lqyRj7`A z*ZW2u8Cmp)MUA3y`ne0Q{>4=;*ZuZb@TOP3x$Krs(;#Q85~nzy^Gw+j+cza^KIsN|IQe`>qw+f-u}@^}~4`kcni1Q!wM z$t5BZU;tpC(E=MqzQguA{OI~?ulVg%oxCmGaQMDQ?6bq(e#EPT*KQ_-)ElVCwE)`G zY-9G>kW{Ey2ojt+h$>(V&|=#iw*Ttq&vA3K7%b4{d;j(rr3jTUZ$8tam*V1~Hce1u z<39f-@(lp4jx`jj%K|xP``P_-`lnAD7+E&_moIdQ_gw zGdJ8FzVxC?*$&yLzWYt@n$wu6rc(F0(|-8z>7Gs6p42`*Ab#kX2*s(g3I{CMf1uU( zta;nLYQd|zWv6gCR7EJT^qC`YPcMOgifsM$(d3qDmfrhlLZt+A6v40`X`xwYCMKZ9 zvRDwrDC$5rVMF|;Ya544+DMklIi`)JCZVJkrv-DQ$;rC^sTKuKiJWJ%^p}J}`o`2< vRTGie)&~TVHdX*4X(v~jb>Cz;%S8MCkFX6m|F&0>00000NkvXXu0mjfa^1*h diff --git a/src/paperless/tests/samples/tesseract/no-text-alpha.png b/src/paperless/tests/samples/tesseract/no-text-alpha.png deleted file mode 100644 index e78b22bfbe53be5a9046bbfb32fef7e98abb9be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32595 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 LNkvXXu0mjfD4>h= diff --git a/src/paperless/tests/test_parser_utils.py b/src/paperless/tests/test_parser_utils.py index 7bae1f78d..ed20a024b 100644 --- a/src/paperless/tests/test_parser_utils.py +++ b/src/paperless/tests/test_parser_utils.py @@ -18,8 +18,6 @@ from paperless.parsers.utils import read_file_handle_unicode_errors if TYPE_CHECKING: from pytest_mock import MockerFixture -SAMPLES = Path(__file__).parent / "samples" / "tesseract" - class TestReadFileHandleUnicodeErrors: def test_plain_utf8(self, tmp_path: Path) -> None: @@ -57,11 +55,11 @@ class TestReadFileHandleUnicodeErrors: class TestIsTaggedPdf: - def test_tagged_pdf_returns_true(self) -> None: - assert is_tagged_pdf(SAMPLES / "simple-digital.pdf") is True + def test_tagged_pdf_returns_true(self, simple_digital_pdf_file: Path) -> None: + assert is_tagged_pdf(simple_digital_pdf_file) is True - def test_untagged_pdf_returns_false(self) -> None: - assert is_tagged_pdf(SAMPLES / "multi-page-images.pdf") is False + def test_untagged_pdf_returns_false(self, multi_page_images_pdf_file: Path) -> None: + assert is_tagged_pdf(multi_page_images_pdf_file) is False def test_nonexistent_path_returns_false(self) -> None: assert is_tagged_pdf(Path("/nonexistent/file.pdf")) is False @@ -95,7 +93,7 @@ class TestGetPdfFirstPageSizePoints: pdf.save(path) return path - def test_letter_sample(self) -> None: + def test_letter_sample(self, simple_digital_pdf_file: Path) -> None: """ GIVEN: - A US Letter sample PDF with no CropBox and no rotation @@ -104,7 +102,7 @@ class TestGetPdfFirstPageSizePoints: THEN: - The MediaBox size in points is returned """ - assert get_pdf_first_page_size_points(SAMPLES / "simple-digital.pdf") == ( + assert get_pdf_first_page_size_points(simple_digital_pdf_file) == ( 612.0, 792.0, ) @@ -199,6 +197,7 @@ class TestGetPdfFirstPageSizePoints: def test_pdfinfo_not_installed_returns_none( self, mocker: MockerFixture, + simple_digital_pdf_file: Path, ) -> None: """ GIVEN: @@ -209,7 +208,7 @@ class TestGetPdfFirstPageSizePoints: - None is returned and nothing is raised """ mocker.patch("subprocess.run", side_effect=FileNotFoundError("pdfinfo")) - assert get_pdf_first_page_size_points(SAMPLES / "simple-digital.pdf") is None + assert get_pdf_first_page_size_points(simple_digital_pdf_file) is None def test_degenerate_box_returns_none(self, tmp_path: Path) -> None: """ @@ -251,7 +250,7 @@ class TestGetPdfFirstPageSizePoints: bad.write_bytes(b"not a pdf") assert get_pdf_first_page_size_points(bad) is None - def test_encrypted_pdf_returns_none(self) -> None: + def test_encrypted_pdf_returns_none(self, parser_samples_dir: Path) -> None: """ GIVEN: - A password protected PDF @@ -260,7 +259,8 @@ class TestGetPdfFirstPageSizePoints: THEN: - None is returned and nothing is raised """ - assert get_pdf_first_page_size_points(SAMPLES / "encrypted.pdf") is None + encrypted = parser_samples_dir / "tesseract" / "encrypted.pdf" + assert get_pdf_first_page_size_points(encrypted) is None class TestPostProcessText: diff --git a/src/paperless/tests/samples/tesseract/multi-page-digital.pdf b/src/paperless_testing/sample_files/multi-page-digital.pdf similarity index 100% rename from src/paperless/tests/samples/tesseract/multi-page-digital.pdf rename to src/paperless_testing/sample_files/multi-page-digital.pdf diff --git a/src/paperless/tests/samples/tesseract/multi-page-images.pdf b/src/paperless_testing/sample_files/multi-page-images.pdf similarity index 100% rename from src/paperless/tests/samples/tesseract/multi-page-images.pdf rename to src/paperless_testing/sample_files/multi-page-images.pdf diff --git a/src/paperless/tests/samples/tesseract/simple-digital.pdf b/src/paperless_testing/sample_files/simple-digital.pdf similarity index 100% rename from src/paperless/tests/samples/tesseract/simple-digital.pdf rename to src/paperless_testing/sample_files/simple-digital.pdf diff --git a/src/documents/tests/samples/documents/thumbnails/0000001.webp b/src/paperless_testing/sample_files/thumbnail.webp similarity index 100% rename from src/documents/tests/samples/documents/thumbnails/0000001.webp rename to src/paperless_testing/sample_files/thumbnail.webp diff --git a/src/paperless/tests/samples/tesseract/with-form.pdf b/src/paperless_testing/sample_files/with-form.pdf similarity index 100% rename from src/paperless/tests/samples/tesseract/with-form.pdf rename to src/paperless_testing/sample_files/with-form.pdf diff --git a/src/paperless_testing/samples.py b/src/paperless_testing/samples.py new file mode 100644 index 000000000..2e823041a --- /dev/null +++ b/src/paperless_testing/samples.py @@ -0,0 +1,48 @@ +"""Test sample files shared across tests. + +A sample used by a single app stays in that app's ``tests/samples`` tree. +Samples needed by more than one app, or stored under more than one name, live +here exactly once. +""" + +import shutil +from pathlib import Path + +SHARED_SAMPLES_DIR = (Path(__file__).parent / "sample_files").resolve() + +SIMPLE_DIGITAL_PDF = SHARED_SAMPLES_DIR / "simple-digital.pdf" +MULTI_PAGE_DIGITAL_PDF = SHARED_SAMPLES_DIR / "multi-page-digital.pdf" +WITH_FORM_PDF = SHARED_SAMPLES_DIR / "with-form.pdf" +MULTI_PAGE_IMAGES_PDF = SHARED_SAMPLES_DIR / "multi-page-images.pdf" +THUMBNAIL_WEBP = SHARED_SAMPLES_DIR / "thumbnail.webp" + +# The fake media tree under documents/tests/samples/documents keeps only the +# files unique to it. The files that duplicate a shared sample are laid back +# down under their historical opaque names (DB rows and exporter manifests +# refer to them) by install_document_samples(). +_DOCUMENT_SAMPLES_DIR = ( + Path(__file__).parent.parent / "documents" / "tests" / "samples" / "documents" +).resolve() + +_SHARED_AS_MEDIA = ( + ("originals/0000001.pdf", SIMPLE_DIGITAL_PDF), + ("originals/0000002.pdf", MULTI_PAGE_DIGITAL_PDF), + ("originals/0000003.pdf", WITH_FORM_PDF), + ("archive/0000001.pdf", MULTI_PAGE_IMAGES_PDF), + ("thumbnails/0000001.webp", THUMBNAIL_WEBP), + ("thumbnails/0000002.webp", THUMBNAIL_WEBP), + ("thumbnails/0000003.webp", THUMBNAIL_WEBP), + ("thumbnails/0000004.webp", THUMBNAIL_WEBP), +) + + +def install_document_samples(dest: Path) -> None: + """Populate ``dest`` with the full fake media tree. + + Replaces ``shutil.copytree(/documents, dest)`` in tests. + """ + shutil.copytree(_DOCUMENT_SAMPLES_DIR, dest, dirs_exist_ok=True) + for relpath, source in _SHARED_AS_MEDIA: + target = dest / relpath + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copy2(source, target)