"""Tests for Redis client wrapper.""" import pytest from unittest.mock import Mock, patch, MagicMock, AsyncMock class TestRedisClient: """Tests for RedisClient class.""" @patch('src.core.redis.get_config') def test_get_client_creates_connection(self, mock_config): """Test that get_client creates a Redis connection.""" # Setup mock config mock_config.return_value.get.return_value = { "host": "localhost", "port": 6379, "db": 0, "password": None, "socket_connect_timeout": 5 } from src.core.redis import RedisClient client = RedisClient() # Should not have connected yet assert client._client is None # Get client should trigger connection with patch('src.core.redis.redis.ConnectionPool') as mock_pool: with patch('src.core.redis.redis.Redis') as mock_redis: redis_client = client.get_client() mock_pool.assert_called_once() mock_redis.assert_called_once() @patch('src.core.redis.get_config') def test_get_client_reuses_existing(self, mock_config): """Test that get_client reuses existing connection.""" mock_config.return_value.get.return_value = { "host": "localhost", "port": 6379, "db": 0, } from src.core.redis import RedisClient client = RedisClient() # Pre-set a mock client mock_redis = Mock() client._client = mock_redis # Should return existing result = client.get_client() assert result is mock_redis @patch('src.core.redis.get_config') @pytest.mark.asyncio async def test_close_connection(self, mock_config): """Test closing Redis connection.""" mock_config.return_value.get.return_value = {"host": "localhost"} from src.core.redis import RedisClient client = RedisClient() mock_redis = AsyncMock() client._client = mock_redis await client.close() mock_redis.aclose.assert_called_once() class TestGetRedisClient: """Tests for get_redis_client singleton.""" @patch('src.core.redis.get_config') def test_returns_singleton(self, mock_config): """Test that get_redis_client returns same instance.""" mock_config.return_value.get.return_value = {"host": "localhost"} # Reset the global import src.core.redis as redis_module redis_module._redis_client = None from src.core.redis import get_redis_client client1 = get_redis_client() client2 = get_redis_client() assert client1 is client2