Coverage for tests / unit / pytest / test_pytest_cli_commands.py: 100%
109 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 pytest CLI command options."""
3from __future__ import annotations
5from unittest.mock import patch
7from assertpy import assert_that
8from click.testing import CliRunner
10from lintro.cli_utils.commands.test import test_command
13def test_test_command_collect_only() -> None:
14 """Test test command with --collect-only flag."""
15 runner = CliRunner()
16 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
17 mock_run.return_value = 0
18 runner.invoke(test_command, ["--collect-only"])
19 call_args = mock_run.call_args
20 assert_that(call_args.kwargs["tool_options"]).contains(
21 "pytest:collect_only=True",
22 )
25def test_test_command_fixtures() -> None:
26 """Test test command with --fixtures flag."""
27 runner = CliRunner()
28 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
29 mock_run.return_value = 0
30 runner.invoke(test_command, ["--fixtures"])
31 call_args = mock_run.call_args
32 assert_that(call_args.kwargs["tool_options"]).contains(
33 "pytest:list_fixtures=True",
34 )
37def test_test_command_fixture_info() -> None:
38 """Test test command with --fixture-info flag."""
39 runner = CliRunner()
40 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
41 mock_run.return_value = 0
42 runner.invoke(test_command, ["--fixture-info", "sample_data"])
43 call_args = mock_run.call_args
44 assert_that(call_args.kwargs["tool_options"]).contains(
45 "pytest:fixture_info=sample_data",
46 )
49def test_test_command_markers() -> None:
50 """Test test command with --markers flag."""
51 runner = CliRunner()
52 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
53 mock_run.return_value = 0
54 runner.invoke(test_command, ["--markers"])
55 call_args = mock_run.call_args
56 assert_that(call_args.kwargs["tool_options"]).contains(
57 "pytest:list_markers=True",
58 )
61def test_test_command_parametrize_help() -> None:
62 """Test test command with --parametrize-help flag."""
63 runner = CliRunner()
64 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
65 mock_run.return_value = 0
66 runner.invoke(test_command, ["--parametrize-help"])
67 call_args = mock_run.call_args
68 assert_that(call_args.kwargs["tool_options"]).contains(
69 "pytest:parametrize_help=True",
70 )
73def test_test_command_coverage_options() -> None:
74 """Test test command with coverage report options."""
75 runner = CliRunner()
76 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
77 mock_run.return_value = 0
78 runner.invoke(
79 test_command,
80 [
81 "--tool-options",
82 "pytest:coverage_html=htmlcov,pytest:coverage_xml=coverage.xml",
83 ],
84 )
85 call_args = mock_run.call_args
86 assert_that(call_args.kwargs["tool_options"]).contains(
87 "pytest:coverage_html=htmlcov",
88 )
89 assert_that(call_args.kwargs["tool_options"]).contains(
90 "pytest:coverage_xml=coverage.xml",
91 )
94def test_test_command_multiple_new_flags() -> None:
95 """Test test command with multiple new flags."""
96 runner = CliRunner()
97 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
98 mock_run.return_value = 0
99 runner.invoke(
100 test_command,
101 [
102 "--list-plugins",
103 "--markers",
104 "--collect-only",
105 ],
106 )
107 call_args = mock_run.call_args
108 tool_options = call_args.kwargs["tool_options"]
109 assert_that(tool_options).contains("pytest:list_plugins=True")
110 assert_that(tool_options).contains("pytest:list_markers=True")
111 assert_that(tool_options).contains("pytest:collect_only=True")
114def test_test_command_tool_options_without_prefix() -> None:
115 """Test test command with tool options without pytest: prefix."""
116 runner = CliRunner()
117 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
118 mock_run.return_value = 0
119 runner.invoke(
120 test_command,
121 ["--tool-options", "verbose=true,tb=long"],
122 )
123 call_args = mock_run.call_args
124 tool_opts = call_args.kwargs["tool_options"]
125 assert_that(tool_opts).contains("pytest:verbose=true")
126 assert_that(tool_opts).contains("pytest:tb=long")
129def test_test_command_tool_options_with_prefix() -> None:
130 """Test test command with tool options already prefixed."""
131 runner = CliRunner()
132 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
133 mock_run.return_value = 0
134 runner.invoke(
135 test_command,
136 ["--tool-options", "pytest:verbose=true"],
137 )
138 call_args = mock_run.call_args
139 tool_opts = call_args.kwargs["tool_options"]
140 assert_that(tool_opts).is_equal_to("pytest:verbose=true")
143def test_test_command_tool_options_mixed() -> None:
144 """Test test command with mixed prefixed and unprefixed tool options."""
145 runner = CliRunner()
146 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
147 mock_run.return_value = 0
148 runner.invoke(
149 test_command,
150 ["--tool-options", "verbose=true,pytest:tb=long"],
151 )
152 call_args = mock_run.call_args
153 tool_opts = call_args.kwargs["tool_options"]
154 assert_that(tool_opts).contains("pytest:verbose=true")
155 assert_that(tool_opts).contains("pytest:tb=long")
158def test_test_command_exit_code_success() -> None:
159 """Test test command propagates success exit code."""
160 runner = CliRunner()
161 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
162 mock_run.return_value = 0
163 result = runner.invoke(test_command, [])
164 assert_that(result.exit_code).is_equal_to(0)
167def test_test_command_exit_code_failure() -> None:
168 """Test test command propagates failure exit code."""
169 runner = CliRunner()
170 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
171 mock_run.return_value = 1
172 result = runner.invoke(test_command, [])
173 assert_that(result.exit_code).is_equal_to(1)
176def test_test_command_combined_options() -> None:
177 """Test test command with multiple options combined."""
178 runner = CliRunner()
179 with patch("lintro.cli_utils.commands.test.run_lint_tools_simple") as mock_run:
180 mock_run.return_value = 0
181 runner.invoke(
182 test_command,
183 [
184 ".",
185 "--exclude",
186 "*.venv",
187 "--include-venv",
188 "--output-format",
189 "markdown",
190 "--group-by",
191 "file",
192 "--verbose",
193 "--raw-output",
194 "--tool-options",
195 "maxfail=5",
196 ],
197 )
198 call_args = mock_run.call_args
199 assert_that(call_args.kwargs["exclude"]).is_equal_to("*.venv")
200 assert_that(call_args.kwargs["include_venv"]).is_true()
201 assert_that(call_args.kwargs["output_format"]).is_equal_to("markdown")
202 assert_that(call_args.kwargs["group_by"]).is_equal_to("file")
203 assert_that(call_args.kwargs["verbose"]).is_true()
204 assert_that(call_args.kwargs["raw_output"]).is_true()
205 assert_that(call_args.kwargs["tool_options"]).contains("pytest:maxfail=5")