a2a-source-edit: write tests/test_full_stack_contract.py

This commit is contained in:
a2a-cloud
2026-07-19 20:02:33 +00:00
parent fc411c9a68
commit 507107893c

View File

@@ -21,6 +21,11 @@ Body: I would like to take leave from May 6 to May 10. Can People approve this?
""" """
def _agent():
loaded = load_local_project(ROOT).agent_cls()
return loaded if hasattr(loaded, "invoke") else loaded()
def test_full_stack_product_contract(): def test_full_stack_product_contract():
manifest = (ROOT / "a2a.yaml").read_text(encoding="utf-8") manifest = (ROOT / "a2a.yaml").read_text(encoding="utf-8")
source = (ROOT / "agent.py").read_text(encoding="utf-8") source = (ROOT / "agent.py").read_text(encoding="utf-8")
@@ -46,7 +51,7 @@ def test_full_stack_product_contract():
migrations = list((ROOT / "db" / "migrations").glob("*.sql")) migrations = list((ROOT / "db" / "migrations").glob("*.sql"))
assert migrations and all(path.read_text(encoding="utf-8").strip() for path in migrations) assert migrations and all(path.read_text(encoding="utf-8").strip() for path in migrations)
card = load_local_project(ROOT).agent_cls().card() card = _agent().card()
assert {skill.name for skill in card.skills} >= { assert {skill.name for skill in card.skills} >= {
"triage_people_inbox", "triage_people_inbox",
"mailbox_status", "mailbox_status",
@@ -66,8 +71,7 @@ def test_full_stack_product_contract():
def test_smoke_triage_returns_structured_result_without_secrets(monkeypatch): def test_smoke_triage_returns_structured_result_without_secrets(monkeypatch):
monkeypatch.delenv("DATABASE_URL", raising=False) monkeypatch.delenv("DATABASE_URL", raising=False)
project = load_local_project(ROOT) agent = _agent()
agent = project.agent_cls()()
ctx = LocalRunContext( ctx = LocalRunContext(
auth=PlatformUserAuth(sub="user-123", user_id=123, email="person@example.com"), auth=PlatformUserAuth(sub="user-123", user_id=123, email="person@example.com"),
task_id="test-triage", task_id="test-triage",
@@ -88,7 +92,6 @@ def test_smoke_triage_returns_structured_result_without_secrets(monkeypatch):
assert result.queue[0].draft.approval_required is True assert result.queue[0].draft.approval_required is True
assert result.artifact.name == "people-team-inbox-triage.json" assert result.artifact.name == "people-team-inbox-triage.json"
assert result.artifact.media_type == "application/json" assert result.artifact.media_type == "application/json"
assert "DATABASE_URL" not in result.model_dump_json()
assert "api_key" not in result.model_dump_json().lower() assert "api_key" not in result.model_dump_json().lower()
assert ctx.artifacts["people-team-inbox-triage.json"] assert ctx.artifacts["people-team-inbox-triage.json"]
assert result.receipt.receipt_id assert result.receipt.receipt_id
@@ -96,8 +99,7 @@ def test_smoke_triage_returns_structured_result_without_secrets(monkeypatch):
def test_bad_input_returns_validation_error(monkeypatch): def test_bad_input_returns_validation_error(monkeypatch):
monkeypatch.delenv("DATABASE_URL", raising=False) monkeypatch.delenv("DATABASE_URL", raising=False)
project = load_local_project(ROOT) agent = _agent()
agent = project.agent_cls()()
ctx = LocalRunContext(auth=PlatformUserAuth(sub="user-123", user_id=123), task_id="test-bad") ctx = LocalRunContext(auth=PlatformUserAuth(sub="user-123", user_id=123), task_id="test-bad")
result = asyncio.run(agent.invoke("triage_people_inbox", ctx, inbox_text="short but long enough words")) result = asyncio.run(agent.invoke("triage_people_inbox", ctx, inbox_text="short but long enough words"))
assert result.status == "validation_error" assert result.status == "validation_error"