From e906c8fc98d056b514baccff53391d4b39de7bfe Mon Sep 17 00:00:00 2001 From: Khalim Conn-Kowlessar Date: Wed, 8 Jul 2026 09:15:44 +0000 Subject: [PATCH] =?UTF-8?q?Scope=20latest-per-Document-Type=20per=20proper?= =?UTF-8?q?ty,=20each=20in=20its=20own=20folder=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Pins behavior delivered with the tracer slice (the group key is (landlord_property_id, document_type)) — no red phase; discriminating: a global-by-type dedupe would drop one property's file. Co-Authored-By: Claude Fable 5 --- .../bulk_document_download/test_package_plan.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tests/domain/bulk_document_download/test_package_plan.py b/tests/domain/bulk_document_download/test_package_plan.py index ce9c0541a..4bcddc83c 100644 --- a/tests/domain/bulk_document_download/test_package_plan.py +++ b/tests/domain/bulk_document_download/test_package_plan.py @@ -76,3 +76,19 @@ def test_packaged_filename_is_the_document_type_with_the_original_extension() -> # Assert assert plan.entries[0].zip_path == "12 Oak Street (LP1)/photo_pack.zip" + + +def test_latest_per_type_is_scoped_per_property_each_gets_its_own_folder() -> None: + # Arrange — two DIFFERENT properties, each with a site_note. Latest-per-type + # must not dedupe across properties: both survive, in their own folders. + first = _doc(landlord_property_id="LP1", address="12 Oak Street", s3_key="a.pdf") + second = _doc(landlord_property_id="LP2", address="9 Elm Road", s3_key="b.pdf") + + # Act + plan = plan_download_package([first, second]) + + # Assert + assert {e.zip_path for e in plan.entries} == { + "12 Oak Street (LP1)/site_note.pdf", + "9 Elm Road (LP2)/site_note.pdf", + }