Coverage for tests / unit / utils / test_logger_setup.py: 100%
45 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 lintro.utils.logger_setup module."""
3from __future__ import annotations
5from pathlib import Path
6from unittest.mock import MagicMock, patch
8from assertpy import assert_that
10from lintro.utils.logger_setup import setup_cli_logging, setup_execution_logging
12# =============================================================================
13# setup_cli_logging tests
14# =============================================================================
17@patch("lintro.utils.logger_setup.logger")
18def test_setup_cli_logging_removes_handlers(mock_logger: MagicMock) -> None:
19 """setup_cli_logging removes existing handlers.
21 Args:
22 mock_logger: Mock logger object.
23 """
24 setup_cli_logging()
26 mock_logger.remove.assert_called_once()
29@patch("lintro.utils.logger_setup.logger")
30def test_setup_cli_logging_adds_stderr_handler(mock_logger: MagicMock) -> None:
31 """setup_cli_logging adds stderr handler.
33 Args:
34 mock_logger: Mock logger object.
35 """
36 setup_cli_logging()
38 mock_logger.add.assert_called_once()
39 call_args = mock_logger.add.call_args
40 assert_that(call_args.kwargs["level"]).is_equal_to("WARNING")
41 assert_that(call_args.kwargs["colorize"]).is_true()
44# =============================================================================
45# setup_execution_logging tests
46# =============================================================================
49@patch("lintro.utils.logger_setup.logger")
50def test_setup_execution_logging_removes_handlers(
51 mock_logger: MagicMock,
52 tmp_path: Path,
53) -> None:
54 """setup_execution_logging removes existing handlers.
56 Args:
57 mock_logger: Mock logger object.
58 tmp_path: Temporary directory fixture.
59 """
60 setup_execution_logging(run_dir=tmp_path)
62 mock_logger.remove.assert_called_once()
65@patch("lintro.utils.logger_setup.logger")
66def test_setup_execution_logging_adds_console_and_file_handlers(
67 mock_logger: MagicMock,
68 tmp_path: Path,
69) -> None:
70 """setup_execution_logging adds console and file handlers.
72 Args:
73 mock_logger: Mock logger object.
74 tmp_path: Temporary directory fixture.
75 """
76 setup_execution_logging(run_dir=tmp_path)
78 # Should add two handlers: console + file
79 assert_that(mock_logger.add.call_count).is_equal_to(2)
82@patch("lintro.utils.logger_setup.logger")
83def test_setup_execution_logging_debug_false_uses_warning(
84 mock_logger: MagicMock,
85 tmp_path: Path,
86) -> None:
87 """setup_execution_logging uses WARNING level when debug=False.
89 Args:
90 mock_logger: Mock logger object.
91 tmp_path: Temporary directory fixture.
92 """
93 setup_execution_logging(run_dir=tmp_path, debug=False)
95 # First call is console handler
96 first_call = mock_logger.add.call_args_list[0]
97 assert_that(first_call.kwargs["level"]).is_equal_to("WARNING")
100@patch("lintro.utils.logger_setup.logger")
101def test_setup_execution_logging_debug_true_uses_debug(
102 mock_logger: MagicMock,
103 tmp_path: Path,
104) -> None:
105 """setup_execution_logging uses DEBUG level when debug=True.
107 Args:
108 mock_logger: Mock logger object.
109 tmp_path: Temporary directory fixture.
110 """
111 setup_execution_logging(run_dir=tmp_path, debug=True)
113 # First call is console handler
114 first_call = mock_logger.add.call_args_list[0]
115 assert_that(first_call.kwargs["level"]).is_equal_to("DEBUG")
118@patch("lintro.utils.logger_setup.logger")
119def test_setup_execution_logging_file_handler_uses_debug(
120 mock_logger: MagicMock,
121 tmp_path: Path,
122) -> None:
123 """setup_execution_logging file handler always uses DEBUG level.
125 Args:
126 mock_logger: Mock logger object.
127 tmp_path: Temporary directory fixture.
128 """
129 setup_execution_logging(run_dir=tmp_path, debug=False)
131 # Second call is file handler
132 second_call = mock_logger.add.call_args_list[1]
133 assert_that(second_call.kwargs["level"]).is_equal_to("DEBUG")
136@patch("lintro.utils.logger_setup.logger")
137def test_setup_execution_logging_creates_run_dir(
138 mock_logger: MagicMock,
139 tmp_path: Path,
140) -> None:
141 """setup_execution_logging creates run directory if needed.
143 Args:
144 mock_logger: Mock logger object.
145 tmp_path: Temporary directory fixture.
146 """
147 run_dir = tmp_path / "logs" / "run1"
148 assert_that(run_dir.exists()).is_false()
150 setup_execution_logging(run_dir=run_dir)
152 assert_that(run_dir.exists()).is_true()