hermes-agent / tests /gateway /test_api_server_room_dispatch.py
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
108e227 verified
Raw History Blame Contribute Delete
2.73 kB
"""Compatibility seams for extracted RoomLink dispatch handling."""
import json
import sys
from unittest.mock import AsyncMock, MagicMock
import pytest
from gateway.platforms import api_server
from gateway.platforms import api_server_room_dispatch as room_dispatch
def test_api_server_keeps_room_dispatch_methods_on_the_adapter_class():
assert {
"_ensure_hosted_member_session",
"_normalize_room_dispatch",
} <= api_server.APIServerAdapter.__dict__.keys()
@pytest.mark.asyncio
async def test_hidden_member_session_method_delegates(monkeypatch):
adapter = api_server.APIServerAdapter.__new__(api_server.APIServerAdapter)
dispatch = object()
implementation = AsyncMock(return_value="room_session")
monkeypatch.setattr(
room_dispatch,
"_ensure_hosted_member_session",
implementation,
)
assert await adapter._ensure_hosted_member_session(dispatch) == "room_session"
implementation.assert_awaited_once_with(adapter, dispatch)
@pytest.mark.asyncio
async def test_room_dispatch_normalizer_method_delegates(monkeypatch):
adapter = api_server.APIServerAdapter.__new__(api_server.APIServerAdapter)
request = object()
body = {"input": "hello"}
expected = ({"input": "normalized"}, None)
implementation = AsyncMock(return_value=expected)
monkeypatch.setattr(room_dispatch, "_normalize_room_dispatch", implementation)
assert await adapter._normalize_room_dispatch(request, body) == expected
implementation.assert_awaited_once_with(
adapter,
request,
body,
_api_server=sys.modules[api_server.__name__],
)
@pytest.mark.asyncio
async def test_non_room_run_body_passes_through_unchanged():
adapter = api_server.APIServerAdapter.__new__(api_server.APIServerAdapter)
adapter._room_grant_token = MagicMock(return_value="")
request = object()
body = {"input": "ordinary run"}
normalized, error = await adapter._normalize_room_dispatch(request, body)
assert normalized is body
assert error is None
adapter._room_grant_token.assert_called_once_with(request)
@pytest.mark.asyncio
async def test_room_dispatch_rejects_extra_fields_before_grant_verification():
adapter = api_server.APIServerAdapter.__new__(api_server.APIServerAdapter)
adapter._room_grant_token = MagicMock(return_value="room-grant")
request = object()
body = {
"input": "room prompt",
"hosted_room_dispatch": {},
"unexpected": True,
}
normalized, error = await adapter._normalize_room_dispatch(request, body)
assert normalized is body
assert error.status == 400
assert json.loads(error.text)["error"]["code"] == "invalid_room_dispatch"