|
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
|
|