core/tests/test_frontier_compare_wave1.py
Shay 4d26e1503b
fix(tests): make frontier_compare viewer test resilient to copy refreshes (#67)
test_frontier_compare_report_viewer_exists was failing on main against
the current report_viewer.html because two verbatim substring checks
no longer matched the viewer's UI copy:

  - "Drop report JSON"  →  viewer now says "Drop JSON report" (order swapped)
  - "No network calls"  →  viewer now says "no network calls" (lowercase)

Both copy refreshes were behavior-preserving — drop-zone affordance
and network-free trust boundary are both intact in the viewer. The
test was coupling to verbatim phrasing rather than to the load-bearing
affordances.

Switch to case-insensitive substring checks that pin what actually
matters:
  - "frontier compare" — viewer identity
  - "drop" AND "json" together — drop-zone affordance, order-independent
  - "no network calls" — trust boundary (case-insensitive)
  - fetch(/XMLHttpRequest still hard-banned (case-sensitive — these
    are JS API surface, not human-readable copy)

Pre-existing failure flagged in PR #66's body as out-of-scope cleanup;
this is that cleanup.
2026-05-20 15:13:38 -07:00

98 lines
3.3 KiB
Python

from __future__ import annotations
import json
from pathlib import Path
from evals.frontier_compare.__main__ import main
from evals.frontier_compare.runner import (
BenchmarkReport,
SuiteReport,
format_human_report,
run_all,
run_suite,
write_report,
)
def test_frontier_compare_run_all_report_shape() -> None:
report = run_all()
assert isinstance(report, BenchmarkReport)
assert report.benchmark_family == "frontier_compare_wave1"
assert report.model == "core"
assert report.mode == "native"
assert {suite.suite for suite in report.suites} == {
"determinism",
"truth_lock",
"axis_orthogonality",
}
assert report.case_count > 0
payload = report.as_dict()
assert payload["summary"]["suite_count"] == 3
assert payload["summary"]["case_count"] == report.case_count
assert 0.0 <= payload["summary"]["primary_score"] <= 1.0
def test_frontier_compare_individual_suites_are_json_stable() -> None:
for suite_name in ("determinism", "truth_lock", "axis_orthogonality"):
report = run_suite(suite_name)
assert isinstance(report, SuiteReport)
assert report.suite == suite_name
payload = report.as_dict()
encoded = json.dumps(payload, sort_keys=True)
assert suite_name in encoded
assert payload["case_count"] == len(payload["cases"])
assert 0.0 <= payload["primary_score"] <= 1.0
def test_frontier_compare_write_report(tmp_path: Path) -> None:
report = run_suite("truth_lock")
target = tmp_path / "frontier_wave1.json"
write_report(report, target)
loaded = json.loads(target.read_text(encoding="utf-8"))
assert loaded["suite"] == "truth_lock"
assert loaded["case_count"] == len(loaded["cases"])
def test_frontier_compare_human_report_contains_suite_status() -> None:
report = run_suite("determinism")
text = format_human_report(report)
assert "frontier_compare_wave1" in text
assert "determinism" in text
assert "score=" in text
def test_frontier_compare_cli_json_and_report(tmp_path: Path, capsys) -> None:
target = tmp_path / "report.json"
code = main(["--suite", "truth_lock", "--json", "--report", str(target)])
out = capsys.readouterr().out
assert code in {0, 1}
printed = json.loads(out)
written = json.loads(target.read_text(encoding="utf-8"))
assert printed == written
assert printed["suite"] == "truth_lock"
def test_frontier_compare_report_viewer_exists() -> None:
viewer = Path("evals/frontier_compare/ui/report_viewer.html")
text = viewer.read_text(encoding="utf-8")
# Case-insensitive substring checks — pin the viewer's load-bearing
# affordances and trust-boundary copy without coupling to verbatim
# phrasing. Earlier verbatim checks ("Drop report JSON",
# "No network calls") broke when the viewer's copy was refreshed
# to "Drop JSON report" / "no network calls" without any change in
# behavior.
lowered = text.lower()
assert "frontier compare" in lowered
# Drop-zone affordance: order-independent — both tokens must be
# present so a user can paste a report into the viewer.
assert "drop" in lowered and "json" in lowered
# Trust boundary: viewer must remain network-free.
assert "no network calls" in lowered
assert "fetch(" not in text
assert "XMLHttpRequest" not in text