Coverage for tests / unit / enums / test_severity_level.py: 100%
19 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"""Unit tests for SeverityLevel enum and normalize_severity_level."""
3from __future__ import annotations
5import pytest
6from assertpy import assert_that
8from lintro.enums.severity_level import (
9 SeverityLevel,
10 normalize_severity_level,
11)
13# =============================================================================
14# Tests for alias table completeness
15# =============================================================================
18@pytest.mark.parametrize(
19 ("raw", "expected"),
20 [
21 pytest.param("error", SeverityLevel.ERROR, id="error-lower"),
22 pytest.param("ERROR", SeverityLevel.ERROR, id="error-upper"),
23 pytest.param("Error", SeverityLevel.ERROR, id="error-mixed"),
24 pytest.param("warning", SeverityLevel.WARNING, id="warning-lower"),
25 pytest.param("WARNING", SeverityLevel.WARNING, id="warning-upper"),
26 pytest.param("info", SeverityLevel.INFO, id="info-lower"),
27 pytest.param("INFO", SeverityLevel.INFO, id="info-upper"),
28 # Common alternative names → INFO
29 pytest.param("note", SeverityLevel.INFO, id="note"),
30 pytest.param("hint", SeverityLevel.INFO, id="hint"),
31 pytest.param("style", SeverityLevel.INFO, id="style"),
32 pytest.param("help", SeverityLevel.INFO, id="help"),
33 # Semgrep / Svelte-check
34 pytest.param("warn", SeverityLevel.WARNING, id="warn-lower"),
35 pytest.param("WARN", SeverityLevel.WARNING, id="warn-upper"),
36 # Bandit / cargo-audit levels
37 pytest.param("HIGH", SeverityLevel.ERROR, id="high"),
38 pytest.param("CRITICAL", SeverityLevel.ERROR, id="critical"),
39 pytest.param("MEDIUM", SeverityLevel.WARNING, id="medium"),
40 pytest.param("UNKNOWN", SeverityLevel.WARNING, id="unknown"),
41 pytest.param("LOW", SeverityLevel.INFO, id="low"),
42 # Pytest outcomes
43 pytest.param("FAILED", SeverityLevel.ERROR, id="failed"),
44 pytest.param("SKIPPED", SeverityLevel.INFO, id="skipped"),
45 pytest.param("PASSED", SeverityLevel.INFO, id="passed"),
46 ],
47)
48def test_normalize_maps_alias_to_expected_level(
49 raw: str,
50 expected: SeverityLevel,
51) -> None:
52 """normalize_severity_level maps known aliases to the correct level.
54 Args:
55 raw: The raw severity string to normalize.
56 expected: The expected SeverityLevel result.
57 """
58 assert_that(normalize_severity_level(raw)).is_equal_to(expected)
61# =============================================================================
62# Case insensitivity
63# =============================================================================
66@pytest.mark.parametrize(
67 "raw",
68 [
69 pytest.param("Note", id="title-case"),
70 pytest.param("nOtE", id="mixed-case"),
71 pytest.param("NOTE", id="upper-case"),
72 pytest.param("note", id="lower-case"),
73 ],
74)
75def test_normalize_is_case_insensitive(raw: str) -> None:
76 """normalize_severity_level is case-insensitive.
78 Args:
79 raw: The raw severity string with varying case.
80 """
81 assert_that(normalize_severity_level(raw)).is_equal_to(SeverityLevel.INFO)
84# =============================================================================
85# Enum passthrough
86# =============================================================================
89def test_normalize_passes_through_enum_instance() -> None:
90 """normalize_severity_level returns enum instances unchanged."""
91 for level in SeverityLevel:
92 assert_that(normalize_severity_level(level)).is_same_as(level)
95# =============================================================================
96# Unknown values
97# =============================================================================
100def test_normalize_raises_for_unknown_value() -> None:
101 """normalize_severity_level raises ValueError for unrecognized strings."""
102 with pytest.raises(ValueError, match="Unknown severity level"):
103 normalize_severity_level("banana")
106# =============================================================================
107# Alias table sanity
108# =============================================================================
111def test_alias_table_covers_all_enum_members() -> None:
112 """Every SeverityLevel member name can be normalized via the public API."""
113 for member in SeverityLevel:
114 assert_that(normalize_severity_level(member.name)).is_equal_to(member)