Files
superpowers/evals/tests/test_cli.py
Jesse Vincent b3817bba4f evals: default SUPERPOWERS_ROOT to parent of evals/ if unset
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
2026-05-06 12:19:39 -07:00

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"