- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена - Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения - Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5) - Исправлена проблема с периодическими 403 ошибками после истечения access token
11 KiB
11 KiB
🧪 Инструкция по тестированию системы уведомлений
Дата: 20 ноября 2025 г.
🚀 Быстрый старт
1. Запустить сервер
cd backend
python manage.py runserver 9000
2. Открыть приложение
3. Войти в систему
Используйте существующего пользователя
✅ Что тестировать
ЭТАП 1-3: Автоматические уведомления (Signal Integration)
1. Чат - Communications 💬
- Отправьте сообщение в чат → получатель получит уведомление
- Упомяните @email в сообщении → уведомление об упоминании
- Ответьте на сообщение → автор получит уведомление
2. Заявки - Requests 📋
- Создайте заявку → руководители получат уведомление
- Добавьте комментарий → автор получит уведомление
- Одобрите/отклоните заявку → автор получит уведомление
3. Документы - Documents 📄
- Загрузите документ → получатели получат уведомление
- Ознакомьтесь с документом → автор получит уведомление (если все ознакомились)
4. Календарь - Calendar 📅
- Создайте событие → участники получат уведомление
- Измените событие → участники получат уведомление
- Удалите событие → участники получат уведомление об отмене
5. Лента - Feed 📰
- Создайте пост → пользователи получат уведомление (по типу)
- Комментируйте пост → автор получит уведомление
- Поставьте лайк → автор получит уведомление
ЭТАП 4: UI и UX
1. Колокольчик в Navbar 🔔
- Badge показывает количество непрочитанных
- Клик открывает dropdown с последними 5 уведомлениями
- Кнопка "Все" ведет на полный список
- Кнопка "Настройки" ведет на настройки
2. WebSocket Real-time ⚡
- Новое уведомление появляется мгновенно
- Badge обновляется без перезагрузки
- Список в dropdown обновляется
3. Браузерные уведомления 🖥️
- При первом посещении запрашивается разрешение
- Новые уведомления показываются в ОС
- Клик по уведомлению переходит на объект
- Уведомление отмечается прочитанным
4. Звуковые уведомления 🔊
- При новом уведомлении звучит короткий звук
- Переключатель в настройках: вкл/выкл
- Настройка сохраняется в браузере
5. Список уведомлений 📋
Откройте: /notifications/
- Фильтр по категории: выберите из 8 категорий
- Фильтр по статусу: все/прочитанные/непрочитанные
- Поиск: введите текст и нажмите "Найти"
- Пагинация: переключение между страницами
- Действия:
- "Посмотреть" → переход к объекту
- "Прочитано" → отметить прочитанным
- Корзина → удалить уведомление
- "Отметить все прочитанными" → массовое действие
6. Настройки ⚙️
Откройте: /notifications/settings/
- Звук: переключатель (глобально)
- По категориям: 8 карточек
- Главный переключатель (вкл/выкл категорию)
- Каналы: Веб (работает), Email/Telegram (скоро)
- Автосохранение: изменения сразу отправляются на сервер
- Toast: всплывает "Настройки сохранены"
🧪 Генератор тестовых уведомлений
Для быстрого тестирования используйте скрипт:
cd backend
python generate_notification.py
Меню:
- Новое сообщение в чате
- Новый документ
- Одобрена заявка
- Новое событие в календаре
- Новая публикация
- Системное уведомление
- Создать 5 разных уведомлений
После создания:
- Проверьте колокольчик (должен обновиться badge)
- Должно прийти браузерное уведомление
- Должен воспроизвестись звук
- Откройте список - уведомление должно быть там
🔍 Что проверять
Real-time (WebSocket)
- Badge обновляется мгновенно
- Список в dropdown обновляется
- При отключении badge становится красным
- При восстановлении badge возвращает цвет
Браузерные уведомления
- Запрос разрешения при первом визите
- Уведомления показываются в ОС
- Клик переходит на объект
- Клик отмечает прочитанным
- Автозакрытие через 10 сек (если не urgent)
Звук
- Воспроизводится при новом уведомлении
- Переключатель в настройках работает
- Настройка сохраняется в localStorage
- Не воспроизводится если выключен
Фильтрация
- Фильтр по категории работает
- Фильтр по статусу работает
- Поиск находит по заголовку
- Поиск находит по тексту
- Фильтры можно комбинировать
Пагинация
- Показывает правильное количество страниц
- Переход между страницами работает
- Текущая страница подсвечена
- Многоточие между далекими страницами
- Прокрутка наверх при смене страницы
Действия
- "Прочитано" убирает синюю полосу
- "Прочитано" уменьшает badge на 1
- "Удалить" удаляет карточку
- "Отметить все" обнуляет badge
- "Посмотреть" переходит на URL
Настройки
- Переключатель категории включает/выключает
- При выключении скрываются каналы
- Изменения сохраняются на сервер
- Toast показывает "Настройки сохранены"
- Звук переключается глобально
🐛 Известные ограничения
- Email/Telegram - пока не работают (Этап 2 отложен)
- Напоминания - пока не работают (нужен Celery)
- Группировка - не реализована
- Дайджесты - не реализованы
📊 Ожидаемые результаты
После создания уведомления:
- ✅ Badge показывает +1
- ✅ Dropdown обновляется (новое уведомление сверху)
- ✅ Браузерное уведомление всплывает
- ✅ Звук воспроизводится (если включен)
- ✅ Список обновляется (если открыт)
После "Прочитано":
- ✅ Badge показывает -1
- ✅ Карточка теряет синюю полосу
- ✅ Opacity становится 70%
- ✅ Кнопка "Прочитано" исчезает
После фильтрации:
- ✅ Показываются только подходящие уведомления
- ✅ Пагинация пересчитывается
- ✅ Счетчик total обновляется
После изменения настроек:
- ✅ Toast "Настройки сохранены"
- ✅ Изменения применяются сразу
- ✅ Новые уведомления учитывают настройки
🔧 Отладка
Консоль браузера
Откройте DevTools (F12) → Console
Смотрите логи:
[Notifications] WebSocket connected
[Notifications] Received: {type: 'new_notification', ...}
[Notifications] New notification: {...}
[Notifications] Browser notification shown
Django logs
Смотрите терминал где запущен runserver
WebSocket
Проверьте в DevTools → Network → WS:
- Соединение установлено
- Сообщения приходят
- Нет ошибок
API
Проверьте запросы в DevTools → Network → Fetch/XHR:
/api/notifications/- список/api/notifications/count/- счетчик/api/notifications/{id}/read/- прочитать/api/notifications/settings/- настройки
✅ Чеклист полного тестирования
- Создать уведомление через signal (отправить сообщение)
- Создать уведомление через генератор
- Проверить колокольчик обновился
- Проверить браузерное уведомление
- Проверить звук воспроизвелся
- Открыть список уведомлений
- Применить фильтр по категории
- Применить фильтр по статусу
- Выполнить поиск
- Перейти на 2-ю страницу (если есть)
- Отметить уведомление прочитанным
- Удалить уведомление
- Отметить все прочитанными
- Открыть настройки
- Выключить категорию
- Включить категорию
- Переключить звук
- Проверить автосохранение
Все работает? ПОЗДРАВЛЯЕМ! 🎉
Автор: GitHub Copilot + User Дата: 20 ноября 2025 г.