BoilerWorks

boilerworks / tests / test_cli.py
Source Blame History 104 lines
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

Keyboard Shortcuts

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