haiku.rag/tests/test_database_autocreate.py
Yiorgis Gozadinos f6acb65e95
Reach and enforce 100% coverage
Cover the remaining paths in the client, context, downloads, title
generation, document tools and store models, and add fail_under=100 so
uncovered lines fail CI.

Six lines that no test can reach get a pragma with its reason: the docling
import guard, the nameless PDF attachment, the FS symlink OSError guard that
resolve(strict=False) absorbs, the docling bbox and LanceDB document-id
shape guards, the tag-retention branch vacuum makes unreachable, and Monty's
Rust-thread print callback.

Fix test_find_config_file_user_config, which wrote its config into the cwd it
had chdir'd to, so the cwd branch answered first and the user-directory
lookup it names was never exercised.
2026-07-26 20:11:02 +03:00

68 lines
2.1 KiB
Python

import pytest
from haiku.rag.client import HaikuRAG
from haiku.rag.config import AppConfig
async def test_database_not_created_without_create_flag(tmp_path):
"""Test that database is not created without create=True."""
db_path = tmp_path / "test.lancedb"
config = AppConfig()
with pytest.raises(FileNotFoundError, match="Database does not exist"):
async with HaikuRAG(db_path=db_path, config=config):
pass
async def test_database_created_with_create_flag(tmp_path):
"""Test that database is created with create=True."""
db_path = tmp_path / "test.lancedb"
config = AppConfig()
async with HaikuRAG(db_path=db_path, config=config, create=True):
assert db_path.exists()
@pytest.mark.vcr()
async def test_operations_work_after_database_created(tmp_path):
"""Test that operations work after DB is created."""
db_path = tmp_path / "test.lancedb"
config = AppConfig()
# First, create DB with create=True and add document
async with HaikuRAG(db_path=db_path, config=config, create=True) as client:
await client.create_document("Test content", uri="test://doc1")
# Re-open without create flag and verify we can read the document
async with HaikuRAG(db_path=db_path, config=config) as client:
docs = await client.list_documents()
assert len(docs) == 1
doc = await client.get_document_by_id(docs[0].id)
assert doc is not None
assert doc.content == "Test content"
@pytest.mark.asyncio
async def test_default_db_path_comes_from_storage_data_dir(tmp_path):
"""Omitting db_path places the database under the configured data dir."""
from haiku.rag.client import HaikuRAG
from haiku.rag.config import AppConfig
config = AppConfig()
config.storage.data_dir = tmp_path
client = HaikuRAG(config=config)
assert client._db_path == tmp_path / "haiku.rag.lancedb"
@pytest.mark.asyncio
async def test_vacuum_is_callable_on_the_client(temp_db_path):
"""The public vacuum() delegates to the store."""
from haiku.rag.client import HaikuRAG
async with HaikuRAG(temp_db_path, create=True) as client:
await client.vacuum()