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

1"""Unit tests for SeverityLevel enum and normalize_severity_level.""" 

2 

3from __future__ import annotations 

4 

5import pytest 

6from assertpy import assert_that 

7 

8from lintro.enums.severity_level import ( 

9 SeverityLevel, 

10 normalize_severity_level, 

11) 

12 

13# ============================================================================= 

14# Tests for alias table completeness 

15# ============================================================================= 

16 

17 

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. 

53 

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) 

59 

60 

61# ============================================================================= 

62# Case insensitivity 

63# ============================================================================= 

64 

65 

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. 

77 

78 Args: 

79 raw: The raw severity string with varying case. 

80 """ 

81 assert_that(normalize_severity_level(raw)).is_equal_to(SeverityLevel.INFO) 

82 

83 

84# ============================================================================= 

85# Enum passthrough 

86# ============================================================================= 

87 

88 

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) 

93 

94 

95# ============================================================================= 

96# Unknown values 

97# ============================================================================= 

98 

99 

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") 

104 

105 

106# ============================================================================= 

107# Alias table sanity 

108# ============================================================================= 

109 

110 

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)