"""Tests for DevTrace search module.""" import pytest from unittest.mock import Mock, patch, MagicMock from src.search.embeddings import EmbeddingManager from src.search.semantic import SemanticSearch class TestEmbeddingManager: """Tests for EmbeddingManager.""" def test_manager_creation(self): """Test manager creation.""" manager = EmbeddingManager() assert manager.model_name == "all-MiniLM-L6-v2" def test_content_to_string(self): """Test content to string conversion.""" manager = EmbeddingManager() assert manager._content_to_string("test") == "test" result = manager._content_to_string({"key": "value"}) assert "key" in result assert "value" in result def test_compute_similarity(self): """Test cosine similarity computation.""" manager = EmbeddingManager() embedding1 = [1.0, 0.0, 0.0] embedding2 = [1.0, 0.0, 0.0] embedding3 = [-1.0, 0.0, 0.0] sim_same = manager.compute_similarity(embedding1, embedding2) sim_opposite = manager.compute_similarity(embedding1, embedding3) assert sim_same == pytest.approx(1.0, abs=0.01) assert sim_opposite == pytest.approx(-1.0, abs=0.01) class TestSemanticSearch: """Tests for SemanticSearch.""" def test_search_creation(self): """Test search creation.""" search = SemanticSearch() assert search.embedding_manager is not None def test_keyword_search(self): """Test keyword search fallback.""" search = SemanticSearch() documents = { 1: {"content": "python test file"}, 2: {"content": "javascript web app"}, 3: {"content": "python api server"} } results = search._keyword_search("python", documents) assert len(results) == 2 assert all(r["score"] > 0 for r in results)