test: expand coverage from 20 to 92 tests, migrate to uv
- Migrate from setuptools to hatchling build backend - Add dependency-groups (PEP 735) for dev tooling (pytest, ruff) - Remove redundant requirements.txt in favor of uv.lock - Fix __version__ mismatch (2.0.0 -> 3.0.0 to match pyproject.toml) New test files: - conftest.py: shared fixtures (isolated palace, KG, ChromaDB collection) - test_knowledge_graph.py: 17 tests (entity CRUD, temporal queries, timeline) - test_mcp_server.py: 25 tests (protocol dispatch, read/write/KG/diary tools) - test_searcher.py: 7 tests (search_memories API, filters, error handling) - test_dialect.py: 13 tests (AAAK compression, entity/emotion detection, zettel encoding) All 92 tests pass on Python 3.13 with chromadb 0.6.3.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
"""
|
||||
test_searcher.py — Tests for the programmatic search_memories API.
|
||||
|
||||
Tests the library-facing search interface (not the CLI print variant).
|
||||
"""
|
||||
|
||||
import chromadb
|
||||
|
||||
from mempalace.searcher import search_memories
|
||||
|
||||
|
||||
class TestSearchMemories:
|
||||
def test_basic_search(self, palace_path, seeded_collection):
|
||||
result = search_memories("JWT authentication", palace_path)
|
||||
assert "results" in result
|
||||
assert len(result["results"]) > 0
|
||||
assert result["query"] == "JWT authentication"
|
||||
|
||||
def test_wing_filter(self, palace_path, seeded_collection):
|
||||
result = search_memories("planning", palace_path, wing="notes")
|
||||
assert all(r["wing"] == "notes" for r in result["results"])
|
||||
|
||||
def test_room_filter(self, palace_path, seeded_collection):
|
||||
result = search_memories("database", palace_path, room="backend")
|
||||
assert all(r["room"] == "backend" for r in result["results"])
|
||||
|
||||
def test_wing_and_room_filter(self, palace_path, seeded_collection):
|
||||
result = search_memories("code", palace_path, wing="project", room="frontend")
|
||||
assert all(
|
||||
r["wing"] == "project" and r["room"] == "frontend"
|
||||
for r in result["results"]
|
||||
)
|
||||
|
||||
def test_n_results_limit(self, palace_path, seeded_collection):
|
||||
result = search_memories("code", palace_path, n_results=2)
|
||||
assert len(result["results"]) <= 2
|
||||
|
||||
def test_no_palace_returns_error(self):
|
||||
result = search_memories("anything", "/nonexistent/path")
|
||||
assert "error" in result
|
||||
|
||||
def test_result_fields(self, palace_path, seeded_collection):
|
||||
result = search_memories("authentication", palace_path)
|
||||
hit = result["results"][0]
|
||||
assert "text" in hit
|
||||
assert "wing" in hit
|
||||
assert "room" in hit
|
||||
assert "source_file" in hit
|
||||
assert "similarity" in hit
|
||||
assert isinstance(hit["similarity"], float)
|
||||
Reference in New Issue
Block a user