- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена - Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения - Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5) - Исправлена проблема с периодическими 403 ошибками после истечения access token
271 lines
11 KiB
Markdown
271 lines
11 KiB
Markdown
# 🧪 Инструкция по тестированию системы уведомлений
|
||
|
||
**Дата:** 20 ноября 2025 г.
|
||
|
||
---
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### 1. Запустить сервер
|
||
```bash
|
||
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:** всплывает "Настройки сохранены"
|
||
|
||
---
|
||
|
||
## 🧪 Генератор тестовых уведомлений
|
||
|
||
Для быстрого тестирования используйте скрипт:
|
||
|
||
```bash
|
||
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 г.*
|