Coverage for tests / config / test_lintro_config.py: 100%

50 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2026-04-03 18:53 +0000

1"""Tests for LintroConfig dataclasses.""" 

2 

3from assertpy import assert_that 

4 

5from lintro.config.lintro_config import ( 

6 EnforceConfig, 

7 ExecutionConfig, 

8 LintroConfig, 

9 LintroToolConfig, 

10) 

11 

12 

13def test_default_values() -> None: 

14 """EnforceConfig should have None defaults.""" 

15 config = EnforceConfig() 

16 

17 assert_that(config.line_length).is_none() 

18 assert_that(config.target_python).is_none() 

19 

20 

21def test_execution_config_defaults() -> None: 

22 """ExecutionConfig should have sensible defaults.""" 

23 config = ExecutionConfig() 

24 

25 assert_that(config.enabled_tools).is_equal_to([]) 

26 assert_that(config.tool_order).is_equal_to("priority") 

27 assert_that(config.fail_fast).is_false() 

28 assert_that(config.parallel).is_true() 

29 

30 

31def test_tool_config_defaults() -> None: 

32 """LintroToolConfig should have sensible defaults.""" 

33 config = LintroToolConfig() 

34 

35 assert_that(config.enabled).is_true() 

36 assert_that(config.config_source).is_none() 

37 

38 

39def test_lintro_config_defaults() -> None: 

40 """LintroConfig should have sensible defaults.""" 

41 config = LintroConfig() 

42 

43 assert_that(config.enforce).is_not_none() 

44 assert_that(config.execution).is_not_none() 

45 assert_that(config.defaults).is_equal_to({}) 

46 assert_that(config.tools).is_equal_to({}) 

47 assert_that(config.config_path).is_none() 

48 

49 

50def test_get_tool_config_returns_default() -> None: 

51 """get_tool_config should return default for unknown tools.""" 

52 config = LintroConfig() 

53 

54 tool_config = config.get_tool_config("unknown_tool") 

55 

56 assert_that(tool_config.enabled).is_true() 

57 assert_that(tool_config.config_source).is_none() 

58 

59 

60def test_get_tool_config_case_insensitive() -> None: 

61 """get_tool_config should be case insensitive.""" 

62 config = LintroConfig( 

63 tools={"ruff": LintroToolConfig(enabled=False)}, 

64 ) 

65 

66 # Lowercase should work 

67 assert_that(config.get_tool_config("ruff").enabled).is_false() 

68 # Uppercase should also work (converted to lowercase) 

69 assert_that(config.get_tool_config("RUFF").enabled).is_false() 

70 # Mixed case should also work 

71 assert_that(config.get_tool_config("Ruff").enabled).is_false() 

72 

73 

74def test_is_tool_enabled_filtered() -> None: 

75 """is_tool_enabled should filter by enabled_tools.""" 

76 config = LintroConfig( 

77 execution=ExecutionConfig(enabled_tools=["ruff"]), 

78 ) 

79 

80 assert_that(config.is_tool_enabled("ruff")).is_true() 

81 assert_that(config.is_tool_enabled("prettier")).is_false() 

82 

83 

84def test_get_tool_defaults() -> None: 

85 """get_tool_defaults should return defaults for a tool.""" 

86 config = LintroConfig( 

87 defaults={ 

88 "prettier": {"singleQuote": True, "tabWidth": 2}, 

89 }, 

90 ) 

91 

92 defaults = config.get_tool_defaults("prettier") 

93 

94 assert_that(defaults["singleQuote"]).is_true() 

95 assert_that(defaults["tabWidth"]).is_equal_to(2) 

96 

97 

98def test_get_effective_line_length_from_enforce() -> None: 

99 """get_effective_line_length should use enforce setting.""" 

100 config = LintroConfig( 

101 enforce=EnforceConfig(line_length=120), 

102 ) 

103 

104 assert_that(config.get_effective_line_length("ruff")).is_equal_to(120) 

105 assert_that(config.get_effective_line_length("prettier")).is_equal_to(120) 

106 

107 

108def test_get_effective_target_python() -> None: 

109 """get_effective_target_python should use enforce setting.""" 

110 config = LintroConfig( 

111 enforce=EnforceConfig(target_python="py312"), 

112 ) 

113 

114 assert_that(config.get_effective_target_python("ruff")).is_equal_to("py312") 

115 assert_that(config.get_effective_target_python("black")).is_equal_to("py312")