Law/context/13_role_flows_test_matrix.md
2026-02-26 18:55:02 +03:00

27 KiB
Raw Blame History

Матрица User Flow для Тестирования Платформы (CLIENT / LAWYER / ADMIN)

Назначение

Этот файл описывает полный набор пользовательских сценариев для тестирования платформы через веб-интерфейс. Используется как:

  1. чеклист ручной приемки,
  2. источник для e2e/интеграционных сценариев,
  3. карта corner cases по ролям.

Общие правила проверки

  1. Все ключевые сценарии проверять через UI (не только по API).
  2. Для каждого сценария проверять:
    • видимость данных по роли,
    • корректность уведомлений/непрочитанного,
    • записи в истории статусов/чата,
    • отсутствие утечки служебной/финансовой информации клиенту.
  3. Для статусов:
    • важная дата видна клиенту, юристу и администратору,
    • для юриста/администратора это дедлайн текущего статуса,
    • смена статуса логируется вместе с важной датой и комментарием.
  4. Для файлов:
    • проверять и успешный сценарий, и ошибки (размер, MIME, предпросмотр, поврежденный файл).

Тестовые роли и данные (рекомендуемые)

  1. ADMIN: admin@example.com / admin123
  2. LAWYER #1: основной юрист (назначенные заявки)
  3. LAWYER #2: другой юрист (для проверок запрета доступа к чужим данным)
  4. CLIENT #1: новый клиент (новый номер телефона)
  5. CLIENT #2: второй клиент (для проверки изоляции JWT/заявок)

CLIENT (Пользователь / Заказчик)

C01. Просмотр лендинга и создание заявки (happy path)

  1. Открыть лендинг.
  2. Открыть модальную форму создания заявки.
  3. Заполнить:
    • ФИО,
    • телефон,
    • тему,
    • описание.
  4. Пройти OTP-подтверждение телефона.
  5. Создать заявку.
  6. Проверить:
    • выдан уникальный номер заявки,
    • создается запись клиента (client) и связь с заявкой,
    • клиент не видит служебные поля (ставка, стоимость, внутренние ID, ответственные ID, финансовые поля).

C02. Повторный вход в клиентский контур по номеру/OTP

  1. На лендинге нажать кнопку перехода к работе с заявкой.
  2. Если нет JWT (новое устройство/браузер), пройти OTP.
  3. Открыть страницу работы с заявкой.
  4. Проверить:
    • доступ только к своим заявкам,
    • после авторизации создается 7-дневный JWT/сессия устройства,
    • повторный вход на том же устройстве не требует OTP до истечения срока.

C03. Переключение между заявками клиента

  1. Создать 2+ заявки на один телефон.
  2. Открыть клиентский кабинет.
  3. Переключаться между заявками в UI.
  4. Проверить:
    • отображаются только заявки этого клиента,
    • корректно обновляются статус, чат, файлы, важная дата, уведомления,
    • переход не ломает состояние JWT/авторизации.

C04. Просмотр карточки заявки (видимость данных)

  1. Открыть заявку в клиентском кабинете.
  2. Проверить, что видны:
    • номер заявки,
    • тема,
    • статус,
    • важная дата (дедлайн),
    • история/маршрут статусов,
    • чат,
    • файлы,
    • запросы дополнительных данных.
  3. Проверить, что НЕ видны:
    • ставка юриста,
    • внутренние финансовые поля,
    • служебные ID,
    • служебные комментарии/системная информация, не предназначенная клиенту.

C05. Чат клиент <-> юрист (happy path)

  1. Клиент отправляет сообщение юристу.
  2. Юрист отвечает.
  3. Клиент обновляет/переоткрывает заявку.
  4. Проверить:
    • сообщения отображаются в стиле чата,
    • метки времени/даты корректны,
    • непрочитанные индикаторы появляются и сбрасываются после открытия заявки,
    • история сообщений сохраняется.

C06. Загрузка файлов клиентом (happy path)

  1. В карточке заявки/чате прикрепить файл.
  2. Отправить сообщение с файлом.
  3. Проверить:
    • файл загружается,
    • появляется в чате и во вкладке файлов,
    • доступен предпросмотр/скачивание,
    • размер учитывается в лимитах заявки.

C07. Запрос дополнительных данных от юриста (частичное заполнение)

  1. Юрист создает Запрос с несколькими полями.
  2. Клиент открывает сообщение Запрос.
  3. Заполняет часть полей, сохраняет.
  4. Повторно открывает запрос и дозаполняет остальное.
  5. Проверить:
    • заполненные поля отмечаются и зачеркиваются в чате,
    • незаполненные остаются активными,
    • после полного заполнения запрос сворачивается и меняет цвет/состояние.

C08. file-поле в запросе дополнительных данных

  1. Юрист создает запрос с полем типа file.
  2. Клиент загружает файл в это поле.
  3. Проверить:
    • файл реально загружается как attachment,
    • поле считается заполненным,
    • файл доступен в файлах заявки и в контексте запроса,
    • юрист видит, что запрос выполнен.

C09. Оповещения клиента

  1. Юрист меняет статус.
  2. Юрист отправляет сообщение.
  3. Юрист загружает файл.
  4. Клиент открывает кабинет.
  5. Проверить:
    • есть визуальные индикаторы новых событий,
    • открытие заявки сбрасывает непрочитанное состояние,
    • важная дата обновляется при смене статуса.

C10. Терминальный статус (завершение заявки)

  1. Юрист/админ переводит заявку в терминальный статус.
  2. Клиент открывает заявку.
  3. Проверить:
    • терминальный статус отображается корректно,
    • маршрут/история статусов содержит финальную запись,
    • важная дата по финальному статусу отображается.

C11. Ошибка загрузки файла (корнер-кейсы)

Проверить UI-реакцию и корректный текст ошибки:

  1. Слишком большой файл (>25MB).
  2. Превышение суммарного лимита по заявке (>250MB).
  3. Обрыв сети/ошибка presigned upload.
  4. Неподдерживаемый или некорректный MIME.
  5. Проверить:
    • пользователь видит понятную ошибку,
    • UI не зависает,
    • частично неуспешная отправка не ломает чат,
    • дубликаты/битые attachments не создаются.

C12. Слишком длинное сообщение / некорректное сообщение

  1. Отправить очень длинный текст (выше backend-лимита, если установлен).
  2. Отправить пустое сообщение.
  3. Отправить сообщение из пробелов.
  4. Проверить:
    • понятная ошибка в UI,
    • ничего лишнего в чат не попадает,
    • состояние формы остается консистентным.

C13. Предпросмотр файлов (валидный / невалидный)

  1. Валидный pdf, jpg, mp4, txt.
  2. Невалидный PDF (файл с MIME application/pdf, но без %PDF-).
  3. .txt с кривым MIME (application/pdf).
  4. Проверить:
    • валидные файлы открываются,
    • невалидный PDF дает fallback (понятное сообщение / текстовый предпросмотр),
    • .txt открывается текстом даже при кривом MIME.

C14. Безопасность доступа клиента (изоляция)

  1. Открыть чужой номер заявки.
  2. Использовать JWT клиента #1 для заявки клиента #2.
  3. Попробовать открыть прямые URL файлов чужой заявки.
  4. Проверить:
    • доступ запрещен,
    • нет утечки метаданных.

LAWYER (Юрист)

L01. Вход и видимость заявок

  1. Войти как юрист.
  2. Открыть список заявок.
  3. Проверить видимость:
    • свои заявки,
    • неназначенные заявки,
    • отсутствие чужих назначенных заявок.

L02. Claim неназначенной заявки

  1. В списке или в канбане выбрать неназначенную заявку.
  2. Нажать Взять в работу.
  3. Проверить:
    • заявка назначается текущему юристу,
    • в канбане/таблице обновляется исполнитель,
    • claim логируется (audit),
    • другой юрист больше не может ее claim'ить.

L03. Канбан: просмотр и работа с карточками

  1. Открыть Канбан.
  2. Проверить:
    • группировка по группам статусов,
    • карточки содержат ключевые поля (номер, клиент, тема, дедлайн/важная дата, индикаторы новых сообщений/файлов),
    • горизонтальная прокрутка внутри блока, без растягивания страницы.

L04. Канбан: drag&drop смена статуса (однозначная группа)

  1. Перетащить карточку в колонку, где целевая группа сопоставляется с одним статусом.
  2. Проверить:
    • статус меняется,
    • важная дата проставляется по умолчанию (+3 дня), если не задана явно,
    • изменение отображается в карточке и в истории статусов.

L05. Канбан: drag&drop в группу с несколькими статусами

  1. Перетащить карточку в колонку, где в группе >1 статуса.
  2. Проверить:
    • открывается карточка заявки / модалка смены статуса,
    • доступны только статусы соответствующей группы,
    • можно выбрать конкретный статус и важную дату.

L06. Смена статуса из карточки заявки (happy path)

  1. Открыть карточку заявки.
  2. Нажать кнопку смены статуса.
  3. Выбрать новый статус, указать важную дату, добавить комментарий и файл.
  4. Отправить.
  5. Проверить:
    • статус заявки обновился,
    • важная дата изменилась,
    • запись появилась в истории статусов,
    • комментарий/файл попали в чат.

L07. Терминальный статус (закрытие заявки юристом)

  1. Юрист переводит заявку в терминальный статус.
  2. Проверить:
    • статус обновлен,
    • заявка считается завершенной в dashboard/метриках,
    • история статусов содержит терминальный этап.

L08. История статусов в модалке смены статуса

  1. Открыть модалку смены статуса для заявки с несколькими сменами статусов.
  2. Проверить:
    • список прокручивается внутри фиксированного блока,
    • новые записи сверху, старые снизу,
    • видны дата назначения, важная дата, длительность нахождения, комментарий (если есть).

L09. Важные даты (дедлайн) у юриста

  1. Сменить статус без указания даты.
  2. Проверить автоподстановку +3 дня.
  3. Сменить статус с ручной датой.
  4. Проверить:
    • дедлайн отображается в карточке заявки,
    • дедлайн отображается в канбане,
    • цвет дедлайна в канбане соответствует сроку.

L10. Чат и файлы юриста

  1. Отправка сообщений клиенту.
  2. Отправка файлов.
  3. Отправка файла+сообщения.
  4. Drag&drop файлов в чат.
  5. Проверить:
    • сообщения/файлы видит клиент,
    • непрочитанные индикаторы работают,
    • предпросмотр/скачивание работают.

L11. Запрос дополнительных данных (шаблоны)

  1. Открыть модалку Запросить.
  2. Выбрать существующий шаблон.
  3. Проверить автозагрузку полей шаблона в таблицу (без дубликатов).
  4. Добавить поле из справочника.
  5. Создать новое поле через тот же инпут.
  6. Сохранить шаблон:
    • новый,
    • перезапись своего.
  7. Проверить:
    • чужой шаблон нельзя перезаписать (UI + backend),
    • badge/tooltip соответствуют статусу шаблона.

L12. Ограничения редактирования заполненных клиентом доп.данных

  1. После заполнения клиентом открыть запрос в чате.
  2. Проверить, что юрист НЕ может:
    • менять название поля,
    • тип,
    • порядок,
    • удалять заполненное поле.
  3. Проверить backend-защиту (через UI негативный сценарий / при попытке сохранить).

L13. Ограничения по правам (чужая заявка)

  1. Попробовать открыть/изменить чужую назначенную заявку.
  2. Попробовать сменить статус чужой заявки.
  3. Попробовать загрузить файл/написать сообщение в чужую заявку.
  4. Ожидание: запрет доступа/операции.

L14. Финансовые ограничения

  1. Юрист не должен иметь возможность менять запрещенные финансовые поля через CRUD заявки.
  2. Юрист не может подтверждать оплату счета (PAID).
  3. Проверить UI/API сообщения об ошибке.

ADMIN (Администратор)

A01. Вход и доступ ко всем разделам

  1. Войти как администратор.
  2. Проверить доступ:
    • Обзор,
    • Канбан,
    • Заявки,
    • Счета,
    • Справочники,
    • availableTables по прямой ссылке.

A02. Справочник пользователей (CRUD)

  1. Создать юриста:
    • имя, email, пароль,
    • роль,
    • основная тема,
    • дополнительные темы,
    • ставка по умолчанию,
    • процент,
    • телефон,
    • аватар.
  2. Отредактировать пользователя.
  3. Деактивировать/активировать.
  4. Проверить:
    • данные сохраняются,
    • аватар/инициалы отображаются корректно,
    • роль и RBAC применяются.

A03. Справочники статусов и групп статусов

  1. Создать/редактировать группы статусов.
  2. Создать/редактировать статусы:
    • группа,
    • терминальность,
    • kind (обычный / счет / оплачено).
  3. Проверить:
    • канбан строится по группам,
    • статусы появляются в свободном выборе смены статуса.

A04. Таблицы в справочниках и availableTables

  1. Открыть /admin.html?section=availableTables.
  2. Включать/выключать таблицы.
  3. Проверить:
    • неактивные таблицы исчезают из списка справочников,
    • активные появляются без фронтовой доработки (универсальное отображение),
    • clients видны в справочниках, если таблица активна.

A05. Заявки: полный CRUD и ручное управление

  1. Создать заявку вручную.
  2. Привязать существующего клиента.
  3. Создать нового клиента через форму заявки (если нет в списке).
  4. Изменить тему/описание/исполнителя/стоимость.
  5. Проверить:
    • client_id корректно проставляется,
    • стоимость заявки видна админу/юристу, скрыта клиенту.

A06. Смена статуса заявки (с важной датой)

  1. Открыть карточку заявки.
  2. Через модалку смены статуса:
    • выбрать любой статус,
    • указать важную дату,
    • добавить комментарий/файл.
  3. Проверить:
    • изменения видны клиенту/юристу/админу,
    • история статусов содержит важную дату и комментарий.

A07. Администратор может корректировать заполненные доп.данные

  1. После заполнения клиентом доп.данных открыть запрос.
  2. Удалить/изменить заполненную строку (если требуется).
  3. Проверить:
    • операция разрешена админу,
    • изменения консистентны.

A08. Счета и оплаты (happy path)

  1. Создать счет вручную.
  2. Проверить формирование PDF.
  3. Перевести в Оплачен.
  4. Проверить:
    • дата оплаты проставляется,
    • данные видны в списке счетов,
    • юрист видит свои счета, админ — все.

A09. Billing через статусы

  1. Перевести заявку в billing-статус (если используется INVOICE / PAID).
  2. Проверить:
    • срабатывает логика счетов/оплаты,
    • сумма/зарплата отражается в дашборде.

A10. Dashboard администратора

Проверить плитки и метрики:

  1. Новые / в работе / и др. статусы.
  2. Выручка за месяц.
  3. Расходы (зарплата юристов) за месяц.
  4. Карточки загрузки юристов:
    • активные,
    • новые,
    • закрыто,
    • сумма,
    • зарплата.
  5. Модалка статистики юриста:
    • фиксированные хедеры,
    • таблица активных заявок,
    • сумматоры внизу,
    • корректные переходы в карточки заявок.

A11. Безопасность / аудит / доступы

  1. Проверка доступа к файлам S3 по ролям.
  2. Предпросмотр PDF/файлов через iframe/same-origin.
  3. Проверка аудита действий (security audit / audit log).
  4. Проверка, что ПДн и финансовые данные не уходят в публичный контур.

A12. Corner cases администратора

  1. Ошибки сохранения (невалидные поля, несуществующие ссылки).
  2. Одновременное редактирование (refresh после сохранения).
  3. Попытка удалить сущность, на которую есть ссылки.
  4. Некорректные даты/числа в универсальных формах.
  5. Проверить понятные ошибки и отсутствие “битого” состояния UI.

Межролевые интеграционные сценарии (сквозные)

X01. Полный цикл заявки (client -> lawyer -> terminal)

  1. Клиент создает заявку.
  2. Юрист берет в работу.
  3. Юрист ведет чат, запрашивает данные/файлы.
  4. Клиент заполняет запрос.
  5. Юрист меняет статусы, выставляет важные даты.
  6. Юрист завершает заявку терминальным статусом.
  7. Проверить весь таймлайн и видимость по ролям.

X02. Цикл со счетом и оплатой

  1. Клиент создает заявку.
  2. Юрист/админ переводит в статус выставления счета.
  3. Админ формирует/подтверждает оплату счета.
  4. Проверить:
    • счет виден в заявке и в списке счетов,
    • статус оплаты влияет на финансовые метрики,
    • зарплата юриста считается после Оплачено.

X03. Непрочитанные события и уведомления

  1. Создать набор событий: статус, сообщение, файл.
  2. Проверить отображение индикаторов:
    • в списках,
    • в канбане,
    • в карточке заявки.
  3. Проверить сброс после открытия заявки соответствующей ролью.

X04. Ограничения прав и изоляция

  1. CLIENT не видит служебные/финансовые поля.
  2. LAWYER не видит/не меняет чужие заявки.
  3. LAWYER не подтверждает оплату.
  4. LAWYER не редактирует заполненные клиентом доп.данные.
  5. ADMIN имеет доступ ко всем данным и операциям.

Corner Cases (общий список для обязательного покрытия)

  1. Пустые поля / пробельные значения.
  2. Слишком длинные тексты сообщений / комментариев.
  3. Файлы:
    • 25MB,

    • превышение 250MB на заявку,
    • невалидный PDF,
    • .txt с кривым MIME.
  4. Повторные клики / double-submit.
  5. Потеря сети во время upload/send/status-change.
  6. Истекший JWT / отсутствие OTP.
  7. Конфликт назначения заявки (claim race).
  8. Удаление/изменение связанной сущности (клиент/статус/пользователь).
  9. Переключение между заявками/разделами при открытых модалках.

Рекомендация по автоматизации (e2e backlog)

Приоритетно выделить в отдельные Playwright-сценарии:

  1. public_client_notifications_flow
  2. lawyer_status_change_modal_flow (важная дата + комментарий + файл)
  3. kanban_multi_status_group_flow (drag&drop -> выбор статуса)
  4. admin_finance_billing_dashboard_flow
  5. client_file_upload_errors_flow
  6. rbac_negative_flows (client/lawyer/admin)