58 lines
6.0 KiB
Markdown
58 lines
6.0 KiB
Markdown
## MODIFIED Requirements
|
||
|
||
### Requirement: Вики проекта
|
||
Приложение SHALL иметь страницу «Вики» (`/app/wiki?project=<метка>`, раздел группы «Вики» боковой панели; текущий
|
||
проект — как у остальных страниц, «Проект в приложении»). Шапка страницы: заголовок «Вики», подзаголовок «<название
|
||
корня> · <N> страниц · обновлено ДД.ММ ЧЧ:ММ» и действие «Обновить вики» (вторичная кнопка; требование «Состояние и
|
||
обновление модулей»). Страница SHALL показывать:
|
||
- дерево страниц проекта (`GET /wiki/tree`) слева, свёрнутое до первого уровня; узел раскрывается по клику; узел
|
||
выбранной страницы и его предки раскрыты;
|
||
- выбранную страницу справа (`GET /wiki/pages/{code}`): заголовок, дата синхронизации, ссылка «открыть в Eva»,
|
||
Markdown с таблицами, без сырого HTML; без `page` в адресе — корневая страница; ссылки `page:<код>` открывают страницу
|
||
вики (код в адресе `&page=<код>`), ссылки `attachment:<id>` скачивают вложение (запрос, опрос состояния, сохранение
|
||
файла браузером), состояние `failed` — текст ошибки рядом со ссылкой;
|
||
- вложение-картинку (`image = true` в `attachments` ответа страницы) — в тексте
|
||
страницы на месте ссылки: вложение в `ready` при открытии страницы показывается картинкой сразу (содержимое `GET
|
||
/wiki/attachments/{id}/content`, без нового скачивания агентом); нажатие на ссылку нескачанной картинки ставит
|
||
скачивание (запрос, опрос состояния) и по готовности показывает картинку вместо сохранения файла. Под картинкой
|
||
остаётся ссылка «📎 <имя>», сохраняющая файл. Картинка не шире колонки страницы. Содержимое не получено (409
|
||
`not_ready`, ошибка сети) — вместо картинки прежняя ссылка, нажатие на неё ставит скачивание и по готовности
|
||
показывает картинку; ошибка скачивания — текст рядом со ссылкой. Без нажатия приложение не ставит скачивание;
|
||
- на экранах уже 640 px выбранная страница — над деревом;
|
||
- поиск над деревом (`GET /wiki/search`): список результатов с фрагментами вместо дерева, пока строка поиска не пуста;
|
||
после очистки поиска раскрытие дерева прежнее;
|
||
- проекта без корня — форму «Корень вики (DOC-… или ссылка)» с кнопкой «Привязать» (`PATCH /projects/{label}`); 422 —
|
||
текст ошибки у поля;
|
||
- корень есть, синхронизаций нет — «вики ещё не синхронизирована» и действие «Обновить вики»;
|
||
- последняя синхронизация с ошибкой — плашку с текстом ошибки над страницей.
|
||
|
||
#### Scenario: Открыть страницу по ссылке
|
||
- **WHEN** на странице DOC-3 нажата ссылка `page:DOC-2`
|
||
- **THEN** адрес `/app/wiki?project=AWPCA&page=DOC-2`, справа DOC-2, в дереве DOC-2 выделен
|
||
|
||
#### Scenario: Проект без корня
|
||
- **WHEN** открыта `/app/wiki?project=sfm_kedr`, корня нет; введено `DOC-001234`, нажато «Привязать»
|
||
- **THEN** `PATCH /projects/sfm_kedr {wiki_root: "DOC-001234"}`; строка «Вики» блока состояния показывает ход пакета
|
||
синхронизации
|
||
|
||
#### Scenario: Поиск
|
||
- **WHEN** в строке поиска «согласов»
|
||
- **THEN** вместо дерева — результаты `GET /wiki/search?project=AWPCA&q=согласов`; очистка строки возвращает дерево
|
||
|
||
#### Scenario: Без выбранной страницы
|
||
- **WHEN** открыта `/app/wiki?project=AWPCA` без `page`
|
||
- **THEN** справа корневая страница проекта, в дереве она выделена
|
||
|
||
#### Scenario: Скачать картинку
|
||
- **WHEN** на странице DOC-3 вложение 7 `scheme.png` (`image = true`) в `none`; нажата ссылка «📎 scheme.png»; агент скачал файл
|
||
- **THEN** `POST /wiki/attachments/7/fetch`, опрос до `ready`, `GET /wiki/attachments/7/content`; на месте ссылки —
|
||
картинка, под ней ссылка «📎 scheme.png»; файл браузером не сохраняется
|
||
|
||
#### Scenario: Скачанная картинка видна сразу
|
||
- **WHEN** вложение 7 `scheme.png` в `ready`, открыта страница DOC-3
|
||
- **THEN** картинка показана без нажатия; `POST /wiki/attachments/7/fetch` не вызывался
|
||
|
||
#### Scenario: Не картинка
|
||
- **WHEN** вложение 8 `model.xlsx` (`image = false`) в `ready`, нажата ссылка «📎 model.xlsx»
|
||
- **THEN** файл сохраняется браузером, картинки нет
|