"""Tests for the Split.io Connector.""" from unittest.mock import MagicMock from splitio.exceptions import TimeoutException import pytest from features.connectors import split def test_split_sdk_success(mock_splitio_factory, monkeypatch): """Test split.factory is setup when config.SPLITIO_API_KEY is set.""" mock_client = MagicMock() mock_manager = MagicMock() mock_splitio_factory.return_value.client.return_value = mock_client mock_splitio_factory.return_value.manager.return_value = mock_manager assert split.get_split_client() == mock_client assert split.get_split_manager() == mock_manager def test_init_splitio_sdk_success(mock_splitio_factory, monkeypatch): """Test successful initialization of Split.io SDK.""" monkeypatch.setattr(split, '_factory', None) split.init_splitio_sdk() mock_splitio_factory.assert_called_once() mock_splitio_factory.return_value.block_until_ready.assert_called_once() def test_init_splitio_sdk_already_initialized( mock_splitio_factory, monkeypatch, caplog ): """Test that initializing SDK twice logs a warning.""" # Factory is already set by the fixture split.init_splitio_sdk() assert 'Split.io factory already initialized' in caplog.text mock_splitio_factory.assert_not_called() def test_init_splitio_sdk_with_timeout_failure(mock_splitio_factory, monkeypatch): """Test that SDK initialization raises exception after retry fails.""" monkeypatch.setattr(split, '_factory', None) mock_splitio_factory.return_value.block_until_ready.side_effect = TimeoutException( 'Timeout' ) with pytest.raises(TimeoutException): split.init_splitio_sdk() def test_init_splitio_sdk_factory_returns_none(mock_splitio_factory, monkeypatch): """Test that initialization raises RuntimeError when get_factory returns None.""" monkeypatch.setattr(split, '_factory', None) mock_splitio_factory.return_value = None with pytest.raises( RuntimeError, match='Splitio Initialization failed. Please verify the SPLIT_CONFIG.', ): split.init_splitio_sdk()