76878c7617
Import tests wait for an estimate in the catalogue: the API returns totalCount 0 for every project. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
199 lines
24 KiB
Markdown
199 lines
24 KiB
Markdown
# План ручной проверки 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** Перетаскивание — **убрано** (решение 2026-10-16). Проверить, что строку дерева мышкой больше не перетащить.
|
||
- [ ] ✍️ **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-02…07 заблокированы (2026-10-19):** сначала `GET https://api.tnsu.kz/Project/{oid}/works` отвечал 500 `42703: column l.name does not exist` — команда API исправила. Теперь он отвечает 200, но `totalCount: 0` у всех проектов: сметы в справочник ещё не загружены. Старый web part показывает то же «Работы не найдены». Повторить, когда появится хотя бы один проект со сметой (тестовый проект 51 привязать к нему; настоящие проекты не привязывать). T-IMP-01 ✅.
|
||
> Проверено по коду: API урезает `pageSize=200` до 100, но число страниц берётся из `totalPages` ответа — работы не теряются.
|
||
- [ ] **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 разных старых отчёта → всё совпадает со старой формой (план-факт, персонал, техника, фото-папка).
|
||
- Проверено на проекте 17: №2030 и ещё 2 отчёта совпали, режим правки тот же. Отчёт с персоналом/техникой **внутри работы** найти не удалось (прямого доступа к Dataverse нет) — вложенные строки проверены только на тестовом проекте (T-REP-10/11). Дополнительно: встретится такой отчёт — сверить со старой формой.
|
||
- [ ] **T-REP-21** «← Вернуться назад» → вернулись туда, откуда пришли.
|
||
- [ ] **T-REP-22** Enter в любом поле не перезагружает страницу.
|
||
- [ ] ✍️ **T-REP-23** Удалить тестовый отчёт из «Отчёты по проекту» → «Удалить отчёт?» → пропал из списка (мягкое удаление).
|
||
|
||
---
|
||
|
||
## Как сообщить о баге
|
||
Скопируй и заполни:
|
||
```
|
||
Баг: T-XXX-NN
|
||
Роль / проект: Е / ТЕСТ StroyBot
|
||
Что сделал: 1) … 2) … 3) …
|
||
Ожидал: …
|
||
Получил: …
|
||
Старая страница в этом случае: … (если сравнивал)
|
||
Console (F12): текст красной ошибки
|
||
Network (F12): красный запрос — адрес и ответ (вкладка Response)
|
||
Скриншот: (если про внешний вид)
|
||
```
|
||
|
||
---
|
||
|
||
## Итог
|
||
| Раздел | Пройдено | Багов |
|
||
|---|---|---|
|
||
| Оболочка | | |
|
||
| Главная | | |
|
||
| Ресурсы | | |
|
||
| Привязка | | |
|
||
| Объекты | | |
|
||
| Работы | | |
|
||
| Импорт | | |
|
||
| Отчёты по проекту | | |
|
||
| Форма отчёта | | |
|