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:
parent
8a80d004fd
commit
ae37476ddf
2 changed files with 171 additions and 1 deletions
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue