""" πŸ§ͺ ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ Redis тСсты - ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ YAGNI Волько критичная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π΅Π· слоТного мокирования. """ import pytest from unittest.mock import patch from storage.redis import RedisService class TestRedisServiceSimple: """πŸ§ͺ ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ тСсты Redis - Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ""" def test_redis_service_init(self): """πŸ” ВСст ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвиса""" service = RedisService() assert service._redis_url is not None assert service._client is None assert service.is_connected is False def test_redis_service_init_with_url(self): """πŸ” ВСст ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ с URL""" test_url = "redis://test-host:6379" service = RedisService(test_url) assert service._redis_url == test_url @pytest.mark.asyncio async def test_connect_failure_handling(self): """πŸ” ВСст ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ошибки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ""" service = RedisService() with patch("storage.redis.aioredis.ConnectionPool.from_url") as mock_pool: mock_pool.side_effect = Exception("Connection failed") result = await service.connect() assert result is False assert service._client is None assert service.is_connected is False # πŸ” YAGNI: Π£Π±ΠΈΡ€Π°Π΅ΠΌ тСст ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π±Π΅Π· ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ # Redis автоматичСски ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ @pytest.mark.asyncio async def test_close_without_client(self): """πŸ” ВСст закрытия Π±Π΅Π· ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°""" service = RedisService() # НС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ошибок await service.close() assert service._client is None def test_is_connected_property(self): """πŸ” ВСст свойства is_connected""" service = RedisService() assert service.is_connected is False # Π‘ΠΈΠΌΡƒΠ»ΠΈΡ€ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ service._is_available = True service._client = "fake_client" # ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Π»ΡƒΡˆΠΊΠ° assert service.is_connected is True # πŸ” YAGNI: Π£Π±ΠΈΡ€Π°Π΅ΠΌ слоТныС тСсты сСриализации ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ # Они Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Ρ‡Π΅Ρ€Π΅Π· ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ тСсты с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ Redis @pytest.mark.parametrize("url,expected_in_url", [ ("redis://localhost:6379", "localhost"), ("redis://127.0.0.1:6379", "127.0.0.1"), ("redis://redis-server:6379", "redis-server"), ]) def test_redis_url_handling(url, expected_in_url): """πŸ§ͺ DRY тСст ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ URL""" service = RedisService(url) assert expected_in_url in service._redis_url or "127.0.0.1" in service._redis_url def test_redis_service_default_url(): """πŸ” ВСст URL ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ""" service = RedisService() # Π”ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ URL ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ assert "redis://" in service._redis_url assert "127.0.0.1" in service._redis_url or "localhost" in service._redis_url