|
|
"""Test cases for Session Note Tool.""" |
|
|
|
|
|
import tempfile |
|
|
from pathlib import Path |
|
|
|
|
|
import pytest |
|
|
|
|
|
from mini_agent.tools.note_tool import RecallNoteTool, SessionNoteTool |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_record_and_recall_notes(): |
|
|
"""Test recording and recalling notes.""" |
|
|
print("\n=== Testing Note Record and Recall ===") |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".json") as f: |
|
|
note_file = f.name |
|
|
|
|
|
try: |
|
|
|
|
|
record_tool = SessionNoteTool(memory_file=note_file) |
|
|
recall_tool = RecallNoteTool(memory_file=note_file) |
|
|
|
|
|
|
|
|
result = await record_tool.execute( |
|
|
content="User prefers concise responses", |
|
|
category="user_preference", |
|
|
) |
|
|
assert result.success |
|
|
print(f"Record result: {result.content}") |
|
|
|
|
|
|
|
|
result = await record_tool.execute( |
|
|
content="Project uses Python 3.12", |
|
|
category="project_info", |
|
|
) |
|
|
assert result.success |
|
|
print(f"Record result: {result.content}") |
|
|
|
|
|
|
|
|
result = await recall_tool.execute() |
|
|
assert result.success |
|
|
assert "User prefers concise responses" in result.content |
|
|
assert "Python 3.12" in result.content |
|
|
print(f"\nAll notes:\n{result.content}") |
|
|
|
|
|
|
|
|
result = await recall_tool.execute(category="user_preference") |
|
|
assert result.success |
|
|
assert "User prefers concise responses" in result.content |
|
|
assert "Python 3.12" not in result.content |
|
|
print(f"\nFiltered notes:\n{result.content}") |
|
|
|
|
|
print("✅ Note record and recall test passed") |
|
|
|
|
|
finally: |
|
|
Path(note_file).unlink(missing_ok=True) |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_empty_notes(): |
|
|
"""Test recalling empty notes.""" |
|
|
print("\n=== Testing Empty Notes ===") |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".json") as f: |
|
|
note_file = f.name |
|
|
|
|
|
|
|
|
Path(note_file).unlink() |
|
|
|
|
|
try: |
|
|
recall_tool = RecallNoteTool(memory_file=note_file) |
|
|
|
|
|
|
|
|
result = await recall_tool.execute() |
|
|
assert result.success |
|
|
assert "No notes recorded yet" in result.content |
|
|
print(f"Empty notes result: {result.content}") |
|
|
|
|
|
print("✅ Empty notes test passed") |
|
|
|
|
|
finally: |
|
|
Path(note_file).unlink(missing_ok=True) |
|
|
|
|
|
|
|
|
@pytest.mark.asyncio |
|
|
async def test_note_persistence(): |
|
|
"""Test that notes persist across tool instances.""" |
|
|
print("\n=== Testing Note Persistence ===") |
|
|
|
|
|
with tempfile.NamedTemporaryFile(mode="w", delete=False, suffix=".json") as f: |
|
|
note_file = f.name |
|
|
|
|
|
try: |
|
|
|
|
|
record_tool1 = SessionNoteTool(memory_file=note_file) |
|
|
result = await record_tool1.execute( |
|
|
content="Important fact to remember", |
|
|
category="test", |
|
|
) |
|
|
assert result.success |
|
|
|
|
|
|
|
|
recall_tool2 = RecallNoteTool(memory_file=note_file) |
|
|
result = await recall_tool2.execute() |
|
|
assert result.success |
|
|
assert "Important fact to remember" in result.content |
|
|
print(f"Persisted note: {result.content}") |
|
|
|
|
|
print("✅ Note persistence test passed") |
|
|
|
|
|
finally: |
|
|
Path(note_file).unlink(missing_ok=True) |
|
|
|
|
|
|
|
|
async def main(): |
|
|
"""Run all session note tool tests.""" |
|
|
print("=" * 80) |
|
|
print("Running Session Note Tool Tests") |
|
|
print("=" * 80) |
|
|
|
|
|
await test_record_and_recall_notes() |
|
|
await test_empty_notes() |
|
|
await test_note_persistence() |
|
|
|
|
|
print("\n" + "=" * 80) |
|
|
print("All Session Note Tool tests passed! ✅") |
|
|
print("=" * 80) |
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
import asyncio |
|
|
|
|
|
asyncio.run(main()) |
|
|
|