forked from ChelseaKR/obligation-receipts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_exit_codes.py
More file actions
54 lines (43 loc) · 1.64 KB
/
Copy pathtest_exit_codes.py
File metadata and controls
54 lines (43 loc) · 1.64 KB
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
import pytest
from obligation_receipts.exit_codes import (
INPUT_ERROR,
NOT_OBSERVED,
OBSERVED_FAILURE,
OK,
REVIEW_REQUIRED,
evaluation_exit_code,
evidence_exit_code,
)
from obligation_receipts.models import OverallStatus, ResultStatus
def test_every_overall_status_has_a_declared_exit_code() -> None:
assert {status: evaluation_exit_code(status) for status in OverallStatus} == {
OverallStatus.ACCEPTED: OK,
OverallStatus.ACCEPTED_WITH_FINDINGS: OK,
OverallStatus.REJECTED: OBSERVED_FAILURE,
OverallStatus.INCOMPLETE: NOT_OBSERVED,
}
def test_every_observable_evidence_state_has_a_declared_exit_code() -> None:
assert {
status: evidence_exit_code(status)
for status in ResultStatus
if status is not ResultStatus.UNVERIFIABLE
} == {
ResultStatus.PASS: OK,
ResultStatus.FAIL: OBSERVED_FAILURE,
ResultStatus.MISSING: NOT_OBSERVED,
ResultStatus.REVIEW_REQUIRED: REVIEW_REQUIRED,
}
def test_unverifiable_is_not_an_evidence_state() -> None:
with pytest.raises(KeyError):
evidence_exit_code(ResultStatus.UNVERIFIABLE)
def test_input_error_is_reserved_for_producing_no_result_document() -> None:
evaluated = {evaluation_exit_code(status) for status in OverallStatus}
observed = {
evidence_exit_code(status)
for status in ResultStatus
if status is not ResultStatus.UNVERIFIABLE
}
assert INPUT_ERROR not in evaluated | observed
def test_codes_are_distinct() -> None:
codes = [OK, OBSERVED_FAILURE, INPUT_ERROR, NOT_OBSERVED, REVIEW_REQUIRED]
assert len(set(codes)) == len(codes)