Coverage for tests/test_cli.py: 100%
94 statements
« prev ^ index » next coverage.py v7.2.6, created at 2023-05-30 11:16 +0200
« prev ^ index » next coverage.py v7.2.6, created at 2023-05-30 11:16 +0200
1import os
2import shutil
4from typer.testing import CliRunner
6from src.su6.cli import _check_tool, app
7from src.su6.core import EXIT_CODE_COMMAND_NOT_FOUND
9runner = CliRunner()
11from ._shared import BAD_CODE, EXAMPLES_PATH, FIXABLE_CODE, GOOD_CODE
14def test_ruff_good():
15 result = runner.invoke(app, ["ruff", GOOD_CODE])
16 assert result.exit_code == 0
19def test_ruff_bad():
20 result = runner.invoke(app, ["ruff", BAD_CODE])
21 assert result.exit_code == 1
24def test_black_good():
25 result = runner.invoke(app, ["black", GOOD_CODE])
26 assert result.exit_code == 0
29def test_black_bad():
30 result = runner.invoke(app, ["black", BAD_CODE])
31 assert result.exit_code == 1
34def test_black_fix():
35 shutil.copyfile(BAD_CODE, FIXABLE_CODE)
36 try:
37 # 1. assert error
38 result = runner.invoke(app, ["black", FIXABLE_CODE])
39 assert result.exit_code == 1
41 # 2. fix
42 result = runner.invoke(app, ["--verbosity", "3", "black", FIXABLE_CODE, "--fix"])
43 assert result.exit_code == 0
45 # 3. assert success
46 result = runner.invoke(app, ["black", FIXABLE_CODE])
47 assert result.exit_code == 0
48 finally:
49 # cleanup
50 os.unlink(FIXABLE_CODE)
53def test_mypy_good():
54 result = runner.invoke(app, ["mypy", GOOD_CODE])
55 assert result.exit_code == 0
58def test_mypy_bad():
59 result = runner.invoke(app, ["mypy", BAD_CODE])
60 assert result.exit_code == 1
63def test_bandit_good():
64 result = runner.invoke(app, ["bandit", GOOD_CODE])
65 assert result.exit_code == 0
68def test_bandit_bad():
69 result = runner.invoke(app, ["bandit", BAD_CODE])
70 assert result.exit_code == 1
73def test_isort_good():
74 result = runner.invoke(app, ["isort", GOOD_CODE])
75 assert result.exit_code == 0
78def test_isort_bad():
79 result = runner.invoke(app, ["isort", BAD_CODE])
80 assert result.exit_code == 1
83def test_isort_fix():
84 shutil.copyfile(BAD_CODE, FIXABLE_CODE)
85 try:
86 # 1. assert error
87 result = runner.invoke(app, ["isort", FIXABLE_CODE])
88 assert result.exit_code == 1
90 # 2. fix
91 result = runner.invoke(app, ["--verbosity", "3", "isort", FIXABLE_CODE, "--fix"])
92 assert result.exit_code == 0
94 # 3. assert success
95 result = runner.invoke(app, ["isort", FIXABLE_CODE])
96 assert result.exit_code == 0
97 finally:
98 # cleanup
99 os.unlink(FIXABLE_CODE)
102def test_all_fix():
103 shutil.copyfile(BAD_CODE, FIXABLE_CODE)
104 try:
105 # 1. assert error
106 result = runner.invoke(app, ["isort", FIXABLE_CODE])
107 assert result.exit_code == 1
109 result = runner.invoke(app, ["black", FIXABLE_CODE])
110 assert result.exit_code == 1
112 # 2. fix
113 result = runner.invoke(app, ["--verbosity", "3", "fix", FIXABLE_CODE, "--ignore-uninstalled"])
114 assert result.exit_code == 0
116 # 3. assert success
117 result = runner.invoke(app, ["isort", FIXABLE_CODE])
118 assert result.exit_code == 0
120 result = runner.invoke(app, ["black", FIXABLE_CODE])
121 assert result.exit_code == 0
122 finally:
123 # cleanup
124 os.unlink(FIXABLE_CODE)
127def test_pydocstyle_good():
128 result = runner.invoke(app, ["pydocstyle", GOOD_CODE])
129 assert result.exit_code == 0
132def test_pydocstyle_bad():
133 result = runner.invoke(app, ["pydocstyle", BAD_CODE])
134 assert result.exit_code == 1
137def test_all_good():
138 result = runner.invoke(app, ["all", GOOD_CODE])
139 assert result.exit_code == 0
141 result = runner.invoke(app, ["all", GOOD_CODE, "--ignore-uninstalled"])
142 # can't really test without having everything installed,
143 # but at least we can make sure the flag doen't crash anything!
144 assert result.exit_code == 0
147def test_all_bad():
148 result = runner.invoke(app, ["all", BAD_CODE])
149 assert result.exit_code == 1
152### test_pytest is kind of an issue since this seems to hang the first running pytest session
155def test_command_not_found():
156 fake_tool = _check_tool("xxx-should-never-exist-xxx")
158 assert fake_tool == EXIT_CODE_COMMAND_NOT_FOUND
161def test_custom_include_exclude():
162 code_file = str(EXAMPLES_PATH / "black_good_mypy_bad.py")
164 result = runner.invoke(app, ["--config", str(EXAMPLES_PATH / "only_black.toml"), "all", code_file])
165 assert result.exit_code == 0
167 result = runner.invoke(app, ["--config", str(EXAMPLES_PATH / "only_mypy.toml"), "all", code_file])
168 assert result.exit_code == 1