PMFlow/tests/test_adaptive_rag_external_...

53 lines
1.7 KiB
Python

import pytest
from backend.app.services.adaptive_rag_service import AdaptiveRAGService
class _FakeContextCache:
async def get_session_messages(self, *, tenant_id: int, session_id: int):
if tenant_id == 1 and session_id == 1500000001:
return [
{"role": "user", "content": "上一轮问题"},
{"role": "assistant", "content": "上一轮回答"},
]
return []
@staticmethod
def messages_to_turns(messages):
turns = []
q = None
for row in messages:
role = row.get("role")
content = row.get("content")
if role == "user":
q = content
continue
if role == "assistant" and q:
turns.append({"question": q, "answer": content})
q = None
return turns
def test_external_session_id_stable():
sid1 = AdaptiveRAGService._external_session_id_from_key("feishu:oc_xxx:ou_yyy")
sid2 = AdaptiveRAGService._external_session_id_from_key("feishu:oc_xxx:ou_yyy")
assert sid1 == sid2
assert sid1 is not None
assert 1500000000 <= int(sid1) < 2000000000
@pytest.mark.asyncio
async def test_load_recent_conversation_for_external_actor():
service = AdaptiveRAGService(db=None, tenant_id=1) # type: ignore[arg-type]
service.context_cache = _FakeContextCache() # type: ignore[assignment]
rows = await service._load_recent_conversation(
asked_by=None,
asked_via="feishu",
project_id=None,
session_id=None,
external_session_id=1500000001,
limit=10,
)
assert rows == [{"question": "上一轮问题", "answer": "上一轮回答"}]