scrub / tests /test_basic_mode_declutter_implementation.py
solidprivacy's picture
Align basic mode guardrail with bound Scrub Key export helper
6c3b48d
Raw
History Blame Contribute Delete
3.94 kB
from __future__ import annotations
from pathlib import Path
REPO_ROOT = Path(__file__).resolve().parents[1]
APP_TEXT = (REPO_ROOT / "presidio_streamlit.py").read_text(encoding="utf-8")
SIDE_BY_SIDE_TEXT = (REPO_ROOT / "side_by_side_review_panel_ui.py").read_text(encoding="utf-8")
def test_review_mode_state_is_captured_from_side_by_side_panel() -> None:
assert "side_by_side_review_state = render_side_by_side_review_panel(" in APP_TEXT
assert 'review_mode = side_by_side_review_state.get("review_mode", "Basiscontrole")' in APP_TEXT
assert 'is_expert_review = review_mode == "Expertcontrole"' in APP_TEXT
assert "is_basic_review = not is_expert_review" in APP_TEXT
def test_basiscontrole_default_and_session_key_remain_in_side_by_side_selector() -> None:
for marker in [
"Basiscontrole",
"Expertcontrole",
"REVIEW_MODE_OPTIONS",
"index=0",
"solidprivacy_review_mode",
"mode_switch_visibility_only",
]:
assert marker in SIDE_BY_SIDE_TEXT
def test_basiscontrole_uses_calmer_replacement_table_label() -> None:
assert "replacement_table_label = (" in APP_TEXT
assert "Details aanpassen — vervangtabel" in APP_TEXT
assert "Vervangtabel controleren —" in APP_TEXT
def test_manual_missed_value_entry_remains_available_outside_expert_guard() -> None:
assert 'with st.expander("Gemiste waarde toevoegen", expanded=False):' in APP_TEXT
assert 'with st.expander("Gemiste waarde toevoegen", expanded=False):' in APP_TEXT.split(
'with st.expander("Extra controlehulpen", expanded=False):'
)[0]
def test_expert_only_review_controls_are_guarded() -> None:
guarded_markers = [
'with st.expander("Waarom controleren?"',
'with st.expander("Extra controlehulpen"',
'with st.expander("Geavanceerde details bij de vervangtabel"',
"render_serial_review_panel(",
'with st.expander("Herbruikbare vervangingen"',
'with st.expander("Technische informatie"',
]
for marker in guarded_markers:
marker_index = APP_TEXT.find(marker)
assert marker_index >= 0, marker
nearby_prefix = APP_TEXT[max(0, marker_index - 160):marker_index]
assert "if is_expert_review:" in nearby_prefix, marker
assert 'if st_operator not in ("highlight", "synthesize") and is_expert_review:' in APP_TEXT
def test_candidate_values_are_contextual_in_basiscontrole() -> None:
assert "if is_expert_review or candidate_rows:" in APP_TEXT
assert "Mogelijk extra te controleren waarden" in APP_TEXT
assert "Geen mogelijke gemiste referenties gevonden door de auditlaag." in APP_TEXT
def test_document_scrub_key_audit_and_docx_hygiene_remain_available() -> None:
for marker in [
"Document downloaden",
"Download opgeschoonde tekst (.txt)",
"Download opgeschoond Word-bestand (.docx)",
"Download opgeschoonde PDF (.pdf)",
"Scrub Key downloaden",
"Download Scrub Key (.json)",
"Audit en technische bestanden",
"Download vervangtabel (.csv)",
"Download scrubrapport (.txt)",
"render_docx_hygiene_audit_panel(docx_bytes, source_label=docx_filename)",
]:
assert marker in APP_TEXT
def test_export_scrub_key_reinsert_and_recognizer_paths_remain_present() -> None:
for marker in [
"analyze(",
"build_placeholder_replacements",
"apply_replacements_to_text",
"build_bound_scrub_key",
"export_key_json",
"reinsert_from_scrub_key",
"reinsert_docx_bytes",
"reinsert_txt_bytes",
"replacement_report_csv",
"scrub_report_txt",
]:
assert marker in APP_TEXT
def test_no_nested_expander_grouping_is_introduced() -> None:
lowered = APP_TEXT.lower()
assert 'with st.expander("meer controleopties"' not in lowered
assert 'st.expander("meer controleopties"' not in lowered