fix: corrige 6 bugs mineurs (BUG-035 a BUG-040)
CI / lint (push) Successful in 1m36s
CI / security (push) Successful in 1m4s
CI / test (push) Successful in 3m41s
CI / build (push) Successful in 59s
CI / e2e (push) Successful in 11m8s

This commit is contained in:
2026-09-17 20:05:08 -04:00
parent 2c460022f8
commit 2e2a33cef3
25 changed files with 595 additions and 60 deletions
+90 -3
View File
@@ -275,6 +275,7 @@ class TestPdfIndexing:
"""When a vault directory is scanned with .pdf files, they appear in files list.
Uses the public _scan_vault() helper directly — no global state needed.
BUG-040: text extraction is deferred, so the scan only carries metadata.
"""
from backend.indexer import _scan_vault
@@ -286,10 +287,96 @@ class TestPdfIndexing:
names = {f["path"] for f in result["files"]}
assert "a.pdf" in names
assert "b.pdf" in names
# The PDF content should have been extracted.
# The scan defers the expensive text extraction.
a_file = next(f for f in result["files"] if f["path"] == "a.pdf")
assert "ObsiGate test PDF" in (a_file.get("content") or "")
assert "uniqueword0" in (a_file.get("content") or "")
assert a_file["content"] == ""
assert a_file["pdf_text_pending"] is True
class TestPdfLazyEnrichment:
"""BUG-040: PDF text is extracted in a deferred background pass."""
def test_scan_defers_pdf_text_extraction(self, pdf_dir: Path, tmp_path: Path):
from backend.indexer import _scan_vault
vault_root = tmp_path / "vault"
vault_root.mkdir()
shutil.copy2(pdf_dir / "simple.pdf", vault_root / "a.pdf")
result = _scan_vault("v", str(vault_root), {})
a_file = next(f for f in result["files"] if f["path"] == "a.pdf")
assert a_file["content"] == ""
assert a_file["content_preview"] == ""
assert a_file["pdf_text_pending"] is True
@pytest.mark.asyncio
async def test_enrich_pdf_texts_fills_content_and_clears_flag(
self, pdf_dir: Path, tmp_path: Path
):
import backend.indexer as idx
vault_root = tmp_path / "vault"
vault_root.mkdir()
shutil.copy2(pdf_dir / "simple.pdf", vault_root / "a.pdf")
file_info = {
"path": "a.pdf",
"title": "a",
"tags": [],
"content": "",
"content_preview": "",
"size": 0,
"modified": "",
"extension": ".pdf",
"pdf_text_pending": True,
}
with idx._index_lock:
idx.index["LazyV"] = {
"files": [file_info],
"tags": {},
"path": str(vault_root),
"paths": [],
}
try:
count = await idx.enrich_pdf_texts("LazyV")
assert count == 1
assert "ObsiGate test PDF" in file_info["content"]
assert "uniqueword0" in file_info["content"]
assert file_info["content_preview"]
assert "pdf_text_pending" not in file_info
finally:
with idx._index_lock:
idx.index.pop("LazyV", None)
@pytest.mark.asyncio
async def test_enrich_pdf_texts_skips_other_vaults(self, pdf_dir: Path, tmp_path: Path):
import backend.indexer as idx
vault_root = tmp_path / "vault"
vault_root.mkdir()
shutil.copy2(pdf_dir / "simple.pdf", vault_root / "a.pdf")
file_info = {
"path": "a.pdf",
"title": "a",
"tags": [],
"content": "",
"content_preview": "",
"size": 0,
"modified": "",
"extension": ".pdf",
"pdf_text_pending": True,
}
with idx._index_lock:
idx.index["OtherV"] = {
"files": [file_info],
"tags": {},
"path": str(vault_root),
"paths": [],
}
try:
assert await idx.enrich_pdf_texts("LazyV") == 0
assert file_info["content"] == ""
finally:
with idx._index_lock:
idx.index.pop("OtherV", None)
# ── Search filter `ext:` ───────────────────────────────────────────────────