From 383b8b0c375c3b1d6e0971af3dfa64f196e7b0a3 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Mon, 15 Jun 2026 10:48:17 +0000 Subject: [PATCH] =?UTF-8?q?SharePoint=20renamer=20build=5Fcanonical=5Ffile?= =?UTF-8?q?name=20behaviour=20verified=20by=20tests=20=F0=9F=9F=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pytest.ini | 2 + scripts/tests/__init__.py | 0 .../tests/test_build_canonical_filename.py | 106 ++++++++++++++++++ 3 files changed, 108 insertions(+) create mode 100644 scripts/tests/__init__.py create mode 100644 scripts/tests/test_build_canonical_filename.py diff --git a/pytest.ini b/pytest.ini index 2bcd6178..a6eba3be 100644 --- a/pytest.ini +++ b/pytest.ini @@ -25,5 +25,7 @@ testpaths = etl/epc_clean/tests etl/hubspot/tests etl/spatial/tests + scripts/tests + ; tests/ markers = integration: mark a test as an integration test diff --git a/scripts/tests/__init__.py b/scripts/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/scripts/tests/test_build_canonical_filename.py b/scripts/tests/test_build_canonical_filename.py new file mode 100644 index 00000000..3890477c --- /dev/null +++ b/scripts/tests/test_build_canonical_filename.py @@ -0,0 +1,106 @@ +# scripts/tests/test_build_canonical_filename.py +from scripts.rename_sharepoint_files import build_canonical_filename + +UPRN = "10093456789" +ADDRESS = "1 High Street, Anytown" +POSTCODE = "SW1A 1AA" +STREET = "1 High Street" + + +def test_already_renamed_returns_none() -> None: + # Arrange + original = f"{UPRN}_High Street SW1A 1AA_EPC Report.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result is None + + +def test_address_postcode_prefix_stripped() -> None: + # Arrange + original = f"{ADDRESS} {POSTCODE} - EPC Report.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_EPC Report.pdf" + + +def test_address_only_prefix_stripped() -> None: + # Arrange + original = f"{ADDRESS} - EPC Report.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_EPC Report.pdf" + + +def test_street_postcode_prefix_stripped() -> None: + # Arrange + original = f"{STREET} {POSTCODE} - EPC Report.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_EPC Report.pdf" + + +def test_street_only_prefix_stripped() -> None: + # Arrange + original = f"{STREET} - EPC Report.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_EPC Report.pdf" + + +def test_dash_separator_removed_after_prefix_strip() -> None: + # Arrange – " - " separator between prefix and doc name + original = f"{STREET} {POSTCODE} - Floor Plan.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_Floor Plan.pdf" + + +def test_underscore_separator_removed_after_prefix_strip() -> None: + # Arrange – " _ " separator between prefix and doc name + original = f"{STREET} {POSTCODE} _ Floor Plan.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_Floor Plan.pdf" + + +def test_no_recognised_prefix_preserves_stem() -> None: + # Arrange + original = "Completely Different Name.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}_Completely Different Name.pdf" + + +def test_no_doc_name_after_strip_omits_trailing_separator() -> None: + # Arrange – stem is exactly the address prefix with no trailing doc name + original = f"{STREET} {POSTCODE}.pdf" + + # Act + result = build_canonical_filename(UPRN, ADDRESS, POSTCODE, original) + + # Assert + assert result == f"{UPRN}_{STREET} {POSTCODE}.pdf"