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.
68 lines
2.1 KiB
Python
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()
|