Files
agentci/tests/test_opencode_support.py
T
StanPonomarev ce9f1e3d20
Publish container image / Build and push (push) Successful in 32s
refactor tests
2026-07-26 23:49:40 +02:00

152 lines
4.3 KiB
Python

import pytest
from agentci.integrations.opencode.readiness import api_contract_ready, models_ready
def test_api_contract_requires_session_message_and_abort_routes() -> None:
valid = {
"paths": {
"/global/health": {"get": {}},
"/provider": {"get": {}},
"/session": {"post": {}},
"/session/{sessionID}/message": {"post": {}},
"/session/{sessionID}/abort": {"post": {}},
}
}
assert api_contract_ready(valid)
del valid["paths"]["/session/{sessionID}/abort"]
assert not api_contract_ready(valid)
@pytest.mark.parametrize(
"document",
[
None,
{},
{"paths": []},
{
"paths": {
"/global/health": None,
"/provider": {"get": {}},
"/session": {"post": {}},
}
},
],
)
def test_api_contract_rejects_malformed_documents(document: object) -> None:
assert not api_contract_ready(document)
def provider_payload(
*,
connected: object = None,
status: str = "active",
toolcall: object = True,
variants: object = None,
) -> dict[str, object]:
selected_connected = ["openai"] if connected is None else connected
selected_variants = {"high": {}} if variants is None else variants
return {
"connected": selected_connected,
"all": [
{
"id": "openai",
"models": {
"model": {
"status": status,
"capabilities": {"toolcall": toolcall},
"variants": selected_variants,
}
},
}
],
}
@pytest.mark.parametrize(
("payload", "requirement", "expected"),
[
(provider_payload(), ("openai", "model", "high"), True),
(provider_payload(), ("openai", "model", None), True),
(provider_payload(connected=["anthropic"]), ("openai", "model", "high"), False),
(provider_payload(status="deprecated"), ("openai", "model", "high"), False),
(provider_payload(toolcall=False), ("openai", "model", "high"), False),
(provider_payload(variants={}), ("openai", "model", "high"), False),
(provider_payload(), ("openai", "missing", "high"), False),
],
)
def test_model_readiness_matrix(
payload: object, requirement: tuple[str, str, str | None], expected: bool
) -> None:
assert models_ready(payload, {requirement}) is expected
@pytest.mark.parametrize(
"payload",
[
None,
{},
{"connected": ["openai"], "all": None},
{"connected": ["openai"], "all": [{"id": [], "models": {}}]},
{
"connected": ["openai"],
"all": [
{
"id": "openai",
"models": {
"model": {
"status": "active",
"capabilities": None,
"variants": {"high": {}},
}
},
}
],
},
{
"connected": ["openai"],
"all": [
{
"id": "openai",
"models": {
"model": {
"status": "active",
"capabilities": {"toolcall": True},
"variants": None,
}
},
}
],
},
],
)
def test_model_readiness_rejects_malformed_payloads(payload: object) -> None:
assert not models_ready(payload, {("openai", "model", "high")})
def test_model_readiness_requires_all_configured_models() -> None:
payload = {
"connected": ["openai"],
"all": [
{
"id": "openai",
"models": {
"model": {
"status": "active",
"capabilities": {"toolcall": True},
"variants": {"high": {}},
}
},
}
],
}
assert not models_ready(
payload,
{
("openai", "model", "high"),
("openai", "other", None),
},
)