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

271 lines
11 KiB
Markdown
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.

# 🧪 Инструкция по тестированию системы уведомлений
**Дата:** 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 г.*