fire-planner/tests/test_cli.py
2026-05-07 17:06:19 +00:00

100 lines
2.9 KiB
Python

"""CLI smoke tests via click's CliRunner."""
from click.testing import CliRunner
from fire_planner.__main__ import cli
def test_simulate_smoke() -> None:
"""Run a tiny scenario through the CLI without writing to DB."""
runner = CliRunner()
result = runner.invoke(
cli,
[
"simulate",
"--scenario=cyprus-trinity-leave-y3-glide-rising",
"--n-paths=200",
"--horizon=20",
"--spending=100000",
"--nw-seed=1000000",
"--no-write-db",
],
catch_exceptions=False,
)
assert result.exit_code == 0, result.output
assert "Scenario: cyprus-trinity-leave-y3-glide-rising" in result.output
assert "success_rate" in result.output
def test_simulate_with_underscore_strategy() -> None:
"""guyton_klinger contains an underscore — the parser must handle it."""
runner = CliRunner()
result = runner.invoke(
cli,
[
"simulate",
"--scenario=uk-guyton_klinger-leave-y1-glide-static_60_40",
"--n-paths=100",
"--horizon=15",
"--spending=80000",
"--nw-seed=1500000",
"--no-write-db",
],
catch_exceptions=False,
)
assert result.exit_code == 0, result.output
assert "uk-guyton_klinger-leave-y1-glide-static_60_40" in result.output
def test_simulate_bad_scenario_id() -> None:
runner = CliRunner()
result = runner.invoke(cli, ["simulate", "--scenario=nope"], catch_exceptions=False)
assert result.exit_code != 0
def test_simulate_vpw_floor_with_floor_flag() -> None:
"""vpw_floor strategy + --floor=40000 should run without error."""
runner = CliRunner()
result = runner.invoke(
cli,
[
"simulate",
"--scenario=cyprus-vpw_floor-leave-y2-glide-rising",
"--n-paths=200",
"--horizon=20",
"--spending=60000",
"--nw-seed=1500000",
"--floor=40000",
"--no-write-db",
],
catch_exceptions=False,
)
assert result.exit_code == 0, result.output
assert "cyprus-vpw_floor" in result.output
def test_simulate_uae_smoke() -> None:
runner = CliRunner()
result = runner.invoke(
cli,
[
"simulate",
"--scenario=uae-vpw_floor-leave-y2-glide-rising",
"--n-paths=200",
"--horizon=20",
"--spending=60000",
"--nw-seed=1500000",
"--floor=40000",
"--no-write-db",
],
catch_exceptions=False,
)
assert result.exit_code == 0, result.output
assert "uae-vpw_floor" in result.output
def test_help_lists_commands() -> None:
runner = CliRunner()
result = runner.invoke(cli, ["--help"], catch_exceptions=False)
assert result.exit_code == 0
for cmd in ("ingest", "simulate", "recompute-all", "migrate", "serve"):
assert cmd in result.output