File size: 6,042 Bytes
e36915b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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