54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
from unittest.mock import MagicMock, patch
|
|
import pytest
|
|
from src.rag_engine import RAGEngine
|
|
from src.result_types import Result, ErrorKind, ErrorInfo, NilRAGState
|
|
|
|
|
|
def test_init_vector_store_returns_result_not_raises() -> None:
|
|
config = MagicMock()
|
|
config.vector_store.provider = "chroma"
|
|
config.vector_store.collection_name = "test"
|
|
config.embedding_provider = "gemini"
|
|
engine = RAGEngine(base_dir="/tmp", config=config)
|
|
with patch("src.rag_engine._get_chromadb", return_value=None):
|
|
r = engine._init_vector_store_result()
|
|
assert isinstance(r, Result)
|
|
assert not r.ok
|
|
assert len(r.errors) >= 1
|
|
assert r.errors[0].kind == ErrorKind.CONFIG
|
|
|
|
|
|
def test_init_vector_store_unknown_provider_returns_error_info() -> None:
|
|
config = MagicMock()
|
|
config.vector_store.provider = "unknown_provider_xyz"
|
|
config.embedding_provider = "gemini"
|
|
engine = RAGEngine(base_dir="/tmp", config=config)
|
|
r = engine._init_vector_store_result()
|
|
assert not r.ok
|
|
assert r.errors[0].kind == ErrorKind.CONFIG
|
|
assert "unknown_provider_xyz" in r.errors[0].message
|
|
|
|
|
|
def test_validate_collection_dim_returns_result() -> None:
|
|
config = MagicMock()
|
|
config.vector_store.provider = "chroma"
|
|
config.vector_store.collection_name = "test"
|
|
config.embedding_provider = "gemini"
|
|
engine = RAGEngine(base_dir="/tmp", config=config)
|
|
engine.collection = None
|
|
engine.embedding_provider = None
|
|
r = engine._validate_collection_dim_result()
|
|
assert isinstance(r, Result)
|
|
assert r.ok
|
|
|
|
|
|
def test_is_empty_uses_nil_rag_state_when_not_configured() -> None:
|
|
config = MagicMock()
|
|
config.enabled = False
|
|
engine = RAGEngine(base_dir="/tmp", config=config)
|
|
state = engine._get_state()
|
|
assert isinstance(state, NilRAGState)
|
|
assert state.enabled is False
|
|
assert state.is_empty_result is True
|
|
assert state.errors == []
|