from __future__ import annotations from memory_gateway_plugin.tools import memory_append_episode, memory_feedback, memory_search, memory_upsert class FakeClient: def __init__(self): self.calls = [] def search_memory(self, payload): self.calls.append(("search", payload)) return {"ok": True, "data": {"results": []}} def append_episode(self, payload): self.calls.append(("append", payload)) return {"ok": True, "data": payload} def upsert_memory(self, payload): self.calls.append(("upsert", payload)) return {"ok": True, "data": payload} def send_feedback(self, memory_id, payload): self.calls.append(("feedback", memory_id, payload)) return {"ok": True, "data": payload} def test_memory_search_empty_query_rejected(): client = FakeClient() result = memory_search(query="", user_id="u", agent_id="a", client=client) assert result["ok"] is False assert client.calls == [] def test_append_episode_rejects_api_key(): result = memory_append_episode( user_id="u", agent_id="a", session_id="s", episode_summary="api_key=sk-secret", client=FakeClient(), ) assert result["ok"] is False assert result["reason"] == "secret_like_content" def test_append_episode_rejects_password(): result = memory_append_episode( user_id="u", agent_id="a", session_id="s", episode_summary="password=hunter2", client=FakeClient(), ) assert result["ok"] is False assert result["reason"] == "secret_like_content" def test_append_episode_rejects_raw_transcript(): content = "\n".join(["User: hi", "Assistant: hello", "User: remember this", "Assistant: ok"]) result = memory_append_episode(user_id="u", agent_id="a", session_id="s", episode_summary=content, client=FakeClient()) assert result["ok"] is False assert result["reason"] == "raw_chat_transcript" def test_append_episode_accepts_stable_preference(): client = FakeClient() result = memory_append_episode( user_id="u", agent_id="a", session_id="s", episode_summary="用户稳定偏好:以后所有技术方案都使用中文输出。", tags=["preference"], client=client, ) assert result["ok"] is True assert client.calls[0][0] == "append" def test_upsert_uses_long_term_namespace_when_provided(): client = FakeClient() namespace = "user/u/long_term" result = memory_upsert( user_id="u", agent_id="a", namespace=namespace, memory_type="preference", content="用户稳定偏好:使用中文输出。", client=client, ) assert result["ok"] is True assert client.calls[0][1]["namespace"] == namespace def test_feedback_calls_correct_endpoint(): client = FakeClient() result = memory_feedback(user_id="u", agent_id="a", memory_id="mem_1", feedback="reject", client=client) assert result["ok"] is True assert client.calls[0] == ("feedback", "mem_1", {"user_id": "u", "agent_id": "a", "feedback": "incorrect", "comment": None})