mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-19 18:58:47 +08:00
- Updated `cmd_search` to include line numbers and content in search results. - Modified `IndexingPipeline` to handle start and end line numbers for chunks. - Enhanced `FTSEngine` to support storing line metadata in the database. - Improved `SearchPipeline` to return line numbers and full content in search results. - Added unit tests for bridge, FTS delete operations, metadata store, and watcher functionality. - Introduced a `.gitignore` file to exclude specific directories.
67 lines
2.0 KiB
Python
67 lines
2.0 KiB
Python
"""Unit tests for FTSEngine delete_by_path and get_chunk_ids_by_path."""
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from codexlens_search.search.fts import FTSEngine
|
|
|
|
|
|
@pytest.fixture
|
|
def fts(tmp_path):
|
|
return FTSEngine(str(tmp_path / "fts.db"))
|
|
|
|
|
|
class TestGetChunkIdsByPath:
|
|
def test_empty(self, fts):
|
|
assert fts.get_chunk_ids_by_path("a.py") == []
|
|
|
|
def test_returns_matching_ids(self, fts):
|
|
fts.add_documents([
|
|
(0, "a.py", "hello world"),
|
|
(1, "a.py", "foo bar"),
|
|
(2, "b.py", "other content"),
|
|
])
|
|
ids = fts.get_chunk_ids_by_path("a.py")
|
|
assert sorted(ids) == [0, 1]
|
|
|
|
def test_no_match(self, fts):
|
|
fts.add_documents([(0, "a.py", "content")])
|
|
assert fts.get_chunk_ids_by_path("b.py") == []
|
|
|
|
|
|
class TestDeleteByPath:
|
|
def test_deletes_docs_and_meta(self, fts):
|
|
fts.add_documents([
|
|
(0, "target.py", "to be deleted"),
|
|
(1, "target.py", "also deleted"),
|
|
(2, "keep.py", "keep this"),
|
|
])
|
|
count = fts.delete_by_path("target.py")
|
|
assert count == 2
|
|
|
|
# target.py gone from both tables
|
|
assert fts.get_chunk_ids_by_path("target.py") == []
|
|
assert fts.get_content(0) == ""
|
|
assert fts.get_content(1) == ""
|
|
|
|
# keep.py still there
|
|
assert fts.get_chunk_ids_by_path("keep.py") == [2]
|
|
assert fts.get_content(2) == "keep this"
|
|
|
|
def test_delete_nonexistent_path(self, fts):
|
|
count = fts.delete_by_path("nonexistent.py")
|
|
assert count == 0
|
|
|
|
def test_delete_then_search(self, fts):
|
|
fts.add_documents([
|
|
(0, "a.py", "unique searchable content"),
|
|
(1, "b.py", "different content here"),
|
|
])
|
|
fts.delete_by_path("a.py")
|
|
results = fts.exact_search("unique searchable")
|
|
assert len(results) == 0
|
|
|
|
results = fts.exact_search("different")
|
|
assert len(results) == 1
|
|
assert results[0][0] == 1
|