Add focused API contract tests for chat idempotency, cursor pagination, and node routing behavior using isolated local fixtures and mocked upstream inference. Made-with: Cursor
61 lines
2.3 KiB
Python
61 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
|
|
def _create_chat(client, agent_id: str, node_id: str, ref: str) -> str:
|
|
r = client.post(
|
|
"/api/chats",
|
|
json={
|
|
"agent_id": agent_id,
|
|
"node_id": node_id,
|
|
"source": "web",
|
|
"external_chat_ref": ref,
|
|
},
|
|
)
|
|
assert r.status_code == 200, r.text
|
|
return r.json()["chat"]["chat_id"]
|
|
|
|
|
|
def test_send_routes_to_noda1(sofiia_client, sofiia_module, monkeypatch):
|
|
calls = []
|
|
|
|
def _router_url(node_id: str) -> str:
|
|
return {"NODA1": "http://noda1-router.test", "NODA2": "http://noda2-router.test"}.get(node_id, "")
|
|
|
|
async def _fake_infer(base_url, agent_id, text, **kwargs):
|
|
calls.append({"base_url": base_url, "agent_id": agent_id, "text": text})
|
|
return {"response": "ok-n1", "backend": "fake", "model": "fake-model"}
|
|
|
|
monkeypatch.setattr(sofiia_module, "get_router_url", _router_url)
|
|
monkeypatch.setattr(sofiia_module, "infer", _fake_infer)
|
|
|
|
cid = _create_chat(sofiia_client, "monitor", "NODA1", "route-n1")
|
|
r = sofiia_client.post(f"/api/chats/{cid}/send", json={"text": "ping-n1"})
|
|
assert r.status_code == 200, r.text
|
|
body = r.json()
|
|
assert body["accepted"] is True
|
|
assert body["node_id"] == "NODA1"
|
|
assert calls and calls[-1]["base_url"] == "http://noda1-router.test"
|
|
|
|
|
|
def test_send_routes_to_noda2(sofiia_client, sofiia_module, monkeypatch):
|
|
calls = []
|
|
|
|
def _router_url(node_id: str) -> str:
|
|
return {"NODA1": "http://noda1-router.test", "NODA2": "http://noda2-router.test"}.get(node_id, "")
|
|
|
|
async def _fake_infer(base_url, agent_id, text, **kwargs):
|
|
calls.append({"base_url": base_url, "agent_id": agent_id, "text": text})
|
|
return {"response": "ok-n2", "backend": "fake", "model": "fake-model"}
|
|
|
|
monkeypatch.setattr(sofiia_module, "get_router_url", _router_url)
|
|
monkeypatch.setattr(sofiia_module, "infer", _fake_infer)
|
|
|
|
cid = _create_chat(sofiia_client, "sofiia", "NODA2", "route-n2")
|
|
r = sofiia_client.post(f"/api/chats/{cid}/send", json={"text": "ping-n2"})
|
|
assert r.status_code == 200, r.text
|
|
body = r.json()
|
|
assert body["accepted"] is True
|
|
assert body["node_id"] == "NODA2"
|
|
assert calls and calls[-1]["base_url"] == "http://noda2-router.test"
|
|
|