Files
stroy-bot-monorepo/docs/TEST-PLAN.md
T
Тимур Городецкий 650bce809a docs: align hub status scenarios with real SharePoint choices
Status choices in the Проекты list are Текущий / Архивный, so the legacy
archive rule matches real data; the projects portal writes its own
status to the API catalogue, which StroyBot does not read.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-16 11:45:04 +05:00

195 lines
22 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.
# План ручной проверки StroyBot
Пошаговая проверка нового приложения перед выкаткой. Дополняет `MIGRATION-CHECKLIST.md` (там — список функций, здесь — что нажать и что должно получиться).
**Правила**
- Всё, что **записывает** данные (создать / изменить / удалить / импорт / утвердить), — **только на проекте «ТЕСТ StroyBot»**. Такие сценарии помечены ✍️.
- Всё, что только **читает**, проверяем на настоящих проектах — **сравнением со старой страницей** (см. «Главный приём»).
- Нашёл расхождение — не исправляй ничего сам, запиши по шаблону «Как сообщить о баге» и иди дальше.
- **Оформление — в стиле ui-kit** (решение 2026-10-16). Отличия во внешнем виде от старых страниц (раскладка, цвета, регистр подписей) **багом не считаются**. Сравниваем функции, тексты, данные, права. Баг по виду — только если что-то не видно, обрезано, наезжает или не нажимается.
- Отметки: `[x]` — совпало, `[!]` — баг (номер бага рядом), `[-]` — не применимо.
---
## 0. Подготовка (один раз)
### 0.1 Тестовые данные в SharePoint (`/sites/stroy`)
- [ ] В списке **«Проекты»** создать проект **«ТЕСТ StroyBot»**, статус **текущий**. Записать его `Id` (видно в адресе элемента): `Id = ____`.
- [ ] В списке **«Доступы»** создать строку: проект = «ТЕСТ StroyBot», пользователь = **ты**, `read` = да, `edit0` = да, `aproove` = нет.
- Это **разные поля в разных старых web parts** (lookup `project`/`user` и поля `projectId`/`userId`). Если при создании строки видно оба набора — заполни оба. Запиши, какие поля реально есть в списке: `________________`.
- [ ] В списке **«Объекты»** — пока ничего, объекты создадим в приложении (T-OBJ).
- [ ] Убедись, что в **«Смены»**, **«Компании»**, **«Профессии»**, **«Техника»**, **«Единицы измерения»** есть хотя бы по 2 элемента.
### 0.2 Переключение ролей одним аккаунтом
Роли меняются правкой **твоей строки «Доступы»** у «ТЕСТ StroyBot», статус проекта — полем **Status** в «Проекты». После правки — **F5** в приложении.
| Роль | read | edit0 | aproove |
|---|---|---|---|
| **Р** — только чтение | да | нет | нет |
| **Е** — редактор | да | да | нет |
| **У** — утверждающий | да | нет | да |
| **Н** — нет доступа | нет | нет | нет |
Начальная роль — **Е**.
### 0.3 Запуск workbench
1. В терминале VS Code (`` Ctrl+` ``) в папке `stroy-bot-monorepo`: `npx heft start`. Дождаться `Starting server`.
2. Открыть `https://tnsukz.sharepoint.com/sites/stroy/_layouts/workbench.aspx` (именно на сайте **stroy**, не корневом).
3. Разрешить загрузку отладочных скриптов, если браузер спросит.
4. **+** → web part **StroyBot**.
5. Держать открытыми **F12 → Console** и **F12 → Network** (фильтр `Fetch/XHR`) — туда смотрим при любой ошибке.
> Workbench не умеет одобрять API-разрешения. Если Dataverse или выгрузки упадут с ошибкой доступа/токена — это ожидаемо до выкатки пакета; помечай `[!]` с текстом ошибки, разберёмся.
---
## Главный приём — сравнение со старой страницей
Для любого раздела, который **показывает** данные:
1. Открыть **старую** страницу раздела (из старого stroy-bot-main) для проекта X.
2. Открыть **новый** раздел в workbench для того же проекта X.
3. Сравнить: количество строк, названия, числа, даты, порядок, бейджи, какие кнопки видны.
Проекты для сравнения — 2 настоящих: один **большой** (много объектов и отчётов), один **маленький**. Запиши:
- Большой: `________________` (Id `__`)
- Маленький: `________________` (Id `__`)
---
## 1. Оболочка — `T-APP`
- [ ] **T-APP-01** Открыть web part. Слева меню с одним пунктом «Проект», справа главная. Ошибок в Console нет.
- [ ] **T-APP-02** Выбрать проект → в меню появились разделы. Нажать «Объекты» → адрес стал `…?page=objects&projectId=…`.
- [ ] **T-APP-03** Нажать «назад» в браузере → вернулись на главную. «Вперёд» → снова объекты.
- [ ] **T-APP-04** Скопировать адрес раздела, открыть в новой вкладке → открылся тот же раздел того же проекта.
- [ ] **T-APP-05** F5 на любом разделе → остались в нём.
- [ ] **T-APP-06** В **той же вкладке** удалить из адреса `&page=…&projectId=…`, Enter, заново добавить web part → на главной уже выбран прежний проект, меню — со всеми разделами. (Выбор хранится в `sessionStorage` — он живёт только в пределах вкладки; после закрытия вкладки не сохраняется — так было и в старом main.)
- [ ] **T-APP-07** Шрифты подгрузились: заголовки разделов — с засечками (Lora), остальной текст — Inter.
- [ ] **T-APP-08** Узкое окно (< 768px) → меню прячется, появляется кнопка-бургер, меню открывается поверх.
## 2. Главная — `T-HUB` (сравнение со старым stroy-bot-main)
- [ ] **T-HUB-01** Клик в поле «Проект» → список; набор совпадает со старым main; сверху до 7 недавно активных.
- [ ] **T-HUB-02** Ввести часть названия (разный регистр) → фильтруется, не больше 7 строк; несуществующее → «Проекты не найдены».
- [ ] **T-HUB-03** Esc и клик мимо → список закрылся, в поле — выбранный проект.
- [ ] **T-HUB-04** Бейджи статусов совпадают по цвету: текущий — зелёный, завершён — серый, архивный — золотой, пусто — «Без статуса».
- [ ] **T-HUB-05** Без выбранного проекта все карточки неактивны, видна подсказка.
- [ ] **T-HUB-06** «ТЕСТ StroyBot», роль Е, статус **текущий** → все 6 карточек активны; меню — все разделы.
- [ ] **T-HUB-07** Роль **Р** → неактивна только «Отправить отчёт»; в меню нет «Отправить отчёт» и «Привязка к справочнику».
- [-] **T-HUB-08** Статус «завершен» — **не применимо**: в SharePoint у поля «Статус» только «Текущий» и «Архивный» (проверено 2026-10-16). Правило в коде остаётся на случай, если вариант появится.
- [ ] **T-HUB-09** Статус **«Архивный»** (менять в SharePoint, список «Проекты») → бейдж золотой, активен только «Архив», выгрузка неактивна, в меню только «Проект». Вернуть **«Текущий»**.
- ⚠️ Статус меняем **в списке SharePoint**, а не на портале проектов: портал пишет статус («Текущий» / «Архив») в справочник API, StroyBot его не читает.
- [ ] **T-HUB-10** «Архив проекта» → в новой вкладке папка `Документы/Архив/{проект}` (та же, что открывает старый main).
- [ ] **T-HUB-11** Ctrl+клик по карточке «Объекты» → раздел открылся в новой вкладке.
- [ ] **T-HUB-12** Выгрузка: «?» показывает 3 строки и закрывается кликом мимо. Даты 13.10–19.10 → «Отчёт за период»; 12.10–18.10 (Пн–Вс) → «Еженедельный»; один день → «Ежедневный»; начало позже конца → ошибка, кнопка неактивна.
- [ ] **T-HUB-13** «Выгрузить» на большом проекте за неделю → скачался `weekly_…xlsx`. **Сравнить** с файлом из старого main за тот же период — содержимое одинаковое.
## 3. Ресурсы проекта — `T-RES`
- [ ] **T-RES-01** Большой проект: вкладки «Профессии (N)», «Компании (N)» — числа и списки совпадают со старой страницей.
- [ ] **T-RES-02** Поиск слева, «✕» очищает; «уже добавлено» у привязанных.
- [ ] ✍️ **T-RES-03** «ТЕСТ StroyBot»: «+» у профессии → сразу справа; F5 → осталась. Проверить строку в «Профессии по проекту».
- [ ] ✍️ **T-RES-04** «−» → исчезла; F5 → не вернулась; строка удалена из списка.
- [ ] ✍️ **T-RES-05** То же для компании.
- [ ] **T-RES-06** Узкое окно → колонки друг под другом.
## 4. Привязка к справочнику — `T-BND`
- [ ] **T-BND-01** Большой проект: карточка проекта (описание, адрес, статус, даты, координаты) совпадает со старой страницей; бейдж «Привязан/Не привязан» тот же.
- [ ] **T-BND-02** Поиск по справочнику: результаты, «←/→», «стр / всего» — как в старой.
- [ ] ✍️ **T-BND-03** «ТЕСТ StroyBot»: выбрать проект справочника → «Связать» → сообщение успеха, бейдж «Привязан». В «Проекты» заполнились `UniqueId0`, `UniqueName`.
- [ ] ✍️ **T-BND-04** «Отвязать» → «Привязка удалена», поля очищены. **Снова привязать** (нужно для T-IMP).
## 5. Объекты — `T-OBJ`
- [ ] **T-OBJ-01** Большой проект: число объектов в тулбаре и дерево (названия, вложенность, счётчики детей) совпадают со старой страницей.
- [ ] **T-OBJ-02** «Развернуть» / «Свернуть», клик по строке раскрывает.
- [ ] **T-OBJ-03** Роль **Р** → нет «Добавить объект», нет меню ⋮, нет перетаскивания.
- [ ] ✍️ **T-OBJ-04** «ТЕСТ StroyBot», роль Е: пустое дерево → «Объекты не найдены» + кнопка. Добавить объект-пятно «Корпус 1».
- [ ] ✍️ **T-OBJ-05** Меню ⋮ у «Корпус 1» → «Добавить объект» → «Раздел» «Фундамент». У «Фундамент» → «Вид работ» «Бетонирование». У вида работ нет пункта «Добавить объект».
- [ ] ✍️ **T-OBJ-06** Пустое название → сообщение «Поле обязательно…»; Enter сохраняет.
- [ ] ✍️ **T-OBJ-07** Редактировать «Фундамент» → сменить родителя (нужен второй объект-пятно «Корпус 2»).
- [ ] ✍️ **T-OBJ-08** Перетащить объект на другой → родитель сменился; на своего потомка — запрещено.
- [ ] ✍️ **T-OBJ-09** Удалить объект с детьми → подтверждение с числом детей; дети остаются (🐞 так было).
- [ ] **T-OBJ-10** «Экспорт» → скачался `objects-{id}.xlsx`, содержимое как у старой страницы.
- [ ] **T-OBJ-11** Меню ⋮ → «Работы» → открылся раздел «Работы» этого объекта.
## 6. Работы — `T-WRK`
- [ ] **T-WRK-01** Объект большого проекта: список работ, единицы, объёмы (3 знака), даты, вложенность — как в старой странице.
- [ ] **T-WRK-02** Родители свёрнуты; нумерация считает только видимые строки.
- [ ] ✍️ **T-WRK-03** «ТЕСТ StroyBot», «Бетонирование»: «Добавить работу» «Бетон В25», м3, 12.5, даты.
- [ ] ✍️ **T-WRK-04** «Сохранить и добавить еще» → окно не закрылось, поля пустые, родитель тот же.
- [ ] ✍️ **T-WRK-05** ⋮ → «Добавить дочернюю» → родитель предвыбран.
- [ ] ✍️ **T-WRK-06** «Редактировать» дочернюю → убрать родителя → сохранить → стала корневой.
- [ ] ✍️ **T-WRK-07** В списке «Родительская работа» при правке нет самой работы и её потомков.
- [ ] ✍️ **T-WRK-08** Удалить → «Подтвердите удаление» → исчезла.
- [ ] **T-WRK-09** Роль **Р** → нет кнопок добавления и меню ⋮.
## 7. Импорт работ — `T-IMP`
- [ ] **T-IMP-01** Проект без привязки к справочнику → «Проект не привязан к справочнику…».
- [ ] **T-IMP-02** Большой привязанный проект: «Загрузка работ… X из Y», затем число работ совпадает со старой страницей.
- [ ] **T-IMP-03** Поиск (код СНБ, объём, название), страницы по 100.
- [ ] ✍️ **T-IMP-04** «ТЕСТ StroyBot» (привязан в T-BND-04): выбрать объект → отметить 2 работы → «Импортировать» → тост «✓ Успешно импортировано: 2»; строки стали «✓ импортировано» и неактивны.
- [ ] ✍️ **T-IMP-05** Работы появились в разделе «Работы» этого объекта.
- [ ] ✍️ **T-IMP-06** «Импорт с созданием объекта» → в «Объекты» созданы объект и раздел из сметы, работы — под ними.
- [ ] **T-IMP-07** «Импортировать» без объекта → тост «Выберите объект…».
## 8. Отчёты по проекту — `T-RPL`
- [ ] **T-RPL-01** Большой проект, текущая неделя: число карточек, номера, даты, авторы, компании, объекты — как в старой странице.
- [ ] **T-RPL-02** Сменить период → «Применить» → совпадает со старой за тот же период.
- [ ] **T-RPL-03** Поиск по автору, компании, объекту, комментарию.
- [ ] **T-RPL-04** Роль **Н** → «Нет доступа».
- [ ] **T-RPL-05** Роль **Р** → нет «Отправить отчёт», копирования и удаления.
- [ ] **T-RPL-06** Клик по карточке → форма отчёта в **новой вкладке** с `reportId`.
## 9. Форма отчёта — `T-REP` (самое важное)
Роль **Е**, «ТЕСТ StroyBot», объекты и работы из T-OBJ / T-WRK.
- [ ] ✍️ **T-REP-01** «Отправить отчёт» → «Новый отчет», дата — сегодня, смена — первая.
- [ ] ✍️ **T-REP-02** «Сохранить» пустым → все 5 ошибок валидации, тексты как в старой форме.
- [ ] ✍️ **T-REP-03** Выбрать объект, компанию; «+ Выбрать работу» → работы объекта; drill-down по родителям; «Выбрать «X»».
- [ ] ✍️ **T-REP-04** У работы: значение 3.5, комментарий; «Персонал на работе» + профессия (2 чел., 8 ч); «Техника на работе» + техника.
- [ ] ✍️ **T-REP-05** Общий персонал с типом «Часы простоя» без комментария → ошибка валидации; с комментарием — ок.
- [ ] ✍️ **T-REP-06** Общая техника «Часы ремонта» + комментарий.
- [ ] ✍️ **T-REP-07** Добавить 2 фото → превью; удалить одно.
- [ ] ✍️ **T-REP-08** «Сохранить отчет» → «Отчет успешно сохранен!», кнопка стала «← Вернуться назад». Записать номер отчёта: `№ ____`.
- [ ] ✍️ **T-REP-09** Проверить в данных: отчёт в Dataverse; строки — работа, её персонал и техника **с родителем = строка работы**, общий персонал и техника **без родителя**; фото в `DocLib/{projectId}_{номер}`.
- [ ] ✍️ **T-REP-10** Открыть отчёт из «Отчёты по проекту» → режим правки, всё заполнено как сохраняли (включая персонал внутри работы).
- [ ] ✍️ **T-REP-11** Изменить значение работы, удалить общую технику → сохранить → открыть заново → изменения на месте, **лишних и задвоенных строк нет**.
- [ ] ✍️ **T-REP-12** Сменить объект в форме → работы очистились.
- [ ] ✍️ **T-REP-13** «Создать на основе» (копирование) → новая форма, всё скопировано, дата — сегодня, фото — пусто; сохранить → новый номер.
- [ ] ✍️ **T-REP-14** Пикер техники: группы, фильтр, «Все». Создать новую технику из пикера → появилась в списке «Техника».
- [ ] ✍️ **T-REP-15** Пикер работ: создать новую работу (ед., план, родитель) → появилась в «Работах» объекта.
- [ ] ✍️ **T-REP-16** Роль **У** → открыть неутверждённый отчёт → «На утверждении», поля только для чтения, «Утвердить отчет» → подтверждение → «Отчет утвержден!», бейдж «Утверждён».
- [ ] ✍️ **T-REP-17** Роль **Е** → утверждённый отчёт открывается только для чтения.
- [ ] **T-REP-18** Роль **Р** → отчёт только для чтения, кнопок нет.
- [ ] **T-REP-19** Роль **Н** → «Нет доступа» при открытии существующего отчёта.
- [ ] **T-REP-20** Большой проект: открыть 3 разных старых отчёта → всё совпадает со старой формой (план-факт, персонал, техника, фото-папка).
- [ ] **T-REP-21** «← Вернуться назад» → вернулись туда, откуда пришли.
- [ ] **T-REP-22** Enter в любом поле не перезагружает страницу.
- [ ] ✍️ **T-REP-23** Удалить тестовый отчёт из «Отчёты по проекту» → «Удалить отчёт?» → пропал из списка (мягкое удаление).
---
## Как сообщить о баге
Скопируй и заполни:
```
Баг: T-XXX-NN
Роль / проект: Е / ТЕСТ StroyBot
Что сделал: 1) … 2) … 3) …
Ожидал: …
Получил: …
Старая страница в этом случае: … (если сравнивал)
Console (F12): текст красной ошибки
Network (F12): красный запрос — адрес и ответ (вкладка Response)
Скриншот: (если про внешний вид)
```
---
## Итог
| Раздел | Пройдено | Багов |
|---|---|---|
| Оболочка | | |
| Главная | | |
| Ресурсы | | |
| Привязка | | |
| Объекты | | |
| Работы | | |
| Импорт | | |
| Отчёты по проекту | | |
| Форма отчёта | | |