Files
2026-07-13 12:45:58 +08:00

99 lines
3.3 KiB
Python

"""DM routing + super-agent retirement: a DM goes to the user-designated session (delivered like any
background turn) or is parked as unrouted; the legacy super-agent surface is gone."""
import asyncio
import pytest
from fastapi.testclient import TestClient
from coworker.connectors.base import MessageEvent, SessionSource
from coworker.providers import ModelCapabilities, ProviderClient
from coworker.server import create_app
from coworker.server.manager import SessionManager
class ScriptedProvider(ProviderClient):
def complete(self, *, model, messages, tools=None, **settings):
raise AssertionError("no turns expected")
def capabilities(self, model):
return ModelCapabilities()
def _dm(text, chat_id="D1", user="bob"):
return MessageEvent(
text=text,
source=SessionSource(
platform="slack", chat_id=chat_id, user_name=user, chat_type="dm"
),
)
def test_dm_with_designated_session_delivers(tmp_path, monkeypatch):
mgr = SessionManager(workspace=tmp_path, provider=ScriptedProvider())
delivered: list[tuple[str, str]] = []
async def fake_deliver(session_id, message, *, source=None):
delivered.append((session_id, message))
monkeypatch.setattr(mgr, "deliver_to_session", fake_deliver)
mgr.set_dm_session("sDM")
asyncio.run(mgr._dispatch_inbound(_dm("ping")))
assert delivered[0][0] == "sDM"
assert (
"ping" in delivered[0][1]
) # the tagged text carries the message + a reply handle
assert mgr.unrouted.list() == []
def test_dm_without_designation_is_parked(tmp_path):
mgr = SessionManager(workspace=tmp_path, provider=ScriptedProvider())
assert mgr.dm_session() is None
asyncio.run(mgr._dispatch_inbound(_dm("hello there")))
parked = mgr.unrouted.list()
assert len(parked) == 1
assert parked[0]["text"] == "hello there"
assert parked[0]["reason"] == "no DM session designated"
def test_dm_route_endpoints(tmp_path):
mgr = SessionManager(workspace=tmp_path, provider=ScriptedProvider())
client = TestClient(create_app(mgr))
assert client.get("/v1/messaging/dm-route").json()["dm_session"] is None
assert (
client.post("/v1/messaging/dm-route", json={"session_id": "sX"}).json()[
"dm_session"
]
== "sX"
)
assert client.get("/v1/messaging/dm-route").json()["dm_session"] == "sX"
# a falsy id clears it
assert (
client.post("/v1/messaging/dm-route", json={"session_id": ""}).json()[
"dm_session"
]
is None
)
def test_dm_session_persists_across_manager_reload(tmp_path):
mgr = SessionManager(workspace=tmp_path, provider=ScriptedProvider())
mgr.set_dm_session("sKeep")
# a fresh manager over the same data dir reloads the prefs-backed designation
reborn = SessionManager(
workspace=tmp_path, data_dir=mgr._data_base, provider=ScriptedProvider()
)
assert reborn.dm_session() == "sKeep"
def test_superagent_surface_is_gone(tmp_path):
mgr = SessionManager(workspace=tmp_path, provider=ScriptedProvider())
assert not hasattr(mgr, "superagent")
assert not hasattr(mgr, "sa_register")
client = TestClient(create_app(mgr))
# the retired routes 404
assert client.get("/v1/superagent").status_code == 404