""" Конфигурация pytest для тестирования API эндпоинтов """ import pytest import requests import time import os import sys from pathlib import Path # Добавляем путь к проекту для импорта модулей project_root = Path(__file__).parent.parent sys.path.insert(0, str(project_root / "python_parser")) from adapters.local_storage import LocalStorageAdapter # Базовый URL API API_BASE_URL = "http://localhost:8000" # Путь к тестовым данным TEST_DATA_DIR = Path(__file__).parent / "test_data" @pytest.fixture(scope="session") def api_base_url(): """Базовый URL для API""" return API_BASE_URL @pytest.fixture(scope="session") def test_data_dir(): """Директория с тестовыми данными""" return TEST_DATA_DIR @pytest.fixture(scope="session") def wait_for_api(): """Ожидание готовности API""" max_attempts = 30 for attempt in range(max_attempts): try: response = requests.get(f"{API_BASE_URL}/docs", timeout=5) if response.status_code == 200: print(f"✅ API готов после {attempt + 1} попыток") return True except requests.exceptions.RequestException: pass if attempt < max_attempts - 1: time.sleep(2) pytest.fail("❌ API не готов после 30 попыток") @pytest.fixture def upload_file(test_data_dir): """Фикстура для загрузки файла""" def _upload_file(filename): file_path = test_data_dir / filename if not file_path.exists(): pytest.skip(f"Файл {filename} не найден в {test_data_dir}") return file_path return _upload_file @pytest.fixture(scope="session") def local_storage(): """Фикстура для локального storage""" storage = LocalStorageAdapter("tests/local_storage") yield storage # Очищаем storage после всех тестов storage.clear_all() @pytest.fixture def clean_storage(local_storage): """Фикстура для очистки storage перед каждым тестом""" local_storage.clear_all() yield local_storage def make_api_request(url, method="GET", data=None, files=None, json_data=None): """Универсальная функция для API запросов""" try: if method.upper() == "GET": response = requests.get(url, timeout=30) elif method.upper() == "POST": if files: response = requests.post(url, files=files, timeout=30) elif json_data: response = requests.post(url, json=json_data, timeout=30) else: response = requests.post(url, data=data, timeout=30) else: raise ValueError(f"Неподдерживаемый метод: {method}") return response except requests.exceptions.RequestException as e: pytest.fail(f"Ошибка API запроса: {e}") @pytest.fixture def api_request(): """Фикстура для API запросов""" return make_api_request