from pathlib import Path from services import pchome_mapping_backlog_service as compatibility_facade from services.pchome_mapping_backlog import contracts, evidence, policies ROOT = Path(__file__).resolve().parents[1] def test_policy_registry_is_extracted_without_changing_legacy_exports(): assert len(policies.__all__) == 96 assert compatibility_facade.BACKLOG_POLICY == policies.BACKLOG_POLICY assert ( compatibility_facade.AUTO_POLICY_DB_APPLY_CONTROLLED_DRY_RUN_PACKAGE_POLICY == policies.AUTO_POLICY_DB_APPLY_CONTROLLED_DRY_RUN_PACKAGE_POLICY ) assert compatibility_facade.PCHOME_FETCH_ALLOWED_DOMAIN == "24h.pchome.com.tw" def test_evidence_and_contract_functions_keep_legacy_import_identity(): assert ( compatibility_facade.parse_pchome_product_page_evidence_html is evidence.parse_pchome_product_page_evidence_html ) assert compatibility_facade.parse_unit_package_basis is evidence.parse_unit_package_basis assert ( compatibility_facade._ai_exception_compatibility_fields is contracts._ai_exception_compatibility_fields ) def test_extracted_unit_parser_preserves_ai_exception_and_no_write_contract(): parsed = compatibility_facade.parse_unit_package_basis("理膚寶水 B5 40ml x2 超值組") assert parsed["estimated_total_quantity"] == 80 assert parsed["ai_exception_required"] is True assert parsed["primary_human_gate_count"] == 0 assert parsed["writes_database"] is False assert parsed["fetches_external_sites"] is False def test_legacy_facade_is_smaller_after_first_p0_extraction(): facade = ROOT / "services/pchome_mapping_backlog_service.py" assert sum(1 for _ in facade.open(encoding="utf-8")) < 44_300