mirror of
https://github.com/obra/superpowers.git
synced 2026-05-09 18:49:04 +08:00
Adds _set_superpowers_root_default() to drill/cli.py, called at module import after load_dotenv(). PROJECT_ROOT resolves to evals/ post-lift; its parent is the superpowers repo root, which is the correct value for SUPERPOWERS_ROOT. Existing env values are respected as overrides via os.environ.setdefault. Tests: - helper sets default when var is unset - helper does not override when var is already set
84 lines
2.7 KiB
Python
84 lines
2.7 KiB
Python
"""Tests for CLI option parsing."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from click.testing import CliRunner
|
|
|
|
from drill.cli import main
|
|
|
|
|
|
class TestRunCommand:
|
|
def test_backend_required_without_models(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["run", "nonexistent"])
|
|
assert result.exit_code != 0
|
|
|
|
def test_n_default_is_1(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["run", "nonexistent", "--backend", "claude", "--n", "1"])
|
|
assert "Scenario not found" in result.output or result.exit_code != 0
|
|
|
|
def test_models_flag_accepted(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["run", "nonexistent", "--models", "claude,codex"])
|
|
assert "Scenario not found" in result.output or result.exit_code != 0
|
|
|
|
def test_n_must_be_positive(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["run", "nonexistent", "--backend", "claude", "--n", "0"])
|
|
assert result.exit_code != 0
|
|
|
|
|
|
class TestListCommand:
|
|
def test_lists_scenarios(self, tmp_path):
|
|
scenarios_dir = tmp_path / "scenarios"
|
|
scenarios_dir.mkdir()
|
|
(scenarios_dir / "test-scenario.yaml").write_text("""
|
|
scenario: test-scenario
|
|
description: "A test scenario"
|
|
user_posture: naive
|
|
setup:
|
|
helpers: []
|
|
assertions: []
|
|
turns: []
|
|
limits:
|
|
max_turns: 5
|
|
turn_timeout: 30
|
|
verify:
|
|
criteria: []
|
|
observe: false
|
|
""")
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["list", "--scenarios-dir", str(scenarios_dir)])
|
|
assert result.exit_code == 0
|
|
assert "test-scenario" in result.output
|
|
|
|
|
|
class TestCompareCommand:
|
|
def test_sweep_flag_accepted(self) -> None:
|
|
runner = CliRunner()
|
|
result = runner.invoke(main, ["compare", "nonexistent", "--sweep", "abc123"])
|
|
assert result.exit_code != 0 # No results dir, but flag is parsed
|
|
|
|
|
|
def test_set_superpowers_root_default_when_unset(monkeypatch, tmp_path):
|
|
"""When SUPERPOWERS_ROOT is unset, helper sets it to PROJECT_ROOT.parent."""
|
|
monkeypatch.delenv("SUPERPOWERS_ROOT", raising=False)
|
|
from drill.cli import _set_superpowers_root_default, PROJECT_ROOT
|
|
|
|
_set_superpowers_root_default()
|
|
|
|
import os
|
|
assert os.environ["SUPERPOWERS_ROOT"] == str(PROJECT_ROOT.parent)
|
|
|
|
|
|
def test_set_superpowers_root_default_respects_existing(monkeypatch):
|
|
"""When SUPERPOWERS_ROOT is already set, helper does not override."""
|
|
monkeypatch.setenv("SUPERPOWERS_ROOT", "/custom/path")
|
|
from drill.cli import _set_superpowers_root_default
|
|
|
|
_set_superpowers_root_default()
|
|
|
|
import os
|
|
assert os.environ["SUPERPOWERS_ROOT"] == "/custom/path"
|