File size: 4,291 Bytes
22400b7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
105
106
107
108
109
110
111
112
from pathlib import Path


PATCH_TEXT = Path("fix_streamlit_nested_expanders.py").read_text(encoding="utf-8")


def test_reinsert_helper_is_imported_and_used_by_streamlit_patch():
    assert "from scrub_key_reinsert import reinsert_from_scrub_key" in PATCH_TEXT
    assert "reinsert_from_scrub_key(reinsert_input_text, active_reinsert_scrub_key)" in PATCH_TEXT


def test_reinsert_ui_labels_are_present():
    assert "Originele waarden terugzetten" in PATCH_TEXT
    assert "Plak hier de tekst waarin u originele waarden lokaal wilt terugzetten" in PATCH_TEXT
    assert "Zet originele waarden lokaal terug" in PATCH_TEXT
    assert "Herstelde tekst" in PATCH_TEXT
    assert "Download herstelde tekst (.txt)" in PATCH_TEXT


def test_reinsert_warning_mentions_sensitive_and_confidential_output():
    assert "terugzetten herstelt originele gevoelige waarden" in PATCH_TEXT
    assert "persoonsgegevens of vertrouwelijke informatie" in PATCH_TEXT
    assert "Controleer het resultaat zorgvuldig voordat u het deelt" in PATCH_TEXT


def test_reinsert_ui_contains_local_only_no_ai_no_cloud_wording():
    assert "lokaal uitgevoerd" in PATCH_TEXT.lower()
    assert "geen AI- of cloudverwerking" in PATCH_TEXT
    assert "AI-verwerking" in PATCH_TEXT
    assert "Cloudverwerking" in PATCH_TEXT


def test_reinsert_requires_explicit_button_before_helper_call():
    button_index = PATCH_TEXT.index('st.button("Zet originele waarden lokaal terug", key="run_local_reinsert")')
    helper_index = PATCH_TEXT.index("reinsert_from_scrub_key(reinsert_input_text, active_reinsert_scrub_key)")
    assert button_index < helper_index


def test_reinsert_ui_shows_required_audit_summary_fields():
    for marker in [
        "Controleverslag terugzetten",
        "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",
        "replacement_count",
        "item_count",
        "active_item_count",
        "excluded_item_count",
        "placeholders_not_found",
        "unknown_placeholders",
        "duplicate_placeholders",
        "validation_issues",
        "local_only",
        "ai_processing",
        "cloud_processing",
    ]:
        assert marker in PATCH_TEXT


def test_reinsert_ui_keeps_existing_scrub_key_export_and_import_labels():
    assert "Scrub Key (JSON)" in PATCH_TEXT
    assert "Download Scrub Key (.json)" in PATCH_TEXT
    assert "Scrub Key laden" in PATCH_TEXT
    assert "Upload Scrub Key JSON (.json)" in PATCH_TEXT
    assert "Of plak Scrub Key JSON" in PATCH_TEXT
    assert "Valideer en laad Scrub Key" in PATCH_TEXT


def test_reinsert_ui_keeps_existing_download_and_export_markers_unblocked():
    assert 'st.subheader("4. Download opgeschoonde bestanden")' in PATCH_TEXT
    assert "Eindcontrole vóór download" in PATCH_TEXT
    assert "Extra exportcontrole" in PATCH_TEXT
    assert "st.warning(EXPORT_GUIDANCE)" in PATCH_TEXT
    assert "st.stop()" not in PATCH_TEXT
    assert "blocks_export = True" not in PATCH_TEXT
    assert "changes_export_semantics = True" not in PATCH_TEXT


def test_reinsert_ui_does_not_add_ai_calls_cloud_calls_or_document_rehydration():
    forbidden_markers = [
        "openai",
        "anthropic",
        "requests.post",
        "httpx.post",
        "cloud processing call",
        "rehydrat",
        "restore_original_document",
        "download_docx_reinserted",
        "download_pdf_reinserted",
    ]
    lower_patch = PATCH_TEXT.lower()
    for marker in forbidden_markers:
        assert marker.lower() not in lower_patch


def test_reinsert_patch_does_not_alter_existing_replacement_application_or_scrubbed_download_functions():
    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