"""Test cortex_search module-level singleton helpers.""" from unittest.mock import MagicMock, patch import pytest import payment.connectors.cortex_search as module from payment.connectors.cortex_search import get_client, init_cortex_search from payment.connectors.cortex_search.client import CortexSearchConfig @pytest.fixture(autouse=True) def reset_singleton(): module._client = None yield module._client = None def make_config(): return CortexSearchConfig( SNOWFLAKE_ACCOUNT='acc', SNOWFLAKE_USER='usr', SNOWFLAKE_DATABASE='DB', SNOWFLAKE_SCHEMA='SCHEMA', SNOWFLAKE_CORTEX_SEARCH_SERVICE_NAME='SVC', SNOWFLAKE_PRIVATE_KEY=b'key', ) @patch('payment.connectors.cortex_search.CortexSearchClient') def test_init_creates_singleton(mock_cls): config = make_config() init_cortex_search(config) mock_cls.assert_called_once_with(config, None) assert module._client is mock_cls.return_value @patch('payment.connectors.cortex_search.CortexSearchClient') def test_init_is_idempotent(mock_cls): config = make_config() init_cortex_search(config) init_cortex_search(config) mock_cls.assert_called_once() @patch('payment.connectors.cortex_search.CortexSearchClient') def test_init_passes_logger_factory(mock_cls): config = make_config() factory = MagicMock() init_cortex_search(config, logger_factory=factory) mock_cls.assert_called_once_with(config, factory) @patch('payment.connectors.cortex_search.CortexSearchClient') def test_get_client_returns_initialized_client(mock_cls): config = make_config() init_cortex_search(config) client = get_client() assert client is mock_cls.return_value def test_get_client_raises_when_not_initialized(): with pytest.raises(RuntimeError, match='init_cortex_search'): get_client()