"""Tests for embedding model management.""" from unittest.mock import MagicMock, patch import click import pytest from kb_search.embeddings import check_model_binding @pytest.fixture def mock_conn(): """Mock DB connection with config values.""" def make_conn(config_values=None): config_values = config_values or {} conn = MagicMock() def mock_execute(sql, params=None): if "SELECT value FROM config" in sql and params: key = params[0] val = config_values.get(key) row = MagicMock() row.__getitem__ = lambda self, k: val result = MagicMock() result.fetchone.return_value = row if val else None return result return MagicMock() conn.execute = mock_execute return conn return make_conn def test_model_binding_match(mock_conn): conn = mock_conn({"model_name": "all-MiniLM-L6-v2", "embedding_dim": "384"}) cfg = {"embedding": {"model": "all-MiniLM-L6-v2"}} # Should not raise check_model_binding(conn, cfg) def test_model_binding_mismatch(mock_conn): conn = mock_conn({"model_name": "all-MiniLM-L6-v2", "embedding_dim": "384"}) cfg = {"embedding": {"model": "nomic-embed-text"}} with pytest.raises(click.ClickException, match="Model mismatch"): check_model_binding(conn, cfg) def test_model_binding_no_db_model(mock_conn): conn = mock_conn({}) cfg = {"embedding": {"model": "anything"}} # Should not raise when DB not yet initialised check_model_binding(conn, cfg)