Kiy-K's picture
Restore full Space app with bucket model support
31c8075 verified
Raw
History Blame Contribute Delete
2.94 kB
from datetime import timedelta
import pytest
from pydantic import ValidationError
from arena.models import (
CodebaseArchive,
Criteria,
Run,
RunEvent,
RunRequest,
ValidationCheck,
ValidationReport,
utc_now,
)
def test_run_view_exposes_prompt_state_without_rejoin_token() -> None:
request = RunRequest(
prompt="Build a small FastAPI app",
criteria=[Criteria(text="pytest must pass")],
user_tests=["uv run pytest"],
)
run = Run(
id="run-1",
prompt=request.prompt,
criteria=request.criteria,
user_tests=request.user_tests,
rejoin_token="r" * 24,
validation_checks=[
ValidationCheck(
id="check-1",
name="tests",
command="uv run pytest",
source="user",
)
],
)
view = run.to_view()
assert view.id == "run-1"
assert view.prompt == "Build a small FastAPI app"
assert view.criteria[0].text == "pytest must pass"
assert view.validation_checks[0].source == "user"
assert not hasattr(view, "rejoin_token")
def test_run_view_orders_events_by_created_at() -> None:
later = utc_now() + timedelta(seconds=5)
earlier = utc_now()
run = Run(
id="run-1",
prompt="Build a CLI",
rejoin_token="r" * 24,
events=[
RunEvent(id="event-2", message="Implemented CLI", created_at=later),
RunEvent(id="event-1", message="Planned tasks", created_at=earlier),
],
)
view = run.to_view()
assert [event.id for event in view.events] == ["event-1", "event-2"]
def test_completed_run_requires_validation_report() -> None:
with pytest.raises(ValidationError):
Run(
id="run-1",
prompt="Build a CLI",
rejoin_token="r" * 24,
status="completed",
)
run = Run(
id="run-1",
prompt="Build a CLI",
rejoin_token="r" * 24,
status="completed",
validation_report=ValidationReport(run_id="run-1", passed=True, summary="ok"),
codebase_archive=CodebaseArchive(pointer="local-archive://run-1", file_count=3, size_bytes=1024),
)
assert run.validation_report is not None
def test_completed_run_requires_codebase_archive() -> None:
with pytest.raises(ValidationError):
Run(
id="run-1",
prompt="Build a CLI",
rejoin_token="r" * 24,
status="completed",
validation_report=ValidationReport(run_id="run-1", passed=True, summary="ok"),
)
def test_run_rejects_validation_report_for_different_run() -> None:
with pytest.raises(ValidationError):
Run(
id="run-1",
prompt="Build a CLI",
rejoin_token="r" * 24,
validation_report=ValidationReport(run_id="run-2", passed=True, summary="ok"),
)