File size: 4,314 Bytes
704ae03
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from copy import deepcopy

from export_sanity import (
    build_export_sanity_checks,
    export_sanity_ready_label,
    export_sanity_warnings,
)


def test_export_sanity_all_rows_selected_and_no_candidates_open():
    rows = [
        {"include": True, "review_status": "auto_detected", "source": "detected"},
        {"include": "ja", "review_status": "manual", "source": "manual"},
    ]

    summary = build_export_sanity_checks(rows)
    warnings = export_sanity_warnings(summary)

    assert summary["unchecked_control_needed_rows"] == 0
    assert summary["candidate_rows_not_included"] == 0
    assert summary["no_replacements_selected"] is False
    assert summary["blocks_export"] is False
    assert summary["changes_export_semantics"] is False
    assert export_sanity_ready_label(summary) == "Klaar voor export na gebruikerscontrole"
    assert not any("Controle nodig' staan niet aangevinkt" in warning for warning in warnings)
    assert any("Gebruikerscontrole blijft nodig" in warning for warning in warnings)
    assert any("geen garantie op volledige anonimisering" in warning for warning in warnings)


def test_export_sanity_warns_about_unchecked_control_needed_rows():
    rows = [
        {"include": True, "review_status": "auto_detected"},
        {"include": False, "review_status_label": "Controle nodig"},
    ]

    summary = build_export_sanity_checks(rows)
    warnings = export_sanity_warnings(summary)

    assert summary["unchecked_control_needed_rows"] == 1
    assert export_sanity_ready_label(summary) == "Controle nodig vóór export"
    assert any("1 regel(s) met 'Controle nodig'" in warning for warning in warnings)


def test_export_sanity_warns_about_candidate_rows_not_included():
    rows = [
        {"include": True, "review_status": "auto_detected", "source": "detected"},
        {"include": False, "review_status": "needs_review", "source": "candidate"},
    ]

    summary = build_export_sanity_checks(rows)
    warnings = export_sanity_warnings(summary)

    assert summary["candidate_rows_not_included"] == 1
    assert any("1 mogelijke kandidaatwaarde(n)" in warning for warning in warnings)
    assert any("Niet-aangevinkte kandidaten" in warning for warning in warnings)


def test_export_sanity_warns_when_no_selected_replacements():
    rows = [
        {"include": False, "review_status": "auto_detected"},
        {"include": "nee", "review_status": "manual"},
    ]

    summary = build_export_sanity_checks(rows)
    warnings = export_sanity_warnings(summary)

    assert summary["checked_rows_included_in_export"] == 0
    assert summary["no_replacements_selected"] is True
    assert export_sanity_ready_label(summary) == "Geen vervangingen geselecteerd"
    assert any("geen vervangingen geselecteerd" in warning.lower() for warning in warnings)


def test_export_sanity_handles_empty_table():
    summary = build_export_sanity_checks([])
    warnings = export_sanity_warnings(summary)

    assert summary["total_rows"] == 0
    assert summary["no_replacements_selected"] is True
    assert export_sanity_ready_label(summary) == "Geen vervangregels gevonden — controleer handmatig"
    assert any("geen vervangingen geselecteerd" in warning.lower() for warning in warnings)
    assert any("Downloaden blijft mogelijk" in warning for warning in warnings)


def test_export_sanity_warning_text_is_dutch_and_user_facing():
    rows = [
        {"include": False, "review_status_label": "Controle nodig", "source": "candidate"},
    ]

    warnings = export_sanity_warnings(rows)
    joined = " ".join(warnings)

    assert "Let op" in joined
    assert "Controleer" in joined or "controleer" in joined
    assert "Gebruikerscontrole blijft nodig" in joined
    assert "geen garantie op volledige anonimisering" in joined
    assert "export" in joined.lower()
    assert "blocks_export" not in joined
    assert "review_status" not in joined


def test_export_sanity_does_not_mutate_input_rows():
    rows = [
        {"include": False, "review_status_label": "Controle nodig", "source": "candidate"},
        {"include": True, "review_status": "manual", "source": "manual"},
    ]
    original = deepcopy(rows)

    build_export_sanity_checks(rows)
    export_sanity_warnings(rows)
    export_sanity_ready_label(rows)

    assert rows == original