draft-publish-fix
Some checks failed
Deploy on push / deploy (push) Failing after 2m36s

This commit is contained in:
2025-08-23 11:56:40 +03:00
parent d38c1485e4
commit ee53d5b491
4 changed files with 99 additions and 2 deletions

View File

@@ -74,3 +74,75 @@ class TestDraftPublishFix:
# Assert
assert not hasattr(shout, 'draft')
"""
Тест для проверки исправления возвращаемого значения в publish_draft.
"""
import pytest
from unittest.mock import patch, MagicMock, AsyncMock
from resolvers.draft import publish_draft
@pytest.mark.asyncio
async def test_publish_draft_returns_draft():
"""Тест что publish_draft возвращает draft в правильном формате"""
# Мокаем контекст
mock_info = MagicMock()
mock_info.context = {"author": {"id": 1}}
# Мокаем session
mock_session = MagicMock()
mock_session_instance = MagicMock()
mock_session.return_value.__enter__.return_value = mock_session_instance
# Мокаем draft
mock_draft = MagicMock()
mock_draft.id = 1
mock_draft.body = "<p>Test content</p>"
mock_draft.shout = None
mock_draft.authors = []
mock_draft.topics = []
mock_draft.dict.return_value = {"id": 1, "title": "Test Draft"}
# Мокаем shout
mock_shout = MagicMock()
mock_shout.id = 100
mock_shout.slug = "test-shout"
mock_shout.published_at = 1234567890
mock_shout.dict.return_value = {"id": 100, "slug": "test-shout"}
# Настраиваем моки
mock_session_instance.query.return_value.options.return_value.where.return_value.first.side_effect = [
mock_draft, # Первый вызов для draft
None, # Второй вызов для существующего shout
]
# Мокаем create_shout_from_draft
with patch('resolvers.draft.create_shout_from_draft', return_value=mock_shout):
with patch('resolvers.draft.validate_html_content', return_value=(True, None)):
with patch('resolvers.draft.invalidate_shouts_cache', new_callable=AsyncMock):
with patch('resolvers.draft.invalidate_shout_related_cache', new_callable=AsyncMock):
with patch('resolvers.draft.notify_shout', new_callable=AsyncMock):
with patch('resolvers.draft.search_service.index'):
with patch('resolvers.draft.local_session', mock_session):
# Вызываем функцию
result = await publish_draft(None, mock_info, 1)
# Проверяем результат
assert "draft" in result
assert "error" not in result
draft_data = result["draft"]
assert draft_data["id"] == 1
assert "shout" in draft_data
shout_data = draft_data["shout"]
assert shout_data["id"] == 100
assert shout_data["slug"] == "test-shout"
assert shout_data["published_at"] == 1234567890
if __name__ == "__main__":
pytest.main([__file__])