"""Tests for search module.""" import os import tempfile import pytest from snip.db import Database from snip.search import SearchEngine @pytest.fixture def search_engine(): """Create search engine with in-memory database.""" with tempfile.NamedTemporaryFile(suffix=".db", delete=False) as f: db_path = f.name db = Database(db_path) db.init_schema() engine = SearchEngine(db_path) db.create_snippet( title="Python Hello World", code="print('hello')", description="A simple Python greeting", language="python", tags=["python", "hello", "beginner"], ) db.create_snippet( title="JavaScript Hello", code="console.log('hello')", description="JavaScript greeting", language="javascript", tags=["javascript", "hello"], ) db.create_snippet( title="Python List Comprehension", code="[x**2 for x in range(10)]", description="Python list comprehension example", language="python", tags=["python", "advanced"], ) yield engine os.unlink(db_path) def test_basic_search(search_engine): """Test basic full-text search.""" results = search_engine.search("hello") assert len(results) == 2 def test_search_with_language_filter(search_engine): """Test search with language filter.""" results = search_engine.search("hello", language="python") assert len(results) == 1 assert results[0]["language"] == "python" def test_search_with_tag_filter(search_engine): """Test search with tag filter.""" results = search_engine.search("*", tag="python") assert len(results) == 2 def test_search_no_query_returns_all(search_engine): """Test that empty search returns all snippets.""" results = search_engine.search("") assert len(results) == 3 def test_highlight_matches(search_engine): """Test match highlighting.""" text = "This is a hello world example" highlighted = search_engine.highlight(text, "hello world") assert "**" in highlighted def test_parse_query(search_engine): """Test query parsing.""" parsed = search_engine.parse_query("hello AND world") assert len(parsed["terms"]) >= 1 def test_suggest_completions(search_engine): """Test tag autocomplete.""" suggestions = search_engine.suggest("pyt") assert "python" in suggestions def test_empty_query_with_filters(search_engine): """Test empty query with filters still applies filters.""" results = search_engine.search("", language="javascript") assert len(results) == 1 assert results[0]["language"] == "javascript"