🔍 QA-панель

Панель тестировщика TherapyMentors

Полный набор тест-кейсов, чек-листов и инструкций для ручного тестирования платформы. Следуй чек-листу, отмечай пройденное, фиксируй баги.

📋 Инструкция для тестировщика

Три шага от подготовки до баг-репорта

1

Подготовка

  • Открой therapymentors.com
  • Подготовь DevTools (F12)
  • Вкладки: Console, Network, Application
  • Эмулятор мобильных (iPhone SE/Android)
  • Зарегистрируй 2-3 тестовых аккаунта разных ролей
2

Тестирование

  • Иди по чек-листу сверху вниз
  • Каждый тест-кейс — отдельно
  • Фиксируй скриншотами (Windows+Shift+S / Cmd+Shift+4)
  • Отмечай пройденные ✅ в чекбоксах
  • Проверяй вкладку Network на ошибки API
3

Баг-репорт

  • ID тест-кейса
  • Шаги воспроизведения
  • Expected vs Actual
  • Скриншот / видео
  • Severity: P0–P3
  • Google-таблица или Notion

🔗 Быстрые ссылки

Все страницы платформы для тестирования

✅ Быстрый чек-лист

Отмечай пройденные проверки — это твой прогресс

🔐 Аутентификация

  • Регистрация клиента — валидные данные
  • Регистрация терапевта — валидные данные
  • Регистрация — дубликат email (409)
  • Регистрация — пустые поля (400)
  • Регистрация — слабый пароль (400)
  • Вход — корректные данные
  • Вход — неверный пароль (400)
  • Вход — несуществующий email (400)
  • GET /api/auth/me — возвращает профиль
  • PATCH /api/auth/me — обновление профиля
  • Выход (очистка токена)
  • JWT expire — редирект на логин

👤 Клиенты (Client)

  • Дашборд клиента: график прогресса
  • Дашборд клиента: дневник (создать запись)
  • Дашборд клиента: история дневника
  • Дашборд клиента: история сессий
  • Дашборд клиента: сводка (summary)
  • Пустой дашборд (новый клиент без данных)
  • Доступ чужого клиента к чужому дневнику

🩺 Терапевт (Therapist)

  • Дашборд терапевта: список клиентов
  • Дашборд терапевта: добавить клиента
  • Дашборд терапевта: отправить приглашение
  • Приглашение: переход по ссылке invite?token=
  • Приглашение: использованный токен (уже used)
  • Создание сессии для клиента
  • Редактирование сессии
  • Просмотр прогресса клиента
  • Просмотр дневника клиента
  • Изменение статуса клиента
  • Аналитика терапевта (GET analytics)
  • Volume-метрики терапевта
  • Регистрация через invite-токен

⚙️ Админ (Admin)

  • GET /api/admin/stats — статистика
  • GET /api/admin/volume — метрики
  • GET /api/admin/therapists — список
  • PATCH /api/admin/therapists/:id — статус
  • GET /api/admin/tariffs — список тарифов
  • POST /api/admin/tariffs — создать тариф
  • PATCH /api/admin/tariffs/:id — изменить
  • Impersonation: зайти под пользователем
  • Stop impersonation: вернуться в админа
  • GET /api/admin/tickets — обращения
  • PATCH /api/admin/tickets/:id — статус
  • GET /api/waitlist — список ожидания

📱 UI/UX и Адаптивность

  • Мобильная версия (320-767px)
  • Планшет (768-1024px)
  • Десктоп (1025px+)
  • Состояния загрузки (спиннеры)
  • Ошибки сети (Offline в DevTools)
  • Кнопки не налезают друг на друга
  • Длинные имена/email (overflow)
  • Пустые состояния (no data)
  • Scroll на страницах с большими списками

🔒 Безопасность

  • Клиент → API терапевта (403)
  • Терапевт → API админа (403)
  • Без токена → любой защищённый роут (401)
  • Чужой clientId в URL (403/404)
  • XSS: скрипт в имени/дневнике
  • SQL-инъекция в query-параметрах
  • CORS-заголовки
  • Пароль не возвращается в API-ответах

🚀 Производительность

  • Время загрузки главной ≤ 3 сек
  • Время загрузки дашборда ≤ 2 сек
  • API-ответы ≤ 500 мс (среднее)
  • Lighthouse: Performance ≥ 70
  • Lighthouse: Accessibility ≥ 80
  • Lighthouse: Best Practices ≥ 85
  • Lighthouse: SEO ≥ 85
  • Service Worker (оффлайн-режим)

🌐 SEO и Мета

  • Open Graph meta-теги на главной
  • Twitter Card на главной
  • Канонический URL
  • Hreflang альтернативы (ru/en)
  • manifest.json
  • Favicon (32px и 16px)
  • Theme color meta
  • Страница 404

📝 Тест-кейсы

Детальные сценарии с шагами и ожидаемым результатом

ID Область Сценарий Шаги Ожидаемый результат Приоритет Статус
AUTH-01 Аутентификация Регистрация клиента
1. /login.html → «Зарегистрироваться» 2. Имя: Тестовый Клиент 3. Email: testclient@example.com 4. Пароль: test123456 5. Роль: Клиент → «Зарегистрироваться»
201 Created, JWT токен, редирект на дашборд клиента P0 ⬜ Не проверен
AUTH-02 Аутентификация Регистрация терапевта
1. /login.html → «Зарегистрироваться» 2. Имя: Доктор Тестов 3. Email: testtherapist@example.com 4. Пароль: test123456 5. Роль: Терапевт → «Зарегистрироваться»
201 Created, JWT токен, редирект на дашборд терапевта, роль therapist в БД P0 ⬜ Не проверен
AUTH-03 Аутентификация Дубликат email
1. Зарегистрировать test@dup.com 2. Повторно зарегистрировать test@dup.com
409 Conflict: «Этот email уже зарегистрирован» P1 ⬜ Не проверен
AUTH-04 Аутентификация Пустые поля при регистрации
1. /login.html → регистрация 2. Оставить все поля пустыми → отправить
400 Bad Request: «Email и пароль обязательны» P1 ⬜ Не проверен
AUTH-05 Аутентификация Слабый пароль (<6 символов)
1. Регистрация с паролем «123»
400: «Пароль должен быть не менее 6 символов» P2 ⬜ Не проверен
AUTH-06 Аутентификация Вход с корректными данными
1. /login.html 2. Email: зарегистрированного пользователя 3. Пароль: правильный → «Войти»
200 OK, JWT токен, редирект на дашборд роли P0 ⬜ Не проверен
AUTH-07 Аутентификация Неверный пароль
1. Вход: правильный email + неверный пароль
400: «Неверный email или пароль» P1 ⬜ Не проверен
AUTH-08 Аутентификация GET /api/auth/me с валидным токеном
1. Войти, получить токен 2. GET /api/auth/me (Bearer token)
200 OK: id, email, role, name, created_at P1 ⬜ Не проверен
AUTH-09 Аутентификация PATCH /api/auth/me — обновление профиля
1. Войти как терапевт 2. PATCH /api/auth/me { "name": "Новое Имя" }
200 OK, имя обновлено в БД P2 ⬜ Не проверен
AUTH-10 Аутентификация Доступ без токена
1. Очистить localStorage токен 2. GET /api/auth/me без Authorization
401 Unauthorized P0 ⬜ Не проверен
CLI-01 Клиенты Терапевт добавляет клиента вручную
1. Войти как терапевт 2. POST /api/clients { name, email } 3. Проверить список клиентов
201 Created, клиент появляется в GET /api/clients P0 ⬜ Не проверен
CLI-02 Клиенты Терапевт отправляет приглашение
1. POST /api/clients/invite { email } 2. Проверить email (или лог) на invite-токен
201 Created, invite-токен сгенерирован, запись в invites P0 ⬜ Не проверен
CLI-03 Клиенты Регистрация по invite-токену
1. Скопировать invite-токен из лога 2. /login.html?invite=TOKEN → регистрация клиента
Клиент создан и привязан к терапевту, приглашение помечено used P0 ⬜ Не проверен
CLI-04 Клиенты Повторное использование invite-токена
1. Использовать invite-токен 2. Повторно открыть /login.html?invite=SAME_TOKEN
Ошибка: токен уже использован P1 ⬜ Не проверен
CLI-05 Клиенты Чужой терапевт → чужой клиент
1. Терапевт A создал клиента X 2. Терапевт B: GET /api/clients/X_ID
403 Forbidden или 404 Not Found P0 ⬜ Не проверен
CLI-06 Клиенты Изменение статуса клиента
1. Терапевт: PATCH /api/clients/:id/status { status: "archived" }
200 OK, статус обновлён в БД P2 ⬜ Не проверен
SES-01 Сессии Создание сессии терапевтом
1. POST /api/sessions { client_id, date, duration, notes } 2. Проверить GET /api/sessions
201 Created, сессия отображается у клиента и терапевта P0 ⬜ Не проверен
SES-02 Сессии Редактирование сессии
1. PATCH /api/sessions/:id { notes: "обновлённые заметки" }
200 OK, заметки обновлены P1 ⬜ Не проверен
SES-03 Сессии Клиент видит только свои сессии
1. Клиент A: GET /api/sessions 2. Проверить, что видны только сессии клиента A
Только сессии текущего клиента в ответе P1 ⬜ Не проверен
PROG-01 Прогресс График прогресса клиента
1. Создать несколько сессий с разным mood 2. GET /api/clients/:id/progress
Массив точек с mood и датами, график отрисовывается P0 ⬜ Не проверен
PROG-02 Прогресс Сводка (summary) клиента
1. GET /api/clients/:id/summary
Данные: кол-во сессий, тренд mood, последняя активность P1 ⬜ Не проверен
JRN-01 Дневник Создание записи в дневнике
1. POST /api/clients/:id/journal { entry, mood } 2. GET /api/clients/:id/journal
201 Created, запись в истории дневника P0 ⬜ Не проверен
JRN-02 Дневник Пустая запись в дневнике
1. POST /api/clients/:id/journal { entry: "" }
400: валидационная ошибка P2 ⬜ Не проверен
ADM-01 Админ Статистика платформы
1. Войти как admin 2. GET /api/admin/stats
200 OK: users, clients, therapists, sessions, активность P1 ⬜ Не проверен
ADM-02 Админ Список терапевтов (админ)
1. GET /api/admin/therapists
200 OK: массив терапевтов с данными P1 ⬜ Не проверен
ADM-03 Админ Изменение статуса терапевта
1. PATCH /api/admin/therapists/:id { status: "suspended" }
200 OK, статус обновлён P1 ⬜ Не проверен
ADM-04 Админ Impersonation (зайти под пользователем)
1. POST /api/admin/impersonate/:userId 2. Проверить что сессия переключилась
200 OK, токен админа заменён на токен пользователя, можно остановить P0 ⬜ Не проверен
ADM-05 Админ Stop impersonation
1. После impersonation: POST /api/admin/stop-impersonation
200 OK, возврат к оригинальному admin-токену P1 ⬜ Не проверен
TAR-01 Тарифы Публичный список тарифов
1. GET /api/tariffs
200 OK: массив активных тарифов с ценами и лимитами P1 ⬜ Не проверен
TAR-02 Тарифы CRUD тарифов (админ)
1. POST /api/admin/tariffs { новый тариф } 2. PATCH /api/admin/tariffs/:id { изменения }
Создание и редактирование работают, отображаются в /api/tariffs P1 ⬜ Не проверен
WAIT-01 Waitlist Подписка на лист ожидания
1. POST /api/waitlist { email, name, role } 2. Проверить админский /api/waitlist
201 Created, запись в waitlist, админ видит P1 ⬜ Не проверен
WAIT-02 Waitlist Дубликат в waitlist
1. Дважды POST /api/waitlist с одним email
409 или обновление существующей записи P2 ⬜ Не проверен
TIC-01 Обращения Создание обращения
1. POST /api/tickets { subject, message } 2. GET /api/tickets (свои обращения)
201 Created, тикет виден пользователю и админу P2 ⬜ Не проверен
TIC-02 Обращения Админ меняет статус тикета
1. PATCH /api/admin/tickets/:id { status: "resolved" }
200 OK, статус обновлён P2 ⬜ Не проверен
SEC-01 Безопасность XSS в имени при регистрации
1. Регистрация: name = "<script>alert(1)</script>" 2. Проверить отображение имени в дашборде
Скрипт НЕ выполняется, имя экранировано P0 ⬜ Не проверен
SEC-02 Безопасность SQL-инъекция в параметрах
1. GET /api/clients?id=1' OR '1'='1
Запрос безопасно обработан (параметризованный), ошибки нет P0 ⬜ Не проверен
SEC-03 Безопасность Пароль в API-ответах
1. GET /api/auth/me 2. Проверить поля ответа
Поле password отсутствует в ответе P0 ⬜ Не проверен
SEC-04 Безопасность Клиент → админские ручки
1. Войти как client 2. GET /api/admin/stats
403 Forbidden «Недостаточно прав» P0 ⬜ Не проверен
UI-01 UI/UX Адаптивность: мобильные (320-767px)
1. DevTools → iPhone SE эмуляция 2. Пройти все страницы
Всё читаемо, ничего не вылезает, кнопки рабочие P1 ⬜ Не проверен
UI-02 UI/UX Состояния загрузки
1. Замедлить сеть в DevTools (Slow 3G) 2. Выполнить действия на всех дашбордах
Показаны индикаторы загрузки, нет «зависания» интерфейса P1 ⬜ Не проверен
UI-03 UI/UX Ошибка сети (Offline)
1. DevTools Network → Offline 2. Попытаться выполнить любое действие
Понятное сообщение об ошибке, кнопка «Повторить» P2 ⬜ Не проверен
UI-04 UI/UX Пустые состояния
1. Новый клиент → дашборд без сессий 2. Новый терапевт → дашборд без клиентов
Заглушки «У вас пока нет...» с подсказкой что делать P2 ⬜ Не проверен
PERF-01 Производительность Lighthouse: главная страница
1. Запустить Lighthouse (Desktop)
Performance ≥ 70, Accessibility ≥ 80, Best Practices ≥ 85, SEO ≥ 85 P1 ⬜ Не проверен
PERF-02 Производительность Lighthouse: дашборд клиента
1. Lighthouse на /dashboard/client.html
Performance ≥ 60, Accessibility ≥ 80 P2 ⬜ Не проверен
PERF-03 Производительность Время ответа API
1. DevTools Network → посмотреть Timing 2. Проверить /api/auth/me, /api/clients, /api/sessions
Среднее ≤ 500 мс, максимум ≤ 2 сек P1 ⬜ Не проверен

🐛 Шаблон баг-репорта

Скопируй этот шаблон для каждого найденного бага

## Баг-репорт [ID тест-кейса] | [Краткое описание]

**Severity:** P0 / P1 / P2 / P3
**Окружение:** Браузер / ОС / Устройство
**Дата:** [дата]

### Шаги воспроизведения
1. 
2. 
3. 

### Expected (Ожидаемое поведение)
[что должно было произойти]

### Actual (Фактическое поведение)
[что произошло на самом деле]

### Дополнительно
- Скриншот/видео: [ссылка]
- Консоль/ошибки: [логи]
- Network: [статус ответа API]

### Статус
⬜ Новый | ✅ Исправлен | 🔄 В работе | ❌ Отклонён