test(05-02): add failing regressions for clear routing

- cover room-local clear rotation and upstream disconnect behavior
- assert strict routed-platform failures on incomplete room bindings
This commit is contained in:
Mikhail Putilovskij 2026-04-28 01:13:54 +03:00
parent 8a80d004fd
commit ae37476ddf
2 changed files with 171 additions and 1 deletions

View file

@ -14,6 +14,7 @@ from core.chat import ChatManager
from core.store import InMemoryStore
from sdk.interface import MessageChunk, MessageResponse, User, UserSettings
from sdk.mock import MockPlatformClient
from sdk.interface import PlatformError
class FakeDelegate:
@ -99,6 +100,12 @@ class FakeDelegate:
self.update_calls.append((user_id, action))
@pytest.fixture(autouse=True)
def clear_matrix_registry_env(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.delenv("MATRIX_AGENT_REGISTRY_PATH", raising=False)
monkeypatch.delenv("MATRIX_PLATFORM_BACKEND", raising=False)
@pytest.mark.asyncio
async def test_send_message_routes_by_room_agent_and_platform_chat_id():
store = InMemoryStore()
@ -159,6 +166,79 @@ async def test_stream_message_routes_by_room_agent_and_platform_chat_id():
]
@pytest.mark.asyncio
async def test_send_message_fails_fast_when_platform_chat_id_is_missing():
store = InMemoryStore()
chat_mgr = ChatManager(None, store)
await chat_mgr.get_or_create("u1", "C1", "matrix", "!room:example.org")
await set_room_meta(
store,
"!room:example.org",
{"agent_id": "agent-2"},
)
platform = RoutedPlatformClient(
chat_mgr=chat_mgr,
store=store,
delegates={"agent-2": FakeDelegate(name="agent-2")},
)
with pytest.raises(PlatformError, match="routing is incomplete") as exc_info:
await platform.send_message("u1", "C1", "hello")
assert exc_info.value.code == "MATRIX_ROUTE_INCOMPLETE"
@pytest.mark.asyncio
async def test_stream_message_fails_fast_when_agent_id_is_missing():
store = InMemoryStore()
chat_mgr = ChatManager(None, store)
await chat_mgr.get_or_create("u1", "C1", "matrix", "!room:example.org")
await set_room_meta(
store,
"!room:example.org",
{"platform_chat_id": "41"},
)
platform = RoutedPlatformClient(
chat_mgr=chat_mgr,
store=store,
delegates={"agent-2": FakeDelegate(name="agent-2")},
)
with pytest.raises(PlatformError, match="routing is incomplete") as exc_info:
await anext(platform.stream_message("u1", "C1", "hello"))
assert exc_info.value.code == "MATRIX_ROUTE_INCOMPLETE"
@pytest.mark.asyncio
async def test_routing_uses_repaired_room_metadata_without_runtime_backfill():
store = InMemoryStore()
chat_mgr = ChatManager(None, store)
await chat_mgr.get_or_create("u1", "C1", "matrix", "!room:example.org")
await set_room_meta(
store,
"!room:example.org",
{"platform_chat_id": "restored-41", "agent_id": "agent-2"},
)
delegate = FakeDelegate(name="agent-2")
platform = RoutedPlatformClient(
chat_mgr=chat_mgr,
store=store,
delegates={"agent-2": delegate},
)
await platform.send_message("u1", "C1", "hello")
assert delegate.send_calls == [
{
"user_id": "u1",
"chat_id": "restored-41",
"text": "hello",
"attachments": None,
}
]
@pytest.mark.asyncio
async def test_user_and_settings_delegate_to_default_client():
store = InMemoryStore()