tests-upgrade
All checks were successful
Deploy on push / deploy (push) Successful in 57m1s

This commit is contained in:
2025-09-25 09:40:12 +03:00
parent 1992434a13
commit ac0111cdb9
17 changed files with 766 additions and 363 deletions

View File

@@ -993,21 +993,79 @@ def api_base_url(backend_server):
@pytest.fixture
def test_user_credentials():
"""
👤 Возвращает тестовые учетные данные для авторизации.
👤 Возвращает тестовые учетные данные для авторизации из переменных окружения.
"""
import os
# 🔍 Используем переменные окружения TEST_LOGIN и TEST_PASSWORD
test_email = os.getenv("TEST_LOGIN", "test_admin@discours.io")
test_password = os.getenv("TEST_PASSWORD", "password123")
return {
"email": "test_admin@discours.io",
"password": "password123"
"email": test_email,
"password": test_password
}
@pytest.fixture
def create_test_users_in_backend_db():
"""
👥 Создает тестовых пользователей в базе данных бэкенда для E2E тестов.
👥 Создает нового тестового пользователя в базе данных бэкенда для E2E тестов.
🔍 Всегда создает нового пользователя с уникальным email на основе TEST_LOGIN/TEST_PASSWORD
🏘️ Сначала создает базовое сообщество, если его нет
"""
import requests
import time
import os
import uuid
# 🔍 Используем переменные окружения TEST_LOGIN и TEST_PASSWORD
base_email = os.getenv("TEST_LOGIN", "test_admin@discours.io")
test_password = os.getenv("TEST_PASSWORD", "password123")
# 🔍 Создаем уникальный email для каждого теста
unique_suffix = str(uuid.uuid4())[:8]
if "@" in base_email:
email_parts = base_email.split("@")
test_email = f"{email_parts[0]}+{unique_suffix}@{email_parts[1]}"
else:
test_email = f"{base_email}+{unique_suffix}@discours.io"
# 🏘️ Создаем базовое сообщество в тестовой БД E2E через ORM
print("🏘️ Создаем базовое сообщество в тестовой БД E2E...")
try:
from orm.community import Community
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
import time
# Используем ту же БД, что и E2E бэкенд сервер
test_engine = create_engine("sqlite:///test_e2e.db", echo=False)
TestSession = sessionmaker(bind=test_engine)
with TestSession() as session:
# Проверяем, есть ли сообщество с ID=1
existing_community = session.query(Community).where(Community.id == 1).first()
if not existing_community:
# Создаем базовое сообщество
base_community = Community(
name="Test Community",
slug="test-community",
desc="Base community for E2E tests",
pic="",
created_at=int(time.time()),
created_by=None, # Создатель не обязателен
settings={},
private=False
)
session.add(base_community)
session.commit()
print("✅ Базовое сообщество создано в тестовой БД E2E")
else:
print("✅ Базовое сообщество уже существует в тестовой БД E2E")
except Exception as e:
print(f"⚠️ Ошибка создания базового сообщества: {e}")
# Продолжаем выполнение - возможно, сообщество уже есть
# Создаем пользователя через API
register_user_mutation = """
@@ -1024,13 +1082,15 @@ def create_test_users_in_backend_db():
}
"""
# Создаем админа
# Создаем нового админа с уникальным email
admin_data = {
"email": "test_admin@discours.io",
"password": "password123",
"name": "Test Admin"
"email": test_email,
"password": test_password,
"name": f"Test Admin {unique_suffix}"
}
print(f"🔍 Создаем нового тестового пользователя: {test_email}")
try:
response = requests.post(
"http://localhost:8000/graphql",
@@ -1042,23 +1102,22 @@ def create_test_users_in_backend_db():
if response.status_code == 200:
data = response.json()
if data.get("data", {}).get("registerUser", {}).get("success"):
print("Админ создан в базе бэкенда")
print(f"Новый тестовый пользователь создан: {test_email}")
return {"email": test_email, "password": test_password, "created": True}
else:
error = data.get("data", {}).get("registerUser", {}).get("error")
if "уже существует" in error:
print("✅ Админ уже существует в базе бэкенда")
else:
print(f"⚠️ Ошибка создания админа: {error}")
print(f"⚠️ Ошибка создания тестового пользователя: {error}")
return {"email": test_email, "password": test_password, "created": False, "error": error}
else:
print(f"⚠️ HTTP ошибка при создании админа: {response.status_code}")
print(f"⚠️ HTTP ошибка при создании тестового пользователя: {response.status_code}")
return {"email": test_email, "password": test_password, "created": False}
except Exception as e:
print(f"⚠️ Ошибка при создании админа: {e}")
print(f"⚠️ Ошибка при создании тестового пользователя: {e}")
return {"email": test_email, "password": test_password, "created": False, "error": str(e)}
# Ждем немного для завершения операции
time.sleep(1)
return True
@pytest.fixture
@@ -1098,19 +1157,24 @@ def wait_for_server():
@pytest.fixture
def test_users(db_session):
"""Создает тестовых пользователей для тестов"""
import os
from orm.author import Author
# 🔍 Используем переменные окружения TEST_LOGIN и TEST_PASSWORD
test_email = os.getenv("TEST_LOGIN", "test_admin@discours.io")
test_password = os.getenv("TEST_PASSWORD", "password123")
# Создаем первого пользователя (администратор)
# Этот email должен быть в ADMIN_EMAILS для автоматического получения роли admin
admin_user = Author(
slug="test-admin",
email="test_admin@discours.io",
email=test_email,
name="Test Admin",
bio="Test admin user for testing",
pic="https://example.com/avatar1.jpg",
oauth={}
)
admin_user.set_password("password123")
admin_user.set_password(test_password)
db_session.add(admin_user)
# Создаем второго пользователя (обычный пользователь)