78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
from __future__ import annotations
|
|
|
|
import uuid
|
|
|
|
from adapter.max.handlers.attachments import AttachmentHandler
|
|
from adapter.max.handlers.chat import ChatHandler as MaxChatHandler
|
|
from adapter.max.store import ChatStore, RoomMeta
|
|
|
|
|
|
def test_chat_store_room_roundtrip():
|
|
store = ChatStore()
|
|
r = RoomMeta(
|
|
platform_chat_id="pid-1",
|
|
max_chat_id="100",
|
|
name="Main",
|
|
user_id="42",
|
|
agent_id="agent-0",
|
|
workspace_path="/agents/0",
|
|
)
|
|
store.add_room(r)
|
|
assert store.get_room_by_max_chat_id("100") is r
|
|
assert store.get_room_by_platform_chat_id("pid-1") is r
|
|
|
|
|
|
def test_staged_attachments():
|
|
store = ChatStore()
|
|
store.stage_attachment("100", ("rel/path.txt", "path.txt"))
|
|
assert store.get_attachments("100")
|
|
popped = store.pop_attachments("100")
|
|
assert len(popped) == 1
|
|
assert store.pop_attachments("100") == []
|
|
|
|
|
|
def test_remove_room_clears_staging():
|
|
store = ChatStore()
|
|
store.stage_attachment("100", ("a", "a"))
|
|
store.add_room(
|
|
RoomMeta(
|
|
platform_chat_id="x",
|
|
max_chat_id="100",
|
|
name="",
|
|
user_id="u",
|
|
agent_id="a",
|
|
)
|
|
)
|
|
store.remove_room("100")
|
|
assert store.get_room_by_max_chat_id("100") is None
|
|
assert store.get_attachments("100") == []
|
|
|
|
|
|
def test_chat_handler_clear_rotates_platform_id():
|
|
store = ChatStore()
|
|
h = MaxChatHandler(store)
|
|
pid1 = str(uuid.uuid4())
|
|
store.add_room(
|
|
RoomMeta(
|
|
platform_chat_id=pid1,
|
|
max_chat_id="100",
|
|
name="Tab",
|
|
user_id="42",
|
|
agent_id="agent-0",
|
|
workspace_path="/agents/0",
|
|
)
|
|
)
|
|
h.handle_clear("100")
|
|
room = store.get_room_by_max_chat_id("100")
|
|
assert room is not None
|
|
assert room.platform_chat_id != pid1
|
|
|
|
|
|
def test_attachment_handler_list_remove():
|
|
store = ChatStore()
|
|
h = AttachmentHandler(store)
|
|
store.stage_attachment("100", ("a", "f1.bin"))
|
|
assert "f1.bin" in h.handle_list("100")
|
|
msg = h.handle_remove("100", "1")
|
|
assert "Удалено" in msg or "удалено" in msg.lower()
|
|
assert "пуста" in h.handle_list("100").lower() or "пусто" in h.handle_list("100").lower()
|