Files
core/tests/test_fixtures.py

158 lines
5.6 KiB
Python
Raw Normal View History

2025-08-17 11:09:29 +03:00
"""
Тесты для проверки работы фикстур 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"""
2025-09-25 09:40:12 +03:00
import os
# 🔍 Проверяем что фикстура использует переменные окружения
expected_email = os.getenv("TEST_LOGIN", "test_admin@discours.io")
expected_password = os.getenv("TEST_PASSWORD", "password123")
2025-08-17 11:09:29 +03:00
assert test_user_credentials is not None
assert "email" in test_user_credentials
assert "password" in test_user_credentials
2025-09-25 09:40:12 +03:00
assert test_user_credentials["email"] == expected_email
assert test_user_credentials["password"] == expected_password
2025-08-17 11:09:29 +03:00
@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()