Skip to main content
Glama
test_tools_consolidate.pyβ€’10.6 kB
"""Tests for consolidate_memories tool.""" import pytest from mnemex.storage.models import Memory from mnemex.tools.consolidate import consolidate_memories from tests.conftest import make_test_uuid class TestConsolidateMemories: """Test suite for consolidate_memories tool.""" def test_consolidate_auto_detect_preview_empty(self, temp_storage): """Test auto-detect preview mode with empty database.""" result = consolidate_memories(auto_detect=True, mode="preview") assert result["success"] is True assert result["mode"] == "auto_detect_preview" assert result["candidates_found"] == 0 assert result["showing"] == 0 assert result["previews"] == [] def test_consolidate_auto_detect_preview_basic(self, temp_storage): """Test auto-detect preview mode with some memories.""" # Create a few similar memories for i in range(3): mem = Memory( id=make_test_uuid(f"mem-{i}"), content=f"Python programming tutorial part {i}", use_count=1, ) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="preview") assert result["success"] is True assert result["mode"] == "auto_detect_preview" assert "candidates_found" in result assert "showing" in result assert "previews" in result assert isinstance(result["previews"], list) def test_consolidate_auto_detect_apply_empty(self, temp_storage): """Test auto-detect apply mode with empty database.""" result = consolidate_memories(auto_detect=True, mode="apply") assert result["success"] is True assert result["mode"] == "auto_detect_apply" assert result["consolidated_clusters"] == 0 assert result["total_memories_saved"] == 0 assert result["results"] == [] def test_consolidate_auto_detect_apply_basic(self, temp_storage): """Test auto-detect apply mode with some memories.""" # Create similar memories for i in range(3): mem = Memory( id=make_test_uuid(f"mem-{i}"), content=f"Similar content {i}", use_count=1, ) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="apply") assert result["success"] is True assert result["mode"] == "auto_detect_apply" assert "consolidated_clusters" in result assert "total_memories_saved" in result assert "results" in result assert isinstance(result["results"], list) def test_consolidate_custom_cohesion_threshold(self, temp_storage): """Test auto-detect with custom cohesion threshold.""" mem1 = Memory(id=make_test_uuid("mem-1"), content="Test 1", use_count=1) temp_storage.save_memory(mem1) result = consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=0.9) assert result["success"] is True assert result["mode"] == "auto_detect_preview" def test_consolidate_cohesion_boundaries(self, temp_storage): """Test cohesion threshold at boundaries.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) # Test minimum threshold result_min = consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=0.0) assert result_min["success"] is True # Test maximum threshold result_max = consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=1.0) assert result_max["success"] is True def test_consolidate_result_format_auto_preview(self, temp_storage): """Test result format for auto-detect preview mode.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="preview") # Verify all expected keys assert "success" in result assert "mode" in result assert "candidates_found" in result assert "showing" in result assert "previews" in result assert "message" in result assert result["success"] is True assert result["mode"] == "auto_detect_preview" assert isinstance(result["candidates_found"], int) assert isinstance(result["showing"], int) assert isinstance(result["previews"], list) def test_consolidate_result_format_auto_apply(self, temp_storage): """Test result format for auto-detect apply mode.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="apply") # Verify all expected keys assert "success" in result assert "mode" in result assert "consolidated_clusters" in result assert "total_memories_saved" in result assert "results" in result assert "message" in result assert result["success"] is True assert result["mode"] == "auto_detect_apply" assert isinstance(result["consolidated_clusters"], int) assert isinstance(result["total_memories_saved"], int) assert isinstance(result["results"], list) # Error case tests def test_consolidate_missing_cluster_id(self, temp_storage): """Test that cluster_id is required when auto_detect is False.""" result = consolidate_memories(auto_detect=False, mode="preview") assert result["success"] is False assert "error" in result assert "cluster_id is required" in result["error"] assert "hint" in result def test_consolidate_cluster_not_found(self, temp_storage): """Test error when specific cluster is not found.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) nonexistent_cluster_id = make_test_uuid("nonexistent-cluster") result = consolidate_memories( cluster_id=nonexistent_cluster_id, mode="preview", auto_detect=False ) assert result["success"] is False assert "error" in result assert nonexistent_cluster_id in result["error"] assert "hint" in result # Validation tests def test_consolidate_invalid_cluster_id_uuid(self, temp_storage): """Test that invalid cluster_id UUID fails validation.""" with pytest.raises(ValueError, match="cluster_id"): consolidate_memories(cluster_id="not-a-uuid", mode="preview") def test_consolidate_invalid_cohesion_negative(self, temp_storage): """Test that negative cohesion_threshold fails validation.""" with pytest.raises(ValueError, match="cohesion_threshold"): consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=-0.1) def test_consolidate_invalid_cohesion_too_high(self, temp_storage): """Test that cohesion_threshold > 1.0 fails validation.""" with pytest.raises(ValueError, match="cohesion_threshold"): consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=1.5) def test_consolidate_invalid_mode(self, temp_storage): """Test that invalid mode fails validation.""" with pytest.raises(ValueError, match="mode"): consolidate_memories(auto_detect=True, mode="invalid_mode") def test_consolidate_mode_not_preview_or_apply(self, temp_storage): """Test various invalid mode values.""" with pytest.raises(ValueError, match="mode"): consolidate_memories(auto_detect=True, mode="") with pytest.raises(ValueError, match="mode"): consolidate_memories(auto_detect=True, mode="Preview") # Case-sensitive with pytest.raises(ValueError, match="mode"): consolidate_memories(auto_detect=True, mode="execute") # Edge cases def test_consolidate_default_parameters(self, temp_storage): """Test consolidate with default parameters (should fail - needs cluster_id or auto_detect).""" result = consolidate_memories() # Default is auto_detect=False, mode="preview", no cluster_id assert result["success"] is False assert "cluster_id is required" in result["error"] def test_consolidate_preview_shows_max_5(self, temp_storage): """Test that auto-detect preview shows max 5 candidates.""" # Create many similar memories to potentially trigger multiple clusters for i in range(20): mem = Memory( id=make_test_uuid(f"mem-{i}"), content=f"Test memory {i}", use_count=1, ) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="preview", cohesion_threshold=0.5) assert result["success"] is True # Should show at most 5 previews assert result["showing"] <= 5 assert len(result["previews"]) <= 5 def test_consolidate_none_cluster_id(self, temp_storage): """Test that None cluster_id is handled properly.""" result = consolidate_memories(cluster_id=None, auto_detect=False, mode="preview") assert result["success"] is False assert "cluster_id is required" in result["error"] def test_consolidate_message_content(self, temp_storage): """Test that messages are informative.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="preview") assert result["success"] is True assert "message" in result # Message should mention number of candidates assert str(result["candidates_found"]) in result["message"] def test_consolidate_apply_message_content(self, temp_storage): """Test that apply mode messages include results.""" mem = Memory(id=make_test_uuid("mem-1"), content="Test", use_count=1) temp_storage.save_memory(mem) result = consolidate_memories(auto_detect=True, mode="apply") assert result["success"] is True assert "message" in result # Message should mention consolidation count assert str(result["consolidated_clusters"]) in result["message"] assert str(result["total_memories_saved"]) in result["message"]

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mnemexai/mnemex'

If you have feedback or need assistance with the MCP directory API, please join our Discord server