Corp/backend/TESTING_GUIDE.md
Игорь Надеин b38d2bc44b fix: автоматическое обновление JWT токенов
- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена
- Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения
- Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5)
- Исправлена проблема с периодическими 403 ошибками после истечения access token
2025-11-20 18:52:29 +03:00

11 KiB
Raw Blame History

🧪 Инструкция по тестированию системы уведомлений

Дата: 20 ноября 2025 г.


🚀 Быстрый старт

1. Запустить сервер

cd backend
python manage.py runserver 9000

2. Открыть приложение

http://localhost:9000/

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

Меню:

  1. Новое сообщение в чате
  2. Новый документ
  3. Одобрена заявка
  4. Новое событие в календаре
  5. Новая публикация
  6. Системное уведомление
  7. Создать 5 разных уведомлений

После создания:

  • Проверьте колокольчик (должен обновиться badge)
  • Должно прийти браузерное уведомление
  • Должен воспроизвестись звук
  • Откройте список - уведомление должно быть там

🔍 Что проверять

Real-time (WebSocket)

  • Badge обновляется мгновенно
  • Список в dropdown обновляется
  • При отключении badge становится красным
  • При восстановлении badge возвращает цвет

Браузерные уведомления

  • Запрос разрешения при первом визите
  • Уведомления показываются в ОС
  • Клик переходит на объект
  • Клик отмечает прочитанным
  • Автозакрытие через 10 сек (если не urgent)

Звук

  • Воспроизводится при новом уведомлении
  • Переключатель в настройках работает
  • Настройка сохраняется в localStorage
  • Не воспроизводится если выключен

Фильтрация

  • Фильтр по категории работает
  • Фильтр по статусу работает
  • Поиск находит по заголовку
  • Поиск находит по тексту
  • Фильтры можно комбинировать

Пагинация

  • Показывает правильное количество страниц
  • Переход между страницами работает
  • Текущая страница подсвечена
  • Многоточие между далекими страницами
  • Прокрутка наверх при смене страницы

Действия

  • "Прочитано" убирает синюю полосу
  • "Прочитано" уменьшает badge на 1
  • "Удалить" удаляет карточку
  • "Отметить все" обнуляет badge
  • "Посмотреть" переходит на URL

Настройки

  • Переключатель категории включает/выключает
  • При выключении скрываются каналы
  • Изменения сохраняются на сервер
  • Toast показывает "Настройки сохранены"
  • Звук переключается глобально

🐛 Известные ограничения

  1. Email/Telegram - пока не работают (Этап 2 отложен)
  2. Напоминания - пока не работают (нужен Celery)
  3. Группировка - не реализована
  4. Дайджесты - не реализованы

📊 Ожидаемые результаты

После создания уведомления:

  1. ✅ Badge показывает +1
  2. ✅ Dropdown обновляется (новое уведомление сверху)
  3. ✅ Браузерное уведомление всплывает
  4. ✅ Звук воспроизводится (если включен)
  5. ✅ Список обновляется (если открыт)

После "Прочитано":

  1. ✅ Badge показывает -1
  2. ✅ Карточка теряет синюю полосу
  3. ✅ Opacity становится 70%
  4. ✅ Кнопка "Прочитано" исчезает

После фильтрации:

  1. ✅ Показываются только подходящие уведомления
  2. ✅ Пагинация пересчитывается
  3. ✅ Счетчик total обновляется

После изменения настроек:

  1. ✅ Toast "Настройки сохранены"
  2. ✅ Изменения применяются сразу
  3. ✅ Новые уведомления учитывают настройки

🔧 Отладка

Консоль браузера

Откройте 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 г.