mirror of
https://github.com/basicmachines-co/basic-memory
synced 2026-06-21 13:47:35 +00:00
152 lines
4.8 KiB
Python
152 lines
4.8 KiB
Python
"""Tests for activity tracking MCP tool."""
|
|
|
|
import pytest
|
|
|
|
from basic_memory.mcp.tools.documents import create_document
|
|
from basic_memory.mcp.tools.knowledge import create_entities
|
|
from basic_memory.mcp.tools.activity import get_recent_activity
|
|
from basic_memory.schemas.base import Entity
|
|
from basic_memory.schemas.request import CreateEntityRequest, DocumentRequest
|
|
from basic_memory.schemas.activity import ActivityType
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_recent_activity_basic(client):
|
|
"""Test getting activity after creating some documents."""
|
|
# Create test documents
|
|
doc1 = await create_document(
|
|
DocumentRequest(
|
|
path_id="test/doc1.md",
|
|
content="Test document 1",
|
|
doc_metadata={}
|
|
)
|
|
)
|
|
doc2 = await create_document(
|
|
DocumentRequest(
|
|
path_id="test/doc2.md",
|
|
content="Test document 2",
|
|
doc_metadata={}
|
|
)
|
|
)
|
|
|
|
# Get recent activity
|
|
result = await get_recent_activity()
|
|
|
|
# Should find both documents
|
|
assert len(result.changes) == 2
|
|
assert result.summary.document_changes == 2
|
|
assert result.summary.entity_changes == 0
|
|
assert result.summary.relation_changes == 0
|
|
|
|
# Should be sorted by timestamp
|
|
timestamps = [change.timestamp for change in result.changes]
|
|
assert timestamps == sorted(timestamps, reverse=True)
|
|
|
|
# Should have both documents
|
|
paths = {change.path_id for change in result.changes}
|
|
assert "test/doc1.md" in paths
|
|
assert "test/doc2.md" in paths
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_recent_activity_filtered(client):
|
|
"""Test activity filtering by type."""
|
|
# Create both document and entity changes
|
|
doc = await create_document(
|
|
DocumentRequest(
|
|
path_id="test/filtered_doc.md",
|
|
content="Test document",
|
|
doc_metadata={}
|
|
)
|
|
)
|
|
|
|
entity_request = CreateEntityRequest(
|
|
entities=[Entity(name="TestEntity", entity_type="test")]
|
|
)
|
|
entity = await create_entities(entity_request)
|
|
|
|
# Get only document changes
|
|
result = await get_recent_activity(
|
|
timeframe="1d",
|
|
activity_types=[ActivityType.DOCUMENT] # Use enum directly
|
|
)
|
|
|
|
# Should only find document changes
|
|
assert len(result.changes) == 1
|
|
assert result.summary.document_changes == 1
|
|
assert result.summary.entity_changes == 0
|
|
assert result.changes[0].activity_type == ActivityType.DOCUMENT
|
|
assert result.changes[0].path_id == "test/filtered_doc.md"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_recent_activity_content_handling(client):
|
|
"""Test content handling for different activity types."""
|
|
# Create document and entity with description
|
|
doc = await create_document(
|
|
DocumentRequest(
|
|
path_id="test/content_doc.md",
|
|
content="Document content",
|
|
doc_metadata={}
|
|
)
|
|
)
|
|
|
|
entity_request = CreateEntityRequest(
|
|
entities=[Entity(
|
|
name="ContentEntity",
|
|
entity_type="test",
|
|
description="Entity description"
|
|
)]
|
|
)
|
|
entity = await create_entities(entity_request)
|
|
|
|
# Get activity
|
|
result = await get_recent_activity(timeframe="1d")
|
|
|
|
# Find the document and entity changes
|
|
doc_changes = [c for c in result.changes if c.activity_type == ActivityType.DOCUMENT]
|
|
entity_changes = [c for c in result.changes if c.activity_type == ActivityType.ENTITY]
|
|
|
|
# Document should have no content (lives in filesystem)
|
|
assert len(doc_changes) == 1
|
|
assert doc_changes[0].content is None
|
|
|
|
# Entity should include description as content
|
|
assert len(entity_changes) == 1
|
|
assert entity_changes[0].content == "Entity description"
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_recent_activity_multiple_types(client):
|
|
"""Test tracking activity across all types."""
|
|
# Create changes of different types
|
|
doc = await create_document(
|
|
DocumentRequest(
|
|
path_id="test/activity_doc.md",
|
|
content="Test document",
|
|
doc_metadata={}
|
|
)
|
|
)
|
|
|
|
entity_request = CreateEntityRequest(
|
|
entities=[
|
|
Entity(name="Entity1", entity_type="test"),
|
|
Entity(name="Entity2", entity_type="test")
|
|
]
|
|
)
|
|
entities = await create_entities(entity_request)
|
|
|
|
# Get all activity
|
|
result = await get_recent_activity()
|
|
|
|
# Should find all changes
|
|
assert result.summary.document_changes == 1
|
|
assert result.summary.entity_changes == 2
|
|
assert result.summary.relation_changes == 0 # No relations created
|
|
|
|
# Changes should be the right types
|
|
doc_changes = [c for c in result.changes if c.activity_type == ActivityType.DOCUMENT]
|
|
entity_changes = [c for c in result.changes if c.activity_type == ActivityType.ENTITY]
|
|
|
|
assert len(doc_changes) == 1
|
|
assert len(entity_changes) == 2 |