Files
core/tests/test_config.py
Untone ac0111cdb9
All checks were successful
Deploy on push / deploy (push) Successful in 57m1s
tests-upgrade
2025-09-25 09:40:12 +03:00

119 lines
3.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
🧪 Общая конфигурация для тестов - DRY принцип
Централизованные настройки, константы и общие фикстуры.
"""
import pytest
from typing import Dict, Any
# 🔍 DRY: Общие константы для тестов
TEST_USER_IDS = {
"FOLLOWER": 2466,
"TARGET_AUTHOR": 9999,
"ADMIN": 1,
"REGULAR_USER": 100,
}
TEST_EMAILS = {
"FOLLOWER": "follower@example.com",
"TARGET_AUTHOR": "target@example.com",
"ADMIN": "admin@example.com",
"REGULAR_USER": "user@example.com",
}
TEST_SLUGS = {
"FOLLOWER": "test-follower",
"TARGET_AUTHOR": "test-target-author",
"ADMIN": "test-admin",
"REGULAR_USER": "test-user",
}
# 🔍 YAGNI: Только необходимые OAuth провайдеры для тестов
OAUTH_PROVIDERS = ["google", "github", "facebook"]
# 🔍 DRY: Общие настройки для Redis тестов
REDIS_TEST_CONFIG = {
"host": "127.0.0.1",
"port": 6379,
"db": 0,
"decode_responses": True,
}
# 🔍 DRY: Общие HTTP статусы для тестов
HTTP_STATUS = {
"OK": 200,
"BAD_REQUEST": 400,
"UNAUTHORIZED": 401,
"FORBIDDEN": 403,
"NOT_FOUND": 404,
"REDIRECT": 307,
}
@pytest.fixture
def test_user_data() -> Dict[str, Any]:
"""🔍 DRY фикстура с тестовыми данными пользователей"""
return {
"ids": TEST_USER_IDS,
"emails": TEST_EMAILS,
"slugs": TEST_SLUGS,
}
@pytest.fixture
def oauth_test_data() -> Dict[str, Any]:
"""🔍 DRY фикстура с тестовыми данными OAuth"""
return {
"providers": OAUTH_PROVIDERS,
"valid_state": "valid_test_state_123",
"invalid_state": "invalid_state",
"auth_code": "test_auth_code_123",
"access_token": "test_access_token_123",
"redirect_uri": "https://localhost:3000",
"code_verifier": "test_code_verifier_123",
}
@pytest.fixture
def redis_test_config() -> Dict[str, Any]:
"""🔍 DRY фикстура с конфигурацией Redis для тестов"""
return REDIS_TEST_CONFIG.copy()
def skip_test_if_condition(condition: bool, reason: str):
"""🔍 DRY хелпер для условного пропуска тестов"""
if condition:
pytest.skip(reason)
def assert_response_status(response, expected_status: int, message: str = ""):
"""🔍 DRY хелпер для проверки статуса ответа"""
actual_status = getattr(response, 'status_code', None)
assert actual_status == expected_status, f"{message} Expected {expected_status}, got {actual_status}"
def assert_json_contains(response_data: str, expected_keys: list, message: str = ""):
"""🔍 DRY хелпер для проверки содержимого JSON ответа"""
for key in expected_keys:
assert key in response_data, f"{message} Missing key '{key}' in response"
# 🔍 YAGNI: Убираем сложные тестовые сценарии, оставляем простые
SIMPLE_TEST_SCENARIOS = {
"follow_success": {
"action": "follow",
"expected_error": None,
"expected_count": 1,
},
"follow_already_following": {
"action": "follow_duplicate",
"expected_error": "already following",
"expected_count": 1,
},
"unfollow_success": {
"action": "unfollow",
"expected_error": None,
"expected_count": 0,
},
}