"""Tests for the eval-suite schema and helpers.""" import json from pathlib import Path from skill_eval_runner.suite import EvalCase, load_suite def test_case_id_falls_back_to_name() -> None: """case_id uses id when present, else name.""" assert EvalCase(name="n", prompt="p").case_id() == "n" assert EvalCase(name="n", id="x", prompt="p").case_id() == "x" def test_dir_name_includes_target_when_set() -> None: """dir_name appends the target when set, omits it otherwise.""" with_target = EvalCase(name="n", id="x", target="svc", prompt="p") without_target = EvalCase(name="n", id="x", prompt="p") assert with_target.dir_name() == "eval-x-svc" assert without_target.dir_name() == "eval-x" def test_load_suite(tmp_path: Path) -> None: """A well-formed evals.json parses into EvalCase models.""" path = tmp_path / "evals.json" path.write_text( json.dumps({"evals": [{"name": "n", "prompt": "p", "assertions": ["a"]}]}) ) suite = load_suite(path) assert len(suite.evals) == 1 assert suite.evals[0].assertions == ["a"]