Files

47 lines
2.0 KiB
Python

"""R7 · R9 · R10 · R12: commands, --json and exit codes (0 fine · 1 over --max-usd · 2 error)."""
import json
import pytest
from tcost.cli import main
def run(capsys, *argv):
with pytest.raises(SystemExit) as end:
main(list(argv))
out = capsys.readouterr()
return end.value.code, out.out, out.err
def test_count_and_gate(capsys, folder):
code, out, _ = run(capsys, "count", str(folder / "prompts"), "--out", "100")
assert code == 0 and "long.prompt" in out and "gpt-5.4-nano /call" in out
code, _, err = run(capsys, "count", str(folder / "prompts" / "long.prompt"), "--out", "200", "--max-usd", "0.0002")
assert code == 1 and "more than --max-usd" in err
code, out, _ = run(capsys, "count", str(folder / "prompts" / "short.txt"), "--json", "--model", "gpt-4.1-mini")
assert code == 0 and json.loads(out)["rows"][0]["tokens"] > 0
def test_unknown_model_and_missing_file(capsys, folder):
code, _, err = run(capsys, "count", str(folder / "prompts"), "--model", "gpt-9")
assert code == 2 and "unknown model 'gpt-9'" in err
code, _, err = run(capsys, "count", str(folder / "nothing.txt"))
assert code == 2 and "no such file" in err
def test_compare_and_budget(capsys, folder):
code, out, _ = run(capsys, "compare", str(folder / "prompts" / "long.prompt"), "--model", "gpt-4.1-mini",
"--model", "gpt-5.4-nano", "--out", "100")
assert code == 0 and "cheaper than gpt-4.1-mini" in out
code, out, _ = run(capsys, "budget", "1.0", str(folder / "prompts" / "short.txt"), "--out", "100", "--json")
rows = json.loads(out)
assert code == 0 and rows["gpt-5.4-nano"]["calls"] > rows["gpt-4.1-mini"]["calls"]
def test_usage_and_workflow(capsys, folder):
code, out, _ = run(capsys, "usage", str(folder / "runs"), "--per-day", "1000")
assert code == 0 and "2 request(s)" in out and "skipped 1" in out and "month:" in out
code, out, _ = run(capsys, "workflow", str(folder / "reference"), "--json")
steps = json.loads(out)["steps"]
assert code == 0 and len(steps) == 6