tests-passed

This commit is contained in:
2025-07-31 18:55:59 +03:00
parent b7abb8d8a1
commit e7230ba63c
126 changed files with 8326 additions and 3207 deletions

View File

@@ -10,7 +10,7 @@ def ensure_test_user_with_roles(db_session):
"""Создает тестового пользователя с ID 1 и назначает ему роли через CommunityAuthor"""
# Создаем пользователя с ID 1 если его нет
test_user = db_session.query(Author).filter(Author.id == 1).first()
test_user = db_session.query(Author).where(Author.id == 1).first()
if not test_user:
test_user = Author(id=1, email="test@example.com", name="Test User", slug="test-user")
test_user.set_password("password123")
@@ -20,7 +20,7 @@ def ensure_test_user_with_roles(db_session):
# Удаляем старые роли
existing_community_author = (
db_session.query(CommunityAuthor)
.filter(CommunityAuthor.author_id == test_user.id, CommunityAuthor.community_id == 1)
.where(CommunityAuthor.author_id == test_user.id, CommunityAuthor.community_id == 1)
.first()
)
@@ -62,10 +62,24 @@ def test_shout(db_session):
"""Create test shout with required fields."""
author = ensure_test_user_with_roles(db_session)
# Создаем тестовое сообщество если его нет
from orm.community import Community
community = db_session.query(Community).where(Community.id == 1).first()
if not community:
community = Community(
name="Test Community",
slug="test-community",
desc="Test community description",
created_by=author.id
)
db_session.add(community)
db_session.flush()
shout = Shout(
title="Test Shout",
slug="test-shout-drafts",
created_by=author.id, # Обязательное поле
community=community.id, # Обязательное поле
body="Test body",
layout="article",
lang="ru",
@@ -78,23 +92,27 @@ def test_shout(db_session):
@pytest.mark.asyncio
async def test_create_shout(db_session, test_author):
"""Test creating a new draft using direct resolver call."""
# Создаем мок info
info = MockInfo(test_author.id)
# Вызываем резолвер напрямую
result = await create_draft(
None,
info,
draft_input={
"title": "Test Shout",
"body": "This is a test shout",
},
)
# Мокаем local_session чтобы использовать тестовую сессию
from unittest.mock import patch
from services.db import local_session
# Проверяем результат
assert "error" not in result or result["error"] is None
assert result["draft"].title == "Test Shout"
assert result["draft"].body == "This is a test shout"
with patch('services.db.local_session') as mock_local_session:
mock_local_session.return_value = db_session
result = await create_draft(
None,
MockInfo(test_author.id),
draft_input={
"title": "Test Shout",
"body": "This is a test shout",
},
)
# Проверяем результат
assert "error" not in result or result["error"] is None
assert result["draft"].title == "Test Shout"
assert result["draft"].body == "This is a test shout"
@pytest.mark.asyncio
@@ -106,18 +124,25 @@ async def test_load_drafts(db_session):
# Создаем мок info
info = MockInfo(test_user.id)
# Вызываем резолвер напрямую
result = await load_drafts(None, info)
# Мокаем local_session чтобы использовать тестовую сессию
from unittest.mock import patch
from services.db import local_session
# Проверяем результат (должен быть список, может быть не пустой из-за предыдущих тестов)
assert "error" not in result or result["error"] is None
assert isinstance(result["drafts"], list)
with patch('services.db.local_session') as mock_local_session:
mock_local_session.return_value = db_session
# Если есть черновики, проверим что они правильной структуры
if result["drafts"]:
draft = result["drafts"][0]
assert "id" in draft
assert "title" in draft
assert "body" in draft
assert "authors" in draft
assert "topics" in draft
# Вызываем резолвер напрямую
result = await load_drafts(None, info)
# Проверяем результат (должен быть список, может быть не пустой из-за предыдущих тестов)
assert "error" not in result or result["error"] is None
assert isinstance(result["drafts"], list)
# Если есть черновики, проверим что они правильной структуры
if result["drafts"]:
draft = result["drafts"][0]
assert "id" in draft
assert "title" in draft
assert "body" in draft
assert "authors" in draft
assert "topics" in draft