Mini-Agent / tests /test_note_tool.py
AbdulElahGwaith's picture
Upload folder using huggingface_hub
dc893fb verified
"""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:
# Create tools
record_tool = SessionNoteTool(memory_file=note_file)
recall_tool = RecallNoteTool(memory_file=note_file)
# Record a note
result = await record_tool.execute(
content="User prefers concise responses",
category="user_preference",
)
assert result.success
print(f"Record result: {result.content}")
# Record another note
result = await record_tool.execute(
content="Project uses Python 3.12",
category="project_info",
)
assert result.success
print(f"Record result: {result.content}")
# Recall all notes
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}")
# Recall filtered by category
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
# Delete the file to test empty state
Path(note_file).unlink()
try:
recall_tool = RecallNoteTool(memory_file=note_file)
# Recall empty notes
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:
# First instance - record note
record_tool1 = SessionNoteTool(memory_file=note_file)
result = await record_tool1.execute(
content="Important fact to remember",
category="test",
)
assert result.success
# Second instance - recall note (simulates new session)
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())