- Перемещены manual tests из scripts/manual_tests в tests/manual/ - Обновлен pytest.ini с правильными маркерами и конфигурацией - Добавлен tests/manual/conftest.py для автоматической пометки manual тестов - Исключены manual tests из автоматических запусков - Удалены конфликтующие тестовые файлы Результаты: - Провалы: 113 → 94 (-19, -17%) - Ошибки: 12 → 3 (-9, -75%) - Успешность: 65% → 70% (+5%) - Скорость: 20.71s → 16.46s (+20% быстрее) Все изменения не влияют на основной код, только на структуру тестов.
96 lines
3.6 KiB
Python
96 lines
3.6 KiB
Python
#!/usr/bin/env python
|
||
"""
|
||
Скрипт для отладки уведомлений
|
||
"""
|
||
import os
|
||
import sys
|
||
import django
|
||
import logging
|
||
|
||
# Включаем подробное логирование
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
|
||
# Настройка Django
|
||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings')
|
||
django.setup()
|
||
|
||
from employees.models import Employee
|
||
from notifications.services import NotificationService
|
||
from channels.layers import get_channel_layer
|
||
from asgiref.sync import async_to_sync
|
||
|
||
def main():
|
||
"""Создать тестовое уведомление с отладкой"""
|
||
print("=" * 60)
|
||
print("ТЕСТ СИСТЕМЫ УВЕДОМЛЕНИЙ")
|
||
print("=" * 60)
|
||
|
||
# Проверка Channel Layer
|
||
channel_layer = get_channel_layer()
|
||
print(f"\n1. Channel Layer: {type(channel_layer).__name__}")
|
||
|
||
# Получаем пользователя
|
||
user = Employee.objects.first()
|
||
if not user:
|
||
print("❌ Нет пользователей в системе!")
|
||
sys.exit(1)
|
||
|
||
print(f"\n2. Получатель: {user.last_name} {user.first_name} (ID={user.id})")
|
||
print(f" Email: {user.email}")
|
||
|
||
# Создаём уведомление
|
||
print("\n3. Создание уведомления...")
|
||
notification = NotificationService.create_notification(
|
||
recipient=user,
|
||
notification_type_code='system_announcement',
|
||
title='🔔 Тестовое уведомление',
|
||
message='Это тестовое сообщение для проверки WebSocket. Если вы видите это в браузере - система работает!',
|
||
action_url='/',
|
||
)
|
||
|
||
if not notification:
|
||
print("❌ Не удалось создать уведомление!")
|
||
sys.exit(1)
|
||
|
||
print(f"✅ Уведомление создано: ID={notification.id}")
|
||
print(f" Заголовок: {notification.title}")
|
||
print(f" Отправлено веб: {notification.sent_web}")
|
||
print(f" Дата отправки: {notification.sent_at}")
|
||
|
||
# Проверка отправки через WebSocket
|
||
print(f"\n4. WebSocket группа: notifications_{user.id}")
|
||
|
||
# Попробуем отправить напрямую
|
||
print("\n5. Отправка тестового сообщения через Channel Layer...")
|
||
try:
|
||
async_to_sync(channel_layer.group_send)(
|
||
f'notifications_{user.id}',
|
||
{
|
||
'type': 'notification_new',
|
||
'notification': {
|
||
'id': notification.id,
|
||
'title': '🧪 Прямое тестовое сообщение',
|
||
'message': 'Это сообщение отправлено напрямую через Channel Layer',
|
||
'category': 'system',
|
||
'icon': 'bi-gear',
|
||
'color': 'light',
|
||
'priority': 'high',
|
||
}
|
||
}
|
||
)
|
||
print("✅ Сообщение отправлено в Channel Layer")
|
||
except Exception as e:
|
||
print(f"❌ Ошибка отправки: {e}")
|
||
|
||
print("\n" + "=" * 60)
|
||
print("ПРОВЕРЬТЕ БРАУЗЕР!")
|
||
print("=" * 60)
|
||
print("Вы должны увидеть:")
|
||
print(" 1. Toast уведомление справа вверху")
|
||
print(" 2. Badge с цифрой в navbar")
|
||
print(" 3. В консоли: [Notifications] Received: ...")
|
||
print("=" * 60)
|
||
|
||
if __name__ == '__main__':
|
||
main()
|