scrub / tests /test_docx_reinsert_ui_patch.py
solidprivacy-nl
Add tests for DOCX reinsert UI patch
e36915b
Raw
History Blame Contribute Delete
6.04 kB
from pathlib import Path
PATCH_TEXT = Path("fix_streamlit_nested_expanders.py").read_text(encoding="utf-8")
def _slice_between(start_marker: str, end_marker: str) -> str:
start = PATCH_TEXT.index(start_marker)
end = PATCH_TEXT.index(end_marker, start)
return PATCH_TEXT[start:end]
def _docx_reinsert_block() -> str:
return _slice_between("docx_reinsert_ui_block = '''", "'''\n\nreview_summary_block =")
def test_docx_reinsert_helper_is_imported_and_used():
assert "from scrub_key_document_reinsert import reinsert_docx_bytes, reinsert_txt_bytes" in PATCH_TEXT
assert "reinsert_docx_bytes(" in PATCH_TEXT
assert "docx_reinsert_file.getvalue()" in PATCH_TEXT
def test_docx_reinsert_ui_labels_are_present():
for marker in [
"DOCX-bestand terugzetten",
"Upload een DOCX-bestand met placeholders",
"Zet DOCX-bestand lokaal terug",
"DOCX-bestand lokaal teruggezet",
"Download hersteld DOCX-bestand (.docx)",
"Controleverslag DOCX terugzetten",
]:
assert marker in PATCH_TEXT
def test_docx_reinsert_accepts_docx_only_and_requires_key():
docx_block = _docx_reinsert_block()
assert 'type=["docx"]' in docx_block
assert "Laad eerst een geldige Scrub Key" in docx_block
assert "Upload eerst een DOCX-bestand met placeholders" in docx_block
assert "active_docx_reinsert_scrub_key" in docx_block
assert 'st.session_state.get("active_scrub_key", {})' in docx_block
def test_docx_reinsert_is_injected_inside_reinsert_mode_only():
mode_start = PATCH_TEXT.index("two_mode_selection_block = '''")
mode_end = PATCH_TEXT.index("mode_marker =", mode_start)
mode_block = PATCH_TEXT[mode_start:mode_end]
mode_index = mode_block.index('if solidprivacy_work_mode == "Originele waarden terugzetten":')
docx_injection_index = mode_block.index("scrub_key_import_ui_block + reinsert_ui_block + txt_reinsert_ui_block + docx_reinsert_ui_block")
else_index = mode_block.index("'''else:\n'''")
assert mode_index < docx_injection_index < else_index
review_summary_start = PATCH_TEXT.index("review_summary_block =")
review_summary_end = PATCH_TEXT.index("text = replace_once(\n text,\n ''' st.subheader", review_summary_start)
review_summary_block = PATCH_TEXT[review_summary_start:review_summary_end]
assert "DOCX-bestand terugzetten" not in review_summary_block
assert "Download hersteld DOCX-bestand (.docx)" not in review_summary_block
def test_docx_limitations_warning_is_present():
docx_block = _docx_reinsert_block()
assert "DOCX-terugzetten ondersteunt in deze versie normale documenttekst en tabellen" in docx_block
assert "Headers, footers, opmerkingen, bijgehouden wijzigingen" in docx_block
assert "meerdere tekstfragmenten" in docx_block
assert "DOCX-beperkingen" in docx_block
assert "limitations" in docx_block
def test_docx_reinsert_audit_summary_fields_are_present():
docx_block = _docx_reinsert_block()
for marker in [
"Documenttype",
"Mappingregels totaal",
"Actieve mappingregels",
"Uitgesloten mappingregels",
"Aantal teruggezette waarden",
"Niet gevonden placeholders",
"Onbekende placeholders in tekst",
"Dubbele placeholders in sleutel",
"Validatieproblemen",
"Lokaal uitgevoerd",
"AI-verwerking",
"Cloudverwerking",
"DOCX-beperkingen",
"document_type",
"item_count",
"active_item_count",
"excluded_item_count",
"replacement_count",
"placeholders_not_found",
"unknown_placeholders",
"duplicate_placeholders",
"validation_issues",
"local_only",
"ai_processing",
"cloud_processing",
"limitations",
]:
assert marker in docx_block
def test_pasted_text_txt_reinsert_and_scrub_key_load_remain_present():
for marker in [
"Scrub Key laden",
"Upload Scrub Key JSON (.json)",
"Of plak Scrub Key JSON",
"Valideer en laad Scrub Key",
"Plak hier de tekst waarin u originele waarden lokaal wilt terugzetten",
"Zet originele waarden lokaal terug",
"Herstelde tekst",
"Download herstelde tekst (.txt)",
"TXT-bestand terugzetten",
"Upload een TXT-bestand met placeholders",
"Zet TXT-bestand lokaal terug",
"Herstelde TXT-tekst",
"Download hersteld TXT-bestand (.txt)",
]:
assert marker in PATCH_TEXT
def test_anonymization_mode_and_existing_exports_remain_present():
for marker in [
"Anonimiseren",
"Originele waarden terugzetten",
"Kies werkmodus",
'st.subheader("4. Download opgeschoonde bestanden")',
"Download opgeschoonde bestanden",
"Eindcontrole vóór download",
"Extra exportcontrole",
"Scrub Key (JSON)",
"Download Scrub Key (.json)",
"st.warning(EXPORT_GUIDANCE)",
]:
assert marker in PATCH_TEXT
def test_no_pdf_ai_cloud_or_export_rewire_added():
lower_patch = PATCH_TEXT.lower()
for marker in [
"download_pdf_reinserted",
"PDF reinsert",
"pdf reinsert",
"requests.post",
"httpx.post",
"cloud processing call",
"restore_original_document",
"server-side key storage",
"durable key vault",
"openai",
"anthropic",
]:
assert marker.lower() not in lower_patch
assert "st.stop()" not in PATCH_TEXT
assert "blocks_export = True" not in PATCH_TEXT
assert "changes_export_semantics = True" not in PATCH_TEXT
assert "def apply_replacements_to_text" not in PATCH_TEXT
assert "apply_replacements_to_text =" not in PATCH_TEXT
assert "export_text = apply_replacements_to_text" not in PATCH_TEXT
assert "download_txt" not in PATCH_TEXT
assert "download_csv" not in PATCH_TEXT
assert "download_docx" not in PATCH_TEXT
assert "download_pdf" not in PATCH_TEXT