Files
odysseus/tests/test_memory_tool_contract.py
T

46 lines
1.6 KiB
Python

"""Contract tests for the single-step memory search/list tool."""
import pytest
import mcp_servers.memory_server as memory_server
class _MemoryManager:
def __init__(self, entries):
self.entries = entries
def load_all(self):
return list(self.entries)
def get_relevant_memories(self, query, memories, threshold=0.05, max_items=20):
return [m for m in memories if query.lower() in m["text"].lower()][:max_items]
@pytest.fixture
def memory_state(monkeypatch):
entries = [
{"id": "coffee_roaster-01", "owner": "maya", "category": "fact", "text": "Harbor Guji arrives Friday."},
{"id": "other-owner-01", "owner": "other", "category": "fact", "text": "Private other-owner memory."},
]
monkeypatch.setattr(memory_server, "_memory_manager", _MemoryManager(entries))
monkeypatch.setattr(memory_server, "_memory_vector", None)
monkeypatch.setattr(memory_server, "_initialized", True)
monkeypatch.setenv("ODYSSEUS_MCP_MEMORY_OWNER", "maya")
@pytest.mark.asyncio
async def test_memory_search_returns_matching_text_and_id(memory_state):
result = await memory_server.call_tool("manage_memory", {"action": "search", "text": "Harbor Guji"})
output = result[0].text
assert "`coffee_r`" in output
assert "Harbor Guji arrives Friday" in output
assert "Private other-owner memory" not in output
@pytest.mark.asyncio
async def test_memory_list_is_owner_scoped(memory_state):
result = await memory_server.call_tool("manage_memory", {"action": "list"})
output = result[0].text
assert "Harbor Guji arrives Friday" in output
assert "Private other-owner memory" not in output