""" Тест для проверки исправления проблемы с полем 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] assert notification.kind == "invalid_action" # fallback 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__])