from agentci.adapters.opencode_support 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) def test_model_readiness_requires_tools_and_configured_variant() -> None: payload = { "connected": ["openai"], "all": [ { "id": "openai", "models": { "model": { "status": "active", "capabilities": {"toolcall": True}, "variants": {"high": {}}, } }, } ], } assert models_ready(payload, {("openai", "model", "high")}) assert not models_ready(payload, {("openai", "model", "missing")}) payload["all"][0]["models"]["model"]["capabilities"]["toolcall"] = False assert not models_ready(payload, {("openai", "model", "high")})