6.0 KiB
6.0 KiB
MODIFIED Requirements
Requirement: Вики проекта
Приложение SHALL иметь страницу «Вики» (/app/wiki?project=<метка>, раздел группы «Вики» боковой панели; текущий
проект — как у остальных страниц, «Проект в приложении»). Шапка страницы: заголовок «Вики», подзаголовок «<название
корня> · страниц · обновлено ДД.ММ ЧЧ:ММ» и действие «Обновить вики» (вторичная кнопка; требование «Состояние и
обновление модулей»). Страница 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, без нового скачивания агентом); нажатие на ссылку нескачанной картинки ставит скачивание (запрос, опрос состояния) и по готовности показывает картинку вместо сохранения файла. Под картинкой остаётся ссылка «📎 <имя>», сохраняющая файл. Картинка не шире колонки страницы. Содержимое не получено (409not_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 файл сохраняется браузером, картинки нет