Coverage for tests / unit / utils / console / test_logger_results.py: 100%
26 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 ThreadSafeConsoleLogger tool result output methods.
3Tests cover the print_tool_result method and its handling of various
4actions and output content.
5"""
7from __future__ import annotations
9from unittest.mock import patch
11from assertpy import assert_that
13from lintro.enums.action import Action
14from lintro.utils.console.logger import ThreadSafeConsoleLogger
17def test_print_tool_result_outputs_content(logger: ThreadSafeConsoleLogger) -> None:
18 """Verify print_tool_result displays tool output when provided.
20 Non-empty output should be displayed to the console, followed by
21 a blank line for visual separation.
23 Args:
24 logger: ThreadSafeConsoleLogger instance fixture.
25 """
26 with patch.object(logger, "console_output") as mock_output:
27 logger.print_tool_result("ruff", "Some output", 5)
28 assert_that(mock_output.call_count).is_greater_than(0)
31def test_print_tool_result_skips_empty_output(logger: ThreadSafeConsoleLogger) -> None:
32 """Verify print_tool_result does nothing when output is empty.
34 Empty output indicates no issues or nothing to display, so the
35 method should produce no console output.
37 Args:
38 logger: ThreadSafeConsoleLogger instance fixture.
39 """
40 with patch.object(logger, "console_output") as mock_output:
41 logger.print_tool_result("ruff", "", 0)
42 mock_output.assert_not_called()
45def test_print_tool_result_includes_metadata_for_check_action(
46 logger: ThreadSafeConsoleLogger,
47) -> None:
48 """Verify print_tool_result parses metadata for CHECK action.
50 When action is CHECK, raw output should be parsed for additional
51 metadata messages like fixable issue counts.
53 Args:
54 logger: ThreadSafeConsoleLogger instance fixture.
55 """
56 with (
57 patch.object(logger, "console_output"),
58 patch.object(logger, "_print_metadata_messages") as mock_meta,
59 ):
60 logger.print_tool_result(
61 "ruff",
62 "output",
63 5,
64 raw_output_for_meta="3 fixable issues",
65 action=Action.CHECK,
66 )
67 mock_meta.assert_called_once_with("3 fixable issues")
70def test_print_tool_result_skips_metadata_for_fix_action(
71 logger: ThreadSafeConsoleLogger,
72) -> None:
73 """Verify print_tool_result skips metadata parsing for FIX action.
75 FIX action already resolves issues, so metadata about fixable issues
76 is not relevant and should not be displayed.
78 Args:
79 logger: ThreadSafeConsoleLogger instance fixture.
80 """
81 with (
82 patch.object(logger, "console_output"),
83 patch.object(logger, "_print_metadata_messages") as mock_meta,
84 ):
85 logger.print_tool_result(
86 "ruff",
87 "output",
88 5,
89 raw_output_for_meta="3 fixable issues",
90 action=Action.FIX,
91 )
92 mock_meta.assert_not_called()
95def test_print_tool_result_handles_pytest_for_test_action(
96 logger: ThreadSafeConsoleLogger,
97) -> None:
98 """Verify print_tool_result displays pytest results for TEST action.
100 When the tool is pytest and action is TEST, special pytest result
101 formatting should be applied to show pass/fail status clearly.
103 Args:
104 logger: ThreadSafeConsoleLogger instance fixture.
105 """
106 with (
107 patch.object(logger, "console_output"),
108 patch.object(logger, "_print_pytest_results") as mock_pytest,
109 ):
110 logger.print_tool_result(
111 "pytest",
112 "test output",
113 0,
114 action=Action.TEST,
115 success=True,
116 )
117 expected_success = True
118 mock_pytest.assert_called_once_with("test output", expected_success)