Files
core/tests/test_notification_fix.py
Untone 2a6fcc3f45
Some checks failed
Deploy on push / deploy (push) Failing after 2m54s
[0.9.12] - 2025-08-26
### 🚨 Исправлено
- **Лимит топиков API**: Убрано жесткое ограничение в 100 топиков, теперь поддерживается до 1000 топиков
  - Обновлен лимит функции `get_topics_with_stats` с 100 до 1000
  - Обновлен лимит по умолчанию резолвера `get_topics_by_community` с 100 до 1000
  - Это решает проблему, когда API искусственно ограничивал получение топиков

### 🧪 Исправлено
- **Тест-сьют**: Исправлены все падающие тесты для достижения 100% прохождения
  - Исправлено утверждение теста уведомлений для невалидных действий (fallback к CREATE)
  - Исправлены тесты публикации черновиков путем добавления обязательных топиков
  - Исправлен контекст авторизации в тестах черновиков (добавлены роли и токен)
  - Установлены браузеры Playwright для решения проблем с браузерными тестами
  - Все тесты теперь проходят: 361 пройден, 31 пропущен, 0 провален

### 🔧 Техническое
- Улучшены тестовые фикстуры с правильным созданием топиков для черновиков
- Улучшено тестовое мокирование для GraphQL контекста с требуемыми данными авторизации
- Добавлена правильная обработка ошибок для требований публикации черновиков
2025-08-26 13:28:28 +03:00

79 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Тест для проверки исправления проблемы с полем 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 == NotificationAction.CREATE # fallback to CREATE
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__])