BoilerWorks

boilerworks / tests / test_cli.py
Blame History Raw 105 lines
1
"""Tests for boilerworks.cli — Click command interface."""
2
3
from __future__ import annotations
4
5
from click.testing import CliRunner
6
7
from boilerworks.cli import main
8
9
10
class TestHelpOutput:
11
def test_main_help(self) -> None:
12
runner = CliRunner()
13
result = runner.invoke(main, ["--help"])
14
assert result.exit_code == 0
15
assert "setup" in result.output
16
assert "init" in result.output
17
assert "bootstrap" in result.output
18
assert "list" in result.output
19
20
def test_list_help(self) -> None:
21
runner = CliRunner()
22
result = runner.invoke(main, ["list", "--help"])
23
assert result.exit_code == 0
24
assert "--size" in result.output
25
assert "--language" in result.output
26
assert "--status" in result.output
27
28
def test_init_help(self) -> None:
29
runner = CliRunner()
30
result = runner.invoke(main, ["init", "--help"])
31
assert result.exit_code == 0
32
assert "--manifest" in result.output
33
assert "--output" in result.output
34
assert "--dry-run" in result.output
35
36
def test_bootstrap_help(self) -> None:
37
runner = CliRunner()
38
result = runner.invoke(main, ["bootstrap", "--help"])
39
assert result.exit_code == 0
40
41
def test_version(self) -> None:
42
runner = CliRunner()
43
result = runner.invoke(main, ["--version"])
44
assert result.exit_code == 0
45
assert "0.1.0" in result.output
46
47
48
class TestListCommand:
49
def test_list_all(self) -> None:
50
runner = CliRunner()
51
result = runner.invoke(main, ["list"])
52
assert result.exit_code == 0
53
assert "django-nextjs" in result.output
54
assert "fastapi-micro" in result.output
55
assert "astro-site" in result.output
56
57
def test_list_filter_size_micro(self) -> None:
58
runner = CliRunner()
59
result = runner.invoke(main, ["list", "--size", "micro"])
60
assert result.exit_code == 0
61
assert "fastapi-micro" in result.output
62
assert "django-nextjs" not in result.output
63
64
def test_list_filter_size_edge(self) -> None:
65
runner = CliRunner()
66
result = runner.invoke(main, ["list", "--size", "edge"])
67
assert result.exit_code == 0
68
assert "astro-site" in result.output
69
assert "django-nextjs" not in result.output
70
71
def test_list_filter_language_python(self) -> None:
72
runner = CliRunner()
73
result = runner.invoke(main, ["list", "--language", "python"])
74
assert result.exit_code == 0
75
assert "django-nextjs" in result.output
76
assert "nestjs-nextjs" not in result.output
77
78
def test_list_filter_size_and_language(self) -> None:
79
runner = CliRunner()
80
result = runner.invoke(main, ["list", "--size", "micro", "--language", "python"])
81
assert result.exit_code == 0
82
assert "fastapi-micro" in result.output
83
assert "nestjs-micro" not in result.output
84
85
def test_list_filter_status_done(self) -> None:
86
runner = CliRunner()
87
result = runner.invoke(main, ["list", "--status", "done"])
88
assert result.exit_code == 0
89
assert "django-nextjs" in result.output
90
91
def test_list_no_results_shows_message(self) -> None:
92
runner = CliRunner()
93
# rust + full → no results
94
result = runner.invoke(main, ["list", "--size", "full", "--language", "rust"])
95
assert result.exit_code == 0
96
assert "No templates match" in result.output
97
98
99
class TestBootstrapCommand:
100
def test_bootstrap_runs(self) -> None:
101
runner = CliRunner()
102
result = runner.invoke(main, ["bootstrap"])
103
assert result.exit_code == 0
104
assert "Bootstrap Plan" in result.output or "v1" in result.output or "v2" in result.output
105

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button