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