This commit is contained in:
@@ -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__])
|
||||
|
||||
Reference in New Issue
Block a user