Coverage for tests / unit / ai / test_enums.py: 100%
44 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Tests for AI-specific enumerations."""
3from __future__ import annotations
5import pytest
6from assertpy import assert_that
8from lintro.ai.enums import ConfidenceLevel, RiskLevel
10# -- TestConfidenceLevel: Tests for ConfidenceLevel enum. --------------------
13@pytest.mark.parametrize(
14 ("member", "expected_value"),
15 [
16 (ConfidenceLevel.HIGH, "high"),
17 (ConfidenceLevel.MEDIUM, "medium"),
18 (ConfidenceLevel.LOW, "low"),
19 ],
20 ids=["high", "medium", "low"],
21)
22def test_confidence_string_value(
23 member: ConfidenceLevel,
24 expected_value: str,
25) -> None:
26 """ConfidenceLevel members have the expected string values."""
27 assert_that(str(member)).is_equal_to(expected_value)
30@pytest.mark.parametrize(
31 ("member", "expected_value"),
32 [
33 (ConfidenceLevel.HIGH, "high"),
34 (ConfidenceLevel.MEDIUM, "medium"),
35 (ConfidenceLevel.LOW, "low"),
36 ],
37 ids=["high", "medium", "low"],
38)
39def test_confidence_string_equality(
40 member: ConfidenceLevel,
41 expected_value: str,
42) -> None:
43 """ConfidenceLevel members compare equal to their string values."""
44 assert_that(member).is_equal_to(expected_value)
45 assert_that(member == expected_value).is_true()
48@pytest.mark.parametrize(
49 ("member", "expected_order"),
50 [
51 (ConfidenceLevel.HIGH, 3),
52 (ConfidenceLevel.MEDIUM, 2),
53 (ConfidenceLevel.LOW, 1),
54 ],
55 ids=["high=3", "medium=2", "low=1"],
56)
57def test_confidence_numeric_order(
58 member: ConfidenceLevel,
59 expected_order: int,
60) -> None:
61 """numeric_order returns correct ordering values."""
62 assert_that(member.numeric_order).is_equal_to(expected_order)
65def test_ordering_high_gt_medium_gt_low() -> None:
66 """HIGH > MEDIUM > LOW by numeric_order."""
67 assert_that(ConfidenceLevel.HIGH.numeric_order).is_greater_than(
68 ConfidenceLevel.MEDIUM.numeric_order,
69 )
70 assert_that(ConfidenceLevel.MEDIUM.numeric_order).is_greater_than(
71 ConfidenceLevel.LOW.numeric_order,
72 )
75def test_confidence_is_str_subclass() -> None:
76 """ConfidenceLevel members are str instances."""
77 assert_that(ConfidenceLevel.HIGH).is_instance_of(str)
80def test_confidence_construction_from_string() -> None:
81 """ConfidenceLevel can be constructed from a string value."""
82 assert_that(ConfidenceLevel("high")).is_equal_to(ConfidenceLevel.HIGH)
83 assert_that(ConfidenceLevel("medium")).is_equal_to(ConfidenceLevel.MEDIUM)
84 assert_that(ConfidenceLevel("low")).is_equal_to(ConfidenceLevel.LOW)
87def test_confidence_invalid_value_raises() -> None:
88 """Invalid string raises ValueError."""
89 with pytest.raises(ValueError, match="invalid"):
90 ConfidenceLevel("invalid")
93# -- TestRiskLevel: Tests for RiskLevel enum. --------------------------------
96@pytest.mark.parametrize(
97 ("member", "expected_value"),
98 [
99 (RiskLevel.SAFE_STYLE, "safe-style"),
100 (RiskLevel.BEHAVIORAL_RISK, "behavioral-risk"),
101 ],
102 ids=["safe-style", "behavioral-risk"],
103)
104def test_risk_hyphenated_string_value(
105 member: RiskLevel,
106 expected_value: str,
107) -> None:
108 """RiskLevel members produce hyphenated string values."""
109 assert_that(str(member)).is_equal_to(expected_value)
112@pytest.mark.parametrize(
113 ("member", "expected_value"),
114 [
115 (RiskLevel.SAFE_STYLE, "safe-style"),
116 (RiskLevel.BEHAVIORAL_RISK, "behavioral-risk"),
117 ],
118 ids=["safe-style", "behavioral-risk"],
119)
120def test_risk_string_equality(
121 member: RiskLevel,
122 expected_value: str,
123) -> None:
124 """RiskLevel members compare equal to their hyphenated string values."""
125 assert_that(member).is_equal_to(expected_value)
126 assert_that(member == expected_value).is_true()
129@pytest.mark.parametrize(
130 ("member", "sarif", "expected_label"),
131 [
132 (RiskLevel.SAFE_STYLE, False, "notice"),
133 (RiskLevel.SAFE_STYLE, True, "note"),
134 (RiskLevel.BEHAVIORAL_RISK, False, "warning"),
135 (RiskLevel.BEHAVIORAL_RISK, True, "warning"),
136 ],
137 ids=[
138 "safe-style-annotation",
139 "safe-style-sarif",
140 "behavioral-risk-annotation",
141 "behavioral-risk-sarif",
142 ],
143)
144def test_risk_to_severity_label(
145 member: RiskLevel,
146 sarif: bool,
147 expected_label: str,
148) -> None:
149 """to_severity_label returns correct labels for each format."""
150 assert_that(member.to_severity_label(sarif=sarif)).is_equal_to(expected_label)
153def test_risk_is_str_subclass() -> None:
154 """RiskLevel members are str instances."""
155 assert_that(RiskLevel.SAFE_STYLE).is_instance_of(str)
158def test_risk_construction_from_string() -> None:
159 """RiskLevel can be constructed from a hyphenated string value."""
160 assert_that(RiskLevel("safe-style")).is_equal_to(RiskLevel.SAFE_STYLE)
161 assert_that(RiskLevel("behavioral-risk")).is_equal_to(
162 RiskLevel.BEHAVIORAL_RISK,
163 )
166def test_risk_invalid_value_raises() -> None:
167 """Invalid string raises ValueError."""
168 with pytest.raises(ValueError, match="invalid"):
169 RiskLevel("invalid")