152 lines
5.3 KiB
Python
152 lines
5.3 KiB
Python
|
|
"""
|
|||
|
|
Тесты для проверки работы фикстур pytest.
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import pytest
|
|||
|
|
import requests
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_frontend_url_fixture(frontend_url):
|
|||
|
|
"""Тест фикстуры frontend_url"""
|
|||
|
|
assert frontend_url is not None
|
|||
|
|
assert isinstance(frontend_url, str)
|
|||
|
|
assert frontend_url.startswith("http")
|
|||
|
|
|
|||
|
|
# Проверяем что URL соответствует настройкам
|
|||
|
|
# По умолчанию должен быть http://localhost:3000
|
|||
|
|
# Но в тестах может быть переопределен
|
|||
|
|
print(f"📊 frontend_url: {frontend_url}")
|
|||
|
|
print(f"📊 Ожидаемый по умолчанию: http://localhost:3000")
|
|||
|
|
|
|||
|
|
# В тестах может быть любой валидный URL
|
|||
|
|
assert "localhost" in frontend_url or "127.0.0.1" in frontend_url
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_backend_url_fixture(backend_url):
|
|||
|
|
"""Тест фикстуры backend_url"""
|
|||
|
|
assert backend_url == "http://localhost:8000"
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_test_user_credentials_fixture(test_user_credentials):
|
|||
|
|
"""Тест фикстуры test_user_credentials"""
|
|||
|
|
assert test_user_credentials is not None
|
|||
|
|
assert "email" in test_user_credentials
|
|||
|
|
assert "password" in test_user_credentials
|
|||
|
|
assert test_user_credentials["email"] == "test_admin@discours.io"
|
|||
|
|
assert test_user_credentials["password"] == "password123"
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_auth_headers_fixture(auth_headers):
|
|||
|
|
"""Тест фикстуры auth_headers"""
|
|||
|
|
headers = auth_headers()
|
|||
|
|
assert headers["Content-Type"] == "application/json"
|
|||
|
|
|
|||
|
|
# Тест с токеном
|
|||
|
|
token = "test_token_123"
|
|||
|
|
headers_with_token = auth_headers(token)
|
|||
|
|
assert headers_with_token["Content-Type"] == "application/json"
|
|||
|
|
assert headers_with_token["Authorization"] == f"Bearer {token}"
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_wait_for_server_fixture(wait_for_server):
|
|||
|
|
"""Тест фикстуры wait_for_server"""
|
|||
|
|
# Тест с несуществующим URL (должен вернуть False)
|
|||
|
|
result = wait_for_server("http://localhost:9999", max_attempts=1, delay=0.1)
|
|||
|
|
assert result is False
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.integration
|
|||
|
|
def test_backend_server_fixture(backend_server):
|
|||
|
|
"""Тест фикстуры backend_server"""
|
|||
|
|
# Фикстура должна вернуть True если сервер запущен
|
|||
|
|
assert backend_server is True
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.integration
|
|||
|
|
def test_test_client_fixture(test_client):
|
|||
|
|
"""Тест фикстуры test_client"""
|
|||
|
|
from starlette.testclient import TestClient
|
|||
|
|
assert isinstance(test_client, TestClient)
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.asyncio
|
|||
|
|
@pytest.mark.integration
|
|||
|
|
async def test_browser_context_fixture(browser_context):
|
|||
|
|
"""Тест фикстуры browser_context"""
|
|||
|
|
# Проверяем что контекст создан
|
|||
|
|
assert browser_context is not None
|
|||
|
|
|
|||
|
|
# Создаем простую страницу для теста
|
|||
|
|
page = await browser_context.new_page()
|
|||
|
|
assert page is not None
|
|||
|
|
|
|||
|
|
# Закрываем страницу
|
|||
|
|
await page.close()
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.asyncio
|
|||
|
|
@pytest.mark.integration
|
|||
|
|
async def test_page_fixture(page):
|
|||
|
|
"""Тест фикстуры page"""
|
|||
|
|
# Проверяем что страница создана
|
|||
|
|
assert page is not None
|
|||
|
|
|
|||
|
|
# Проверяем что таймауты установлены
|
|||
|
|
# (это внутренняя деталь Playwright, но мы можем проверить что страница работает)
|
|||
|
|
try:
|
|||
|
|
# Пытаемся перейти на пустую страницу
|
|||
|
|
await page.goto("data:text/html,<html><body>Test</body></html>")
|
|||
|
|
content = await page.content()
|
|||
|
|
assert "Test" in content
|
|||
|
|
except Exception as e:
|
|||
|
|
# Если что-то пошло не так, это не критично для теста фикстуры
|
|||
|
|
pytest.skip(f"Playwright не готов: {e}")
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.integration
|
|||
|
|
def test_api_base_url_fixture(api_base_url):
|
|||
|
|
"""Тест фикстуры api_base_url"""
|
|||
|
|
assert api_base_url == "http://localhost:8000/graphql"
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_db_session_fixture(db_session):
|
|||
|
|
"""Тест фикстуры db_session"""
|
|||
|
|
# Проверяем что сессия создана
|
|||
|
|
assert db_session is not None
|
|||
|
|
|
|||
|
|
# Проверяем что можем выполнить простой запрос
|
|||
|
|
from sqlalchemy import text
|
|||
|
|
result = db_session.execute(text("SELECT 1"))
|
|||
|
|
assert result.scalar() == 1
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_test_engine_fixture(test_engine):
|
|||
|
|
"""Тест фикстуры test_engine"""
|
|||
|
|
# Проверяем что engine создан
|
|||
|
|
assert test_engine is not None
|
|||
|
|
|
|||
|
|
# Проверяем что можем выполнить простой запрос
|
|||
|
|
from sqlalchemy import text
|
|||
|
|
with test_engine.connect() as conn:
|
|||
|
|
result = conn.execute(text("SELECT 1"))
|
|||
|
|
assert result.scalar() == 1
|
|||
|
|
|
|||
|
|
|
|||
|
|
@pytest.mark.unit
|
|||
|
|
def test_test_session_factory_fixture(test_session_factory):
|
|||
|
|
"""Тест фикстуры test_session_factory"""
|
|||
|
|
# Проверяем что фабрика создана
|
|||
|
|
assert test_session_factory is not None
|
|||
|
|
|
|||
|
|
# Проверяем что можем создать сессию
|
|||
|
|
session = test_session_factory()
|
|||
|
|
assert session is not None
|
|||
|
|
session.close()
|