This commit is contained in:
@@ -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)
|
||||
|
||||
# Создаем второго пользователя (обычный пользователь)
|
||||
|
||||
Reference in New Issue
Block a user