File size: 3,941 Bytes
c68129b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6c3b48d
c68129b
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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