test_search.py•3.26 kB
"""Tests for search schemas."""
from datetime import datetime
from basic_memory.schemas.search import (
SearchItemType,
SearchQuery,
SearchResult,
SearchResponse,
)
def test_search_modes():
"""Test different search modes."""
# Exact permalink
query = SearchQuery(permalink="specs/search")
assert query.permalink == "specs/search"
assert query.text is None
# Pattern match
query = SearchQuery(permalink="specs/*")
assert query.permalink == "specs/*"
assert query.text is None
# Text search
query = SearchQuery(text="search implementation")
assert query.text == "search implementation"
assert query.permalink is None
def test_search_filters():
"""Test search result filtering."""
query = SearchQuery(
text="search",
entity_types=[SearchItemType.ENTITY],
types=["component"],
after_date=datetime(2024, 1, 1),
)
assert query.entity_types == [SearchItemType.ENTITY]
assert query.types == ["component"]
assert query.after_date == "2024-01-01T00:00:00"
def test_search_result():
"""Test search result structure."""
result = SearchResult(
title="test",
type=SearchItemType.ENTITY,
entity="some_entity",
score=0.8,
metadata={"entity_type": "component"},
permalink="specs/search",
file_path="specs/search.md",
)
assert result.type == SearchItemType.ENTITY
assert result.score == 0.8
assert result.metadata == {"entity_type": "component"}
def test_observation_result():
"""Test observation result fields."""
result = SearchResult(
title="test",
permalink="specs/search",
file_path="specs/search.md",
type=SearchItemType.OBSERVATION,
score=0.5,
metadata={},
entity="some_entity",
category="tech",
)
assert result.entity == "some_entity"
assert result.category == "tech"
def test_relation_result():
"""Test relation result fields."""
result = SearchResult(
title="test",
permalink="specs/search",
file_path="specs/search.md",
type=SearchItemType.RELATION,
entity="some_entity",
score=0.5,
metadata={},
from_entity="123",
to_entity="456",
relation_type="depends_on",
)
assert result.from_entity == "123"
assert result.to_entity == "456"
assert result.relation_type == "depends_on"
def test_search_response():
"""Test search response wrapper."""
results = [
SearchResult(
title="test",
permalink="specs/search",
file_path="specs/search.md",
type=SearchItemType.ENTITY,
entity="some_entity",
score=0.8,
metadata={},
),
SearchResult(
title="test",
permalink="specs/search",
file_path="specs/search.md",
type=SearchItemType.ENTITY,
entity="some_entity",
score=0.6,
metadata={},
),
]
response = SearchResponse(results=results, current_page=1, page_size=1)
assert len(response.results) == 2
assert response.results[0].score > response.results[1].score