2025-08-23 10:56:26 +03:00
|
|
|
|
"""
|
|
|
|
|
|
Тест для проверки исправления проблемы с полем kind в уведомлениях.
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
|
|
from unittest.mock import patch, MagicMock
|
|
|
|
|
|
|
|
|
|
|
|
from services.notify import save_notification
|
|
|
|
|
|
from orm.notification import NotificationAction
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_save_notification_with_create_action():
|
|
|
|
|
|
"""Тест создания уведомления с действием create для shout"""
|
|
|
|
|
|
with patch('services.notify.local_session') as mock_session:
|
|
|
|
|
|
mock_session_instance = MagicMock()
|
|
|
|
|
|
mock_session.return_value.__enter__.return_value = mock_session_instance
|
|
|
|
|
|
|
|
|
|
|
|
# Тестируем с действием create для shout
|
|
|
|
|
|
save_notification("create", "shout", {"id": 1})
|
|
|
|
|
|
|
|
|
|
|
|
# Проверяем, что уведомление создано с правильным kind
|
|
|
|
|
|
mock_session_instance.add.assert_called_once()
|
|
|
|
|
|
notification = mock_session_instance.add.call_args[0][0]
|
|
|
|
|
|
assert notification.kind == NotificationAction.CREATE
|
|
|
|
|
|
assert notification.action == "create"
|
|
|
|
|
|
assert notification.entity == "shout"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_save_notification_with_update_action():
|
|
|
|
|
|
"""Тест создания уведомления с действием update"""
|
|
|
|
|
|
with patch('services.notify.local_session') as mock_session:
|
|
|
|
|
|
mock_session_instance = MagicMock()
|
|
|
|
|
|
mock_session.return_value.__enter__.return_value = mock_session_instance
|
|
|
|
|
|
|
|
|
|
|
|
# Тестируем с действием update
|
|
|
|
|
|
save_notification("update", "shout", {"id": 1})
|
|
|
|
|
|
|
|
|
|
|
|
# Проверяем, что уведомление создано с правильным kind
|
|
|
|
|
|
mock_session_instance.add.assert_called_once()
|
|
|
|
|
|
notification = mock_session_instance.add.call_args[0][0]
|
|
|
|
|
|
assert notification.kind == NotificationAction.UPDATE
|
|
|
|
|
|
assert notification.action == "update"
|
|
|
|
|
|
assert notification.entity == "shout"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_save_notification_with_invalid_action():
|
|
|
|
|
|
"""Тест создания уведомления с невалидным действием (fallback)"""
|
|
|
|
|
|
with patch('services.notify.local_session') as mock_session:
|
|
|
|
|
|
mock_session_instance = MagicMock()
|
|
|
|
|
|
mock_session.return_value.__enter__.return_value = mock_session_instance
|
|
|
|
|
|
|
|
|
|
|
|
# Тестируем с невалидным действием
|
|
|
|
|
|
save_notification("invalid_action", "shout", {"id": 1})
|
|
|
|
|
|
|
|
|
|
|
|
# Проверяем, что уведомление создано с fallback значением
|
|
|
|
|
|
mock_session_instance.add.assert_called_once()
|
|
|
|
|
|
notification = mock_session_instance.add.call_args[0][0]
|
2025-08-26 13:28:28 +03:00
|
|
|
|
assert notification.kind == NotificationAction.CREATE # fallback to CREATE
|
2025-08-23 10:56:26 +03:00
|
|
|
|
assert notification.action == "invalid_action"
|
|
|
|
|
|
assert notification.entity == "shout"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_save_notification_with_none_payload():
|
|
|
|
|
|
"""Тест создания уведомления с None payload (должно вернуться без создания)"""
|
|
|
|
|
|
with patch('services.notify.local_session') as mock_session:
|
|
|
|
|
|
mock_session_instance = MagicMock()
|
|
|
|
|
|
mock_session.return_value.__enter__.return_value = mock_session_instance
|
|
|
|
|
|
|
|
|
|
|
|
# Тестируем с None payload
|
|
|
|
|
|
save_notification("create", "shout", None)
|
|
|
|
|
|
|
|
|
|
|
|
# Проверяем, что уведомление не создавалось
|
|
|
|
|
|
mock_session_instance.add.assert_not_called()
|
|
|
|
|
|
mock_session_instance.commit.assert_not_called()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
pytest.main([__file__])
|