fix(cli): require --round-cap >= 1

This commit is contained in:
2026-09-20 17:40:29 +02:00
parent 10f811e80e
commit c46e636d12
3 changed files with 47 additions and 2 deletions
+1 -1
View File
@@ -92,7 +92,7 @@ usage: pf1e-sim [-h] --map MAP [--side NAME [FILE ...]] [--runs RUNS]
| `--side NAME [FILE ...]` | Camp `NAME` avec un ou plusieurs JSON de monstres ; répétable pour chaque camp | — |
| `--runs RUNS` | Nombre de combats simulés | `1000` |
| `--seed SEED` | Graine du générateur aléatoire | `1` |
| `--round-cap ROUND_CAP` | Plafond de rounds par combat (au-delà, combat nul) | `100` |
| `--round-cap ROUND_CAP` | Plafond de rounds par combat, entier ≥ 1 (au-delà, combat nul) | `100` |
| `--transcript` | Imprimer le déroulé du premier combat **en tableau** avant le rapport (voir ci-dessous) | désactivé |
| `--simple-monster-death` | Mort simplifiée des monstres : `hp ≤ 0` au lieu de `hp ≤ -CON` (les PJ ne sont jamais affectés) | désactivé |
+4 -1
View File
@@ -105,6 +105,9 @@ def render_transcript_table(transcript: Sequence[str]) -> str:
def _build_spec(args: argparse.Namespace) -> EncounterSpec:
if args.round_cap < 1:
msg = f"--round-cap must be >= 1, got {args.round_cap}"
raise CliError(msg)
map_spec = load_map(args.map)
provided = [tuple(raw) for raw in args.side]
provided_names = {raw[0] for raw in provided}
@@ -189,7 +192,7 @@ def main(argv: list[str] | None = None) -> int:
"--round-cap",
type=int,
default=100,
help="max rounds per battle (default: 100)",
help="max rounds per battle, >= 1 (default: 100)",
)
parser.add_argument(
"--transcript",
+42
View File
@@ -84,6 +84,48 @@ def test_cli_rejects_duplicate_side_names(capsys: pytest.CaptureFixture[str]) ->
assert "players" in err
def test_cli_rejects_negative_round_cap(capsys: pytest.CaptureFixture[str]) -> None:
rc = main(
[
"--map",
str(MAP),
"--side",
"players",
str(GOBLIN),
"--side",
"monsters",
str(ORC),
"--runs",
"10",
"--round-cap",
"-3",
]
)
assert rc == 2
assert "--round-cap must be >= 1" in capsys.readouterr().err
def test_cli_rejects_zero_round_cap(capsys: pytest.CaptureFixture[str]) -> None:
rc = main(
[
"--map",
str(MAP),
"--side",
"players",
str(GOBLIN),
"--side",
"monsters",
str(ORC),
"--runs",
"10",
"--round-cap",
"0",
]
)
assert rc == 2
assert "--round-cap must be >= 1" in capsys.readouterr().err
def test_cli_transcript_prints_first_battle_log(capsys: pytest.CaptureFixture[str]) -> None:
rc = main(
[