From 5878b8ed97ffabffa819dad59c4bbab36c94ad76 Mon Sep 17 00:00:00 2001 From: Trenton H <797416+stumpylog@users.noreply.github.com> Date: Sat, 3 Oct 2026 15:32:06 -0700 Subject: [PATCH] Chore: Materialise duplicated media-tree samples from the shared copies Co-Authored-By: Claude Sonnet 5.5 --- src/conftest.py | 6 ++ src/documents/tests/conftest.py | 16 ++- .../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/test_api_documents.py | 9 +- src/documents/tests/test_api_email.py | 9 +- src/documents/tests/test_bulk_edit.py | 39 ++----- src/documents/tests/test_consumer.py | 34 ++----- .../tests/test_management_exporter.py | 96 ++++-------------- src/documents/tests/test_sample_files.py | 34 +++++++ src/documents/tests/test_tasks.py | 19 +--- .../sample_files/thumbnail.webp} | Bin src/paperless_testing/samples.py | 33 ++++++ 18 files changed, 127 insertions(+), 168 deletions(-) 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 create mode 100644 src/documents/tests/test_sample_files.py rename src/{documents/tests/samples/documents/thumbnails/0000001.webp => paperless_testing/sample_files/thumbnail.webp} (100%) diff --git a/src/conftest.py b/src/conftest.py index 8cedbcc56..91f5635a2 100644 --- a/src/conftest.py +++ b/src/conftest.py @@ -181,3 +181,9 @@ def with_form_pdf_file() -> Path: 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/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 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 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/test_api_documents.py b/src/documents/tests/test_api_documents.py index 1ecf0a8b9..3df2a2b8a 100644 --- a/src/documents/tests/test_api_documents.py +++ b/src/documents/tests/test_api_documents.py @@ -57,6 +57,7 @@ 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): @@ -2531,13 +2532,7 @@ class TestDocumentApi(DirectoriesMixin, ConsumeTaskMixin, APITestCase): archive_filename="archive.pdf", ) - source_file: Path = ( - Path(__file__).parent - / "samples" - / "documents" - / "thumbnails" - / "0000001.webp" - ) + source_file: Path = THUMBNAIL_WEBP archive_file: Path = SIMPLE_DIGITAL_PDF shutil.copy(source_file, doc.source_path) diff --git a/src/documents/tests/test_api_email.py b/src/documents/tests/test_api_email.py index 0d2dbbbde..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, ) diff --git a/src/documents/tests/test_bulk_edit.py b/src/documents/tests/test_bulk_edit.py index 1b67a320f..73176466b 100644 --- a/src/documents/tests/test_bulk_edit.py +++ b/src/documents/tests/test_bulk_edit.py @@ -24,6 +24,9 @@ from documents.models import Tag from documents.permissions import set_permissions_for_objects from paperless_testing.dirs import DirectoriesMixin 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): @@ -701,47 +704,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( @@ -775,11 +758,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 4b8150b93..28cc4da11 100644 --- a/src/documents/tests/test_consumer.py +++ b/src/documents/tests/test_consumer.py @@ -36,6 +36,8 @@ from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin from paperless_testing.factories import UserFactory from paperless_testing.fakes.progress import FakeProgressManager +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 @@ -113,9 +115,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" @@ -201,33 +201,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 @@ -1604,13 +1590,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_management_exporter.py b/src/documents/tests/test_management_exporter.py index 137744569..f83a7ba31 100644 --- a/src/documents/tests/test_management_exporter.py +++ b/src/documents/tests/test_management_exporter.py @@ -51,6 +51,7 @@ from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin from paperless_testing.dirs import paperless_environment from paperless_testing.permissions import grant_object +from paperless_testing.samples import install_document_samples @pytest.mark.management @@ -196,10 +197,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() @@ -303,10 +301,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}", @@ -315,10 +310,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", @@ -417,10 +409,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") @@ -456,10 +445,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() @@ -486,10 +472,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() @@ -521,10 +504,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") @@ -566,10 +546,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"] @@ -598,10 +575,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"] @@ -637,10 +611,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" @@ -736,10 +707,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 @@ -782,10 +750,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 @@ -830,10 +795,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( - 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) @@ -896,10 +855,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) @@ -926,10 +882,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() @@ -966,10 +919,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, @@ -989,10 +939,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() @@ -1036,10 +983,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_sample_files.py b/src/documents/tests/test_sample_files.py new file mode 100644 index 000000000..44919da30 --- /dev/null +++ b/src/documents/tests/test_sample_files.py @@ -0,0 +1,34 @@ +import hashlib +from pathlib import Path + +from paperless_testing.samples import SIMPLE_DIGITAL_PDF +from paperless_testing.samples import install_document_samples + +EXPECTED_MEDIA_FILES = [ + "originals/0000001.pdf", + "originals/0000002.pdf", + "originals/0000003.pdf", + "originals/0000004.pdf", + "originals/0000005.pdf", + "originals/0000006.pdf", + "archive/0000001.pdf", + "thumbnails/0000001.webp", + "thumbnails/0000002.webp", + "thumbnails/0000003.webp", + "thumbnails/0000004.webp", +] + + +def _sha(path: Path) -> str: + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def test_install_recreates_every_historical_opaque_name(tmp_path: Path) -> None: + install_document_samples(tmp_path) + for relpath in EXPECTED_MEDIA_FILES: + assert (tmp_path / relpath).is_file(), relpath + + +def test_install_uses_the_shared_bytes(tmp_path: Path) -> None: + install_document_samples(tmp_path) + assert _sha(tmp_path / "originals" / "0000001.pdf") == _sha(SIMPLE_DIGITAL_PDF) diff --git a/src/documents/tests/test_tasks.py b/src/documents/tests/test_tasks.py index 247b6a529..9548adade 100644 --- a/src/documents/tests/test_tasks.py +++ b/src/documents/tests/test_tasks.py @@ -20,6 +20,7 @@ from documents.sanity_checker import SanityCheckMessages from documents.tests.helpers import dummy_preprocess from paperless_testing.assertions import FileSystemAssertsMixin from paperless_testing.dirs import DirectoriesMixin +from paperless_testing.samples import SIMPLE_DIGITAL_PDF @pytest.mark.django_db @@ -228,20 +229,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( @@ -269,11 +262,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( 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_testing/samples.py b/src/paperless_testing/samples.py index a34602b53..e73eebb3b 100644 --- a/src/paperless_testing/samples.py +++ b/src/paperless_testing/samples.py @@ -4,6 +4,7 @@ A sample used by a single app stays in that app's ``tests/samples`` tree. Only a file that two or more apps need lives here, exactly once. """ +import shutil from pathlib import Path SHARED_SAMPLES_DIR = (Path(__file__).parent / "sample_files").resolve() @@ -12,3 +13,35 @@ 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)