Archived
37 lines
1.7 KiB
Python
37 lines
1.7 KiB
Python
"""Search projections use current membership and Unicode text bounds."""
|
|
|
|
from pathlib import Path
|
|
|
|
from recoll_modern.domain.models import CollectionCreate
|
|
from recoll_modern.domain.search import SearchInput, SearchService
|
|
from recoll_modern.engine.fake import FakeEngine, FakeRecord
|
|
from recoll_modern.indexing.discovery import ObservedFile
|
|
from recoll_modern.indexing.paths import PathPolicy
|
|
from recoll_modern.storage.collections import SQLiteCollectionRepository
|
|
from recoll_modern.storage.database import Database
|
|
from recoll_modern.storage.documents import DocumentRepository
|
|
from recoll_modern.storage.membership import MembershipRepository
|
|
|
|
|
|
def test_unicode_limit_and_stale_membership_are_checked_against_sqlite(tmp_path: Path) -> None:
|
|
root = tmp_path / "docs"
|
|
root.mkdir()
|
|
path = root / "é.txt"
|
|
path.write_text("🦊alpha")
|
|
database = Database(tmp_path / "state.sqlite3")
|
|
database.migrate()
|
|
collection = SQLiteCollectionRepository(database).create(CollectionCreate("Books", None))
|
|
documents = DocumentRepository(database)
|
|
digest = "e" * 64
|
|
documents.observe_files([ObservedFile("é.txt", digest, path.stat().st_size)])
|
|
memberships = MembershipRepository(database)
|
|
memberships.add_direct(collection.id, digest)
|
|
engine = FakeEngine([FakeRecord(
|
|
str(path), "Book", "🦊alpha", (collection.id, "c0000000000")
|
|
)])
|
|
service = SearchService(engine, documents, memberships, PathPolicy(root), 2)
|
|
result = service.search(SearchInput("alpha", (collection.id,), ("text", "collections"),
|
|
text_limit=20))
|
|
assert result.hits == [{"document_id": digest, "collections": [collection.id],
|
|
"text": "🦊a", "text_truncated": True}]
|