fischer-agentkit/tests/unit/test_chat_memory_integratio...

103 lines
3.8 KiB
Python

"""Tests for Chat memory integration — 记忆注入 + MemoryTool + 日志生成 (U4)."""
from pathlib import Path
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
from agentkit.memory.profile import MemoryStore, MemorySnapshot
from agentkit.tools.memory_tool import MemoryTool
class TestChatMemoryInjection:
"""Chat 启动时记忆注入 system prompt 测试."""
def test_memory_store_initializes_with_base_dir(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
store.ensure_defaults()
snapshot = store.load_all()
prompt = store.build_system_prompt(snapshot, "Be helpful.")
assert "<agent-identity>" in prompt
assert "AgentKit" in prompt
assert "Be helpful." in prompt
def test_no_memory_files_returns_base_prompt(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
snapshot = store.load_all()
prompt = store.build_system_prompt(snapshot, "Be helpful.")
assert prompt == "Be helpful."
def test_default_soul_injected(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
store.ensure_defaults()
snapshot = store.load_all()
prompt = store.build_system_prompt(snapshot)
assert "<agent-identity>" in prompt
assert "专业" in prompt or "AgentKit" in prompt
class TestChatMemoryToolAvailable:
"""MemoryTool 在对话中可用测试."""
async def test_memory_tool_in_tools_list(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
tool = MemoryTool(memory_store=store)
assert tool.name == "memory"
assert tool.input_schema is not None
async def test_memory_tool_add_and_read(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
tool = MemoryTool(memory_store=store)
# Add
result = await tool.execute(action="add", file="user", section="称呼", content="叫我老板")
assert result["success"] is True
# Read
result = await tool.execute(action="read", file="user")
assert "老板" in result["content"]
class TestChatMemoryPersistence:
"""记忆跨 /clear 会话持久化测试."""
def test_memory_survives_session_clear(self, tmp_path: Path):
"""/clear 只清除会话历史,不清除记忆文件."""
store = MemoryStore(base_dir=tmp_path)
store.get_file("user").write("## 称呼\n叫我老板")
# 模拟 /clear — 重新创建 MemoryStore
store2 = MemoryStore(base_dir=tmp_path)
content = store2.get_file("user").read()
assert "老板" in content
def test_memory_persists_across_store_instances(self, tmp_path: Path):
store1 = MemoryStore(base_dir=tmp_path)
store1.get_file("memory").write("## 项目\nAgentKit框架")
store2 = MemoryStore(base_dir=tmp_path)
content = store2.get_file("memory").read()
assert "AgentKit" in content
class TestChatDailyLogGeneration:
"""会话结束时日志生成测试."""
def test_daily_file_path_is_today(self, tmp_path: Path):
from datetime import datetime, timezone
store = MemoryStore(base_dir=tmp_path)
daily = store.get_file("daily")
today = datetime.now(timezone.utc).strftime("%Y-%m-%d")
assert today in str(daily.path)
def test_write_daily_log(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
daily = store.get_file("daily")
daily.write("讨论了AgentKit记忆系统架构")
content = daily.read()
assert "记忆系统" in content
def test_daily_log_loads_in_snapshot(self, tmp_path: Path):
store = MemoryStore(base_dir=tmp_path)
store.get_file("daily").write("今天完成了记忆系统开发")
snapshot = store.load_all()
assert "记忆系统" in snapshot.daily