Update test files with refinements and fixes

- test_anime_endpoints.py: Minor updates
- test_download_retry.py: Refinements
- test_i18n.js: Updates
- test_tmdb_client.py: Improvements
- test_tmdb_rate_limiting.py: Test enhancements
- test_user_preferences.js: Updates
This commit is contained in:
2026-02-02 07:19:36 +01:00
parent c757123429
commit d74c181556
6 changed files with 185 additions and 92 deletions

View File

@@ -25,8 +25,11 @@ class TestTMDBRateLimiting:
mock_response.status = 429
mock_response.headers = {'Retry-After': '2'}
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
# Should retry after rate limit
@@ -101,8 +104,11 @@ class TestTMDBRateLimiting:
return mock_response_429
return mock_response_200
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
@@ -141,8 +147,11 @@ class TestTMDBRateLimiting:
call_count += 1
return response
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
@@ -163,8 +172,11 @@ class TestTMDBExponentialBackoff:
"""Test exponential backoff delays on timeout errors."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
# Mock timeout errors
mock_get.side_effect = asyncio.TimeoutError()
@@ -184,8 +196,11 @@ class TestTMDBExponentialBackoff:
"""Test exponential backoff on aiohttp ClientError."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = aiohttp.ClientError("Connection failed")
@@ -218,8 +233,11 @@ class TestTMDBExponentialBackoff:
mock_response.raise_for_status = MagicMock()
return mock_response
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
@@ -236,8 +254,11 @@ class TestTMDBExponentialBackoff:
"""Test that retries stop after max_retries attempts."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = asyncio.TimeoutError()
@@ -265,8 +286,11 @@ class TestTMDBQuotaExhaustion:
mock_response.status = 429
mock_response.headers = {'Retry-After': '3600'} # 1 hour
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.return_value.__aenter__.return_value = mock_response
@@ -286,8 +310,11 @@ class TestTMDBQuotaExhaustion:
mock_response = AsyncMock()
mock_response.status = 401
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
with pytest.raises(TMDBAPIError) as exc_info:
@@ -309,8 +336,11 @@ class TestTMDBErrorParsing:
mock_response = AsyncMock()
mock_response.status = 404
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
with pytest.raises(TMDBAPIError) as exc_info:
@@ -349,9 +379,12 @@ class TestTMDBErrorParsing:
mock_response_200.raise_for_status = MagicMock()
return mock_response_200
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock):
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
result = await client._request("test/endpoint", max_retries=3)
@@ -366,8 +399,11 @@ class TestTMDBErrorParsing:
"""Test parsing of network connection errors."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.side_effect = aiohttp.ClientConnectorError(
connection_key=MagicMock(),
os_error=OSError("Network unreachable")
@@ -389,8 +425,11 @@ class TestTMDBTimeoutHandling:
"""Test handling of request timeout."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.side_effect = asyncio.TimeoutError()
with pytest.raises(TMDBAPIError) as exc_info:
@@ -419,9 +458,12 @@ class TestTMDBTimeoutHandling:
mock_response.raise_for_status = MagicMock()
return mock_response
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock):
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
result = await client._request("test/endpoint", max_retries=3)
@@ -441,8 +483,11 @@ class TestTMDBTimeoutHandling:
mock_response.json = AsyncMock(return_value={"data": "test"})
mock_response.raise_for_status = MagicMock()
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
await client._request("test/endpoint")
@@ -460,8 +505,11 @@ class TestTMDBTimeoutHandling:
"""Test handling of multiple consecutive timeouts."""
client = TMDBClient(api_key="test_key")
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = asyncio.TimeoutError()
@@ -490,8 +538,11 @@ class TestTMDBCaching:
mock_response.json = AsyncMock(return_value={"cached": "data"})
mock_response.raise_for_status = MagicMock()
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
# First request
@@ -517,8 +568,11 @@ class TestTMDBCaching:
mock_response.json = AsyncMock(return_value={"data": "test"})
mock_response.raise_for_status = MagicMock()
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
# Two requests with different parameters
@@ -540,8 +594,11 @@ class TestTMDBCaching:
mock_response.json = AsyncMock(return_value={"data": "test"})
mock_response.raise_for_status = MagicMock()
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get:
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get:
mock_get.return_value.__aenter__.return_value = mock_response
# First request (cache miss)
@@ -615,9 +672,12 @@ class TestTMDBSessionManagement:
mock_response.raise_for_status = MagicMock()
return mock_response
with patch.object(client, '_ensure_session'), \
patch('aiohttp.ClientSession.get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock):
mock_session = AsyncMock()
mock_session.closed = False
client.session = mock_session
with patch.object(mock_session, 'get') as mock_get, \
patch('asyncio.sleep', new_callable=AsyncMock) as mock_sleep:
mock_get.side_effect = mock_get_side_effect
result = await client._request("test/endpoint", max_retries=3)