File size: 2,402 Bytes
5b34fc5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from app import study


def _eligible_form() -> dict:
    form = {
        "gate": "substantive_answer_attempt",
        "gate_confidence": "82",
        "gate_confidence_touched": "1",
        "responsiveness": "71",
        "responsiveness_touched": "1",
        "rasiah": "intermediate",
        "supplied_information": "most",
        "confidence": "77",
        "confidence_touched": "1",
        "rationale": "The response addresses the forecast but leaves the requested range unresolved.",
        "response_time_ms": "43000",
        "audio_played_ms": "18000",
        "audio_completed": "1",
        "audio_revision": "less_responsive",
        "audible_event": "pause",
    }
    for descriptor in study.DESCRIPTORS:
        form[f"descriptor_{descriptor.value}"] = "3"
    return form


def test_complete_text_audio_response_validates() -> None:
    clean, error = study.validate_submission(_eligible_form(), "text_audio", 20)
    assert error is None
    assert clean["responsiveness"] == 71
    assert clean["audio_revision"] == "less_responsive"


def test_text_only_does_not_accept_audio_retrospective_fields_as_required() -> None:
    form = _eligible_form()
    form.pop("audio_revision")
    form.pop("audible_event")
    form["audio_played_ms"] = "0"
    form["audio_completed"] = "0"
    clean, error = study.validate_submission(form, "text_only")
    assert error is None
    assert clean["audio_revision"] is None


def test_untouched_slider_is_rejected() -> None:
    form = _eligible_form()
    form["responsiveness_touched"] = "0"
    assert study.validate_submission(form, "text_audio")[1] == "complete_scales"


def test_audio_must_be_played() -> None:
    form = _eligible_form()
    form["audio_played_ms"] = "0"
    form["audio_completed"] = "0"
    assert study.validate_submission(form, "text_audio", 20)[1] == "play_audio"


def test_repair_gate_skips_evasion_questions_but_keeps_rationale() -> None:
    form = {
        "gate": "clarification_repair",
        "gate_confidence": "91",
        "gate_confidence_touched": "1",
        "rationale": "The executive asks the analyst to clarify the intended comparison.",
        "audio_played_ms": "12000",
        "audio_completed": "1",
    }
    clean, error = study.validate_submission(form, "text_audio")
    assert error is None
    assert clean["rasiah"] is None
    assert clean["gate"] == "clarification_repair"