Перейти к содержанию

Тест-кейсы: Переменные для ВР3

Источник: актуальная QA-документация проекта «Переменные для ВР3», редакция от 20.08.2026.

Область проверки

Проверяются создание, редактирование и удаление переменных, настройки десяти типов, значения по умолчанию, привязки к этапам из двух точек входа, порядок и поведение на исполнении, права, изоляция данных, надежность, производительность и архитектурные ограничения ВР-10.

Общие предусловия и данные

  1. Доступно тестовое окружение BP Platform с актуальной сборкой и средствами просмотра сетевых запросов/логов.
  2. Авторизован Архитектор с правом редактирования БП.
  3. Создан черновик БП Переменные А с этапами 1. Заполнение, 2. Согласование, 3. Утверждение.
  4. Создан черновик БП Переменные Б для проверки изоляции; его данные не принадлежат БП Переменные А.
  5. Создан опубликованный БП Опубликованный.
  6. Доступен пользователь Наблюдатель без права редактирования.
  7. В справочной системе есть категории Финансы, Документы и справочники Статьи учета, Типы документов с тестовыми значениями.
  8. В системе объектов учёта есть категории Контрагенты, Договоры, системный объект Все контрагенты и пользовательские наборы Благонадежные, Новые.
  9. Подготовлены безопасные файлы каждого разрешенного расширения, файл sample.exe, файл с подмененным расширением, тестовый вредоносный образец, наборы суммарным размером ровно и более 100 МБ.
  10. Для замеров используются согласованный профиль нагрузки, стабильная сеть и синхронизированные часы. Время backend и frontend фиксируется раздельно.

UI и CRUD

Основание: BR-REQ-012–015, BR-REQ-020, FR-VAR-001–005, FR-VAR-007, FR-SEC-001, макеты.

ID Название Предусловия Шаги Ожидаемый результат
VAR-UI-001 Список переменных и состояния фильтра В БП Переменные А есть поле и две переменные 1. Открыть Настройка полей и переменных.
2. Переключить Все, Поля, Переменные.
3. Выполнить поиск по имени переменной.
4. Открыть меню строки.
Счетчик соответствует строкам; фильтр Переменные не показывает поля; поиск фильтрует список; для переменной видны название, описание, тип/формат, число действий, источник/группа и значение по умолчанию согласно утвержденному UI; меню содержит операции редактирования, настройки этапов и удаления в черновике.
VAR-UI-002 Открытие формы создания переменной Открыт список переменных черновика Нажать кнопку + и выбрать/оставить тип сущности Переменная. Открыта форма добавления; доступны обязательные Название и Тип/Формат, необязательное Описание, динамическое Значение по умолчанию, настройки типа, Сохранить и Отмена; фокус установлен внутрь формы.
VAR-UI-003 Отмена создания Открыта пустая форма создания 1. Заполнить несколько полей.
2. Нажать Отмена или закрыть форму.
3. При наличии подтверждения подтвердить выход.
4. Повторно открыть список.
Новая переменная не создана; счетчик и список не изменены; черновые значения не подставляются при новом открытии.
VAR-CRUD-001 Создание валидной переменной Открыта форма создания в БП Переменные А 1. Ввести уникальное имя Комментарий QA.
2. Выбрать Строка.
3. Задать описание, допустимые настройки и default value.
4. Сохранить.
5. Повторно открыть переменную.
Сохранена одна переменная текущего БП; форма закрыта; список и счетчик обновлены; все введенные значения сохраняются и предзаполняются без искажений.
VAR-CRUD-002 Обязательность имени и типа Открыта форма создания 1. Оставить имя пустым и попытаться сохранить.
2. Ввести имя, очистить обязательный тип доступным способом и повторить.
Сохранение заблокировано; у каждого незаполненного обязательного поля показана понятная ошибка; запись не создается.
VAR-CRUD-003 Уникальность имени внутри БП В БП Переменные А есть Город Создать вторую переменную с именем Город, затем повторить через прямой запрос к сервису, если API доступен. Обе попытки отклонены бизнес-валидацией; в БП остается одна переменная Город; частичная запись отсутствует.
VAR-CRUD-004 Одинаковое имя в разных БП В БП Переменные А есть Город В БП Переменные Б создать переменную Город. Создание разрешено; у переменных разные идентификаторы и businessProcessId; они видны только в своих БП.
VAR-CRUD-005 Границы описания переменной Подготовлены строки длиной 499, 500 и 501 символ Последовательно сохранить переменные с каждым описанием и проверить счетчик символов. 499 и 500 символов сохраняются полностью; 501-й символ не принимается либо сохранение блокируется с ошибкой; лимит интерфейса равен 500, несмотря на 0/250 в старом макете.
VAR-CRUD-006 Редактирование с предзаполнением Есть переменная Город с описанием, настройками и default value 1. В меню строки выбрать Редактировать.
2. Сверить поля.
3. Изменить имя на уникальное, описание и default value.
4. Сохранить и открыть повторно.
Исходные значения предзаполнены; измененные значения сохранены; неизмененные настройки не потеряны; updatedAt обновлен, новая запись не создана.
VAR-CRUD-007 Отмена редактирования Открыто редактирование существующей переменной Изменить все доступные поля, нажать Отмена, повторно открыть переменную. Сохраненные данные остались исходными; список и привязки не изменились.
VAR-CRUD-008 Общая валидация значения по умолчанию Открыта форма переменной с ограничениями типа Указать default value другого типа или нарушающий текущие ограничения и сохранить. Сохранение заблокировано; ошибка привязана к default value и объясняет несоответствие; после исправления допустимое значение сохраняется.
VAR-CRUD-009 Отмена удаления неиспользуемой переменной Переменная Временная не привязана к этапам 1. Выбрать Удалить.
2. Проверить текст с именем и типом.
3. Нажать Отмена.
Показан предусмотренный боттомбар подтверждения; после отмены переменная и ее данные сохранены.
VAR-CRUD-010 Подтверждение удаления неиспользуемой переменной Переменная Временная не привязана к этапам 1. Выбрать Удалить.
2. Нажать Подтвердить.
3. Обновить страницу и выполнить поиск.
Переменная удалена; показан алерт Переменная удалена из бизнес-процесса; строка и запись detail больше недоступны; остальные переменные не затронуты.
VAR-CRUD-011 Удаление используемой переменной и каскад Город привязан к двум этапам 1. Начать удаление и подтвердить первый вопрос.
2. Проверить список этапов в предупреждении.
3. Нажать Отмена и убедиться в сохранности.
4. Повторить и нажать Да.
5. Проверить оба этапа.
До финального подтверждения данные не меняются; предупреждение перечисляет оба этапа и потерю привязок; после Да переменная и только ее привязки удалены атомарно; счетчики этапов обновлены; показан алерт успеха.
VAR-CRUD-012 Обработка удаленной/устаревшей переменной Пользователь A открыл настройку этапов; пользователь B удалил переменную Пользователь A пытается загрузить/сохранить изменения. Показана понятная контролируемая ошибка; форма не падает и не показывает debug/HTML; удаленная переменная не восстанавливается и не создает orphan-привязку.
VAR-CRUD-013 Блокировка изменений опубликованного БП Открыт БП Опубликованный под Архитектором Проверить список, меню, кнопки +, редактирования, удаления, настройки этапов и Настроить; попытаться повторить операции прямыми запросами. Все операции изменения скрыты/заблокированы; backend также отклоняет их; данные опубликованного БП не изменяются, чтение остается доступным по правам.

Тип Строка

Основание: BR-REQ-002, FR-TYPE-001.

ID Название Предусловия Шаги Ожидаемый результат
VAR-STR-001 Строка без ограничения длины Открыта форма, выбран Строка Выбрать Неограниченное, сохранить и открыть повторно. Переменная сохранена; в settings.maxLength отсутствует лимит/хранится null; поле исполнения не применяет пользовательский лимит длины.
VAR-STR-002 Строка с положительным лимитом и default value Выбран Строка Задать До 10 символов; проверить default value длиной 10 и 11; затем проверить ввод на исполнении. Значение длиной 10 сохраняется и принимается; 11 — отклоняется при настройке и исполнении; граница применяется единообразно.
VAR-STR-003 Невалидный лимит строки Выбран режим До N символов Последовательно ввести пустое значение, 0, отрицательное, дробное и нечисловое значение. Каждый невалидный вариант отклонен; требуется целое положительное N; переменная не сохраняется с некорректным maxLength.

Тип Число

Основание: BR-REQ-003, FR-TYPE-002.

ID Название Предусловия Шаги Ожидаемый результат
VAR-NUM-001 Добавление допустимых операций и запрет повтора Выбран Число Через + добавить Больше, Меньше, Не больше, Не меньше; попытаться второй раз добавить уже использованный вид. Доступны ровно четыре операции; сохраненные строки содержат числовые значения; одна операция каждого вида используется не более одного раза; дубль недоступен или отклонен.
VAR-NUM-002 Противоречивые числовые ограничения Выбран Число Попытаться сохранить Больше 5 + Меньше 3, затем Больше 5 + Не больше 5. Оба набора отклонены как пустой диапазон; показана понятная ошибка; ни один набор частично не сохраняется.
VAR-NUM-003 Границы диапазона и default value Выбран Число Сохранить Не меньше 5 + Не больше 5 с default 5; проверить 4.99 и 5 на исполнении; затем проверить исключающую границу Больше 5. Равенство 5 допустимо для включающих границ; 4.99 отклоняется; для Больше 5 значение 5 отклоняется; default value проверяется теми же правилами.

Тип Список

Основание: BR-REQ-004, FR-TYPE-003, UC-001.

ID Название Предусловия Шаги Ожидаемый результат
VAR-LIST-001 Добавление и удаление вариантов списка Выбран Список Добавить Москва, Санкт-Петербург, Казань; удалить Казань; добавить ее снова; сохранить. Кнопка добавляет отдельное текстовое поле, × удаляет выбранный вариант; порядок и тексты сохранены в settings.options; произвольный вариант не добавляется на исполнении.
VAR-LIST-002 Количество ответов и default value Есть три варианта Задать Количество возможных ответов = 1, выбрать Москва по умолчанию и сохранить; на исполнении попытаться выбрать два значения. Минимум 1 принимается; default value входит в варианты; на исполнении доступен выбор не более одного значения.
VAR-LIST-003 Невалидное количество и значение вне списка Есть варианты списка Попытаться сохранить количество 0, отрицательное, дробное и пустое; затем указать default value, которого нет в options. Требуется целое значение не менее 1; default value вне списка отклоняется; запись не сохраняется частично.

Тип Флаг

Основание: BR-REQ-005, FR-TYPE-004.

ID Название Предусловия Шаги Ожидаемый результат
VAR-FLAG-001 Предустановленные пары флага Выбран Флаг Последовательно выбрать Да/Нет, 1/0, Есть/Нет, сохранить и проверить отображение/default value. Каждая пара сохраняет правильные true/false labels и preset; default value выбирается только из активной пары; на исполнении показана выбранная пара.
VAR-FLAG-002 Пользовательская пара флага Выбран Флаг Выбрать Настроить; оставить одно поле пустым; затем заполнить Согласен и Не согласен, выбрать default и сохранить. При неполной паре сохранение отклонено; два значения сохраняются раздельно и отображаются на исполнении; default принадлежит пользовательской паре.

Типы Ссылка, Дата, Дата и время

Основание: BR-REQ-006–008, FR-TYPE-008–010, UC-004.

ID Название Предусловия Шаги Ожидаемый результат
VAR-LINK-001 Валидация URL Выбран Ссылка Проверить согласованные валидные URL (https://example.org/path?q=1) и невалидные строки (example, пробелы, поврежденная схема) как default и на исполнении. Валидный URL сохраняется без искажения; невалидный блокируется понятной ошибкой; одно правило действует в настройке и исполнении.
VAR-DATE-001 Дата через календарь Выбран Дата Выбрать 15.08.2026, сохранить, открыть повторно и проверить исполнение. Дата выбирается календарем, хранится как дата без времени и отображается в согласованном формате DD.MM.YYYY; default подставляется на исполнении.
VAR-DATETIME-001 Дата и время с точностью до минут Выбран Дата и время Выбрать 15.08.2026 14:30, сохранить и открыть повторно. Дата и время выбираются компонентами и представлены единым значением; сохраняются минуты; отображение соответствует DD.MM.YYYY HH:mm; секунды не требуются.
VAR-DATETIME-002 Валидация и изменение даты-времени на исполнении Есть переменная с default 15.08.2026 14:30 и редактируемым действием Ввести невозможную дату/время, затем выбрать валидное значение 16.08.2026 09:05 и завершить этап. Невалидное значение отклонено; валидное заменяет default с точностью до минут и сохраняется после повторного открытия экземпляра.

Тип Файл

Основание: BR-REQ-009, FR-TYPE-007, NFR-SCALE-004, NFR-SEC-003.

ID Название Предусловия Шаги Ожидаемый результат
VAR-FILE-001 Выбор разрешенных форматов Выбран Файл Открыть выбор форматов; выбрать PDF, DOC, DOCX, JPEG, PNG, XLS, XLSX; попытаться указать другой формат. Список содержит ровно семь разрешенных расширений; выбранные значения сохраняются без дублей; иной формат нельзя добавить.
VAR-FILE-002 Количество файлов и default value Выбран Файл, разрешены PDF/PNG Проверить maxFiles 1 и 3, а также 0, отрицательное, дробное и пустое; загрузить default files до и сверх лимита. Принимается целое значение не менее 1; количество файлов не превышает maxFiles; превышение блокируется без потери уже допустимых файлов.
VAR-FILE-003 Проверка содержимого, размера и вредоносного файла Настроены разрешенные форматы Загрузить разрешенный файл, sample.exe, файл с подмененным расширением, вредоносный образец, набор более 100 МБ. Разрешенный безопасный файл принимается; запрещенное/подмененное/вредоносное содержимое отклоняется; набор сверх 100 МБ отклоняется; пользователь получает безопасное сообщение без раскрытия внутренних путей.

Тип Справочник

Основание: BR-REQ-010, FR-TYPE-005, UC-002.

ID Название Предусловия Шаги Ожидаемый результат
VAR-DIR-001 Обязательность и фильтрация справочника Выбран Справочник Попытаться сохранить без категории/справочника; выбрать Финансы; проверить список и выбрать Статьи учета; сменить категорию на Документы. Оба поля обязательны; второй селект содержит только справочники активной категории; после смены категории несовместимый directoryId очищается; сохранить чужую комбинацию запросом нельзя.
VAR-DIR-002 Количество ответов и default value справочника Выбран Статьи учета Проверить maxSelections 1 и 3, невалидные 0/дробное; выбрать значение справочника по умолчанию и значение из другого справочника. Принимается целое значение не менее 1; default из выбранного справочника сохраняется; чужое значение отклоняется; лимит действует на исполнении.

Тип Объект учёта

Основание: BR-REQ-011, FR-TYPE-006, UC-003.

ID Название Предусловия Шаги Ожидаемый результат
VAR-OBJECT-001 Фильтрация и системный объект учёта Выбран Объект учёта Выбрать Контрагенты; открыть селект объектов; выбрать Все контрагенты, затем Благонадежные. Поля категории и объекта обязательны; селект отфильтрован по категории и содержит системный объект всех значений и пользовательские объекты; каждый допустимый выбор сохраняется.
VAR-OBJECT-002 Смена категории очищает несовместимый объект Выбран объект Благонадежные категории Контрагенты Сменить категорию на Договоры; попытаться сохранить старый objectId через UI и прямой запрос. Старый выбор очищен; показываются только объекты Договоры; backend отклоняет несовместимую пару category/object; исходные данные не подменяются.
VAR-OBJECT-003 Количество ответов и default value объекта Выбран объект учета Благонадежные Проверить maxSelections 1 и 5, невалидные 0/дробное; выбрать допустимого контрагента и объект другой категории как default. Принимается целое значение не менее 1; допустимый default сохраняется; объект вне выбранного набора/категории отклоняется; лимит применяется на исполнении.

Привязка из списка переменных

Основание: BR-REQ-001, BR-REQ-016–017, FR-ASSIGN-001–007, UC-005–006.

ID Название Предусловия Шаги Ожидаемый результат
VAR-ASSIGN-001 Оверлей и таблица привязок Город привязан к Заполнение В меню Город выбрать управление этапами и проверить экран. Заголовок содержит имя Город; таблица показывает фактический счетчик и колонки Этап, Действие, Описание действия, Опции; этап только для чтения в строке; доступны добавление, Сохранить все и Отмена.
VAR-ASSIGN-002 Добавление этапа и состав селекта Город уже привязан к Согласование; этапы созданы не в порядке следования Нажать + Добавить этап, открыть селект и выбрать Заполнение. Открыт сайдпейдж; уже использованного Согласование нет; остальные этапы отсортированы по order; после локального сохранения строка Заполнение появляется в таблице, но еще не записана окончательно до Сохранить все.
VAR-ASSIGN-003 Четыре обязательных действия Открыт сайдпейдж добавления Открыть селект, проверить варианты; попытаться сохранить без действия; затем последовательно выбрать каждый вариант. Доступны ровно Ввод, Редактирование, Уточнение, Просмотр; без выбора сохранение заблокировано; каждое допустимое действие принимается.
VAR-ASSIGN-004 Обязательность и границы описания действия Подготовлены строки 149, 150, 151 символ Сохранить привязку с пустым описанием и с каждой строкой. Пустое и 151 символ отклонены; 149 и 150 сохраняются полностью; счетчик/ошибка отражают лимит 150 во всех состояниях формы.
VAR-ASSIGN-005 Запрет повторной привязки Город привязан к Заполнение Попытаться добавить тот же этап через UI, затем повторить прямым запросом/параллельными сохранениями. Этап отсутствует в селекте; backend гарантирует уникальность пары; создается не более одной записи variableId + stageId; показана бизнес-ошибка без 500/debug.
VAR-ASSIGN-006 Редактирование привязки Есть Город / Заполнение / Ввод / Укажите город Выбрать Изменить, сменить действие на Уточнение и описание на Уточните город, локально сохранить и нажать Сохранить все. Сайдпейдж предзаполнен; строка и сохраненная привязка обновлены; переменная и этап не дублированы; новое поведение видно с обеих точек входа.
VAR-ASSIGN-007 Отмена удаления привязки Есть привязка Город к Согласование Выбрать Удалить, проверить текст с именами, нажать Отмена. Показано подтверждение; строка и серверная привязка сохранены; счетчики не изменены.
VAR-ASSIGN-008 Подтверждение удаления привязки Есть привязка Город к Согласование Подтвердить удаление строки, нажать Сохранить все, проверить этап и переменную. Удалена только выбранная привязка; сама переменная, этап и другие привязки сохранены; счетчики уменьшены на 1.
VAR-ASSIGN-009 Пакетное сохранение и счетчик В открытом оверлее добавлена, изменена и удалена по одной строке Нажать Сохранить все, дождаться ответа и открыть экран повторно. Все три изменения применены атомарно; оверлей закрыт; показан алерт Настройки переменной в этапах сохранены; счетчик этапов равен фактическому числу привязок.
VAR-ASSIGN-010 Отмена пакета изменений В оверлее подготовлены несохраненные добавление/изменение/удаление Нажать Отмена, подтвердить выход при запросе и открыть настройки повторно. Ни одно подготовленное изменение не применено; исходные строки и счетчики восстановлены; ложное уведомление об успехе отсутствует.

Привязка через полотно и настройки этапа

Основание: BR-REQ-018, FR-CANVAS-001–006, UC-007–008.

ID Название Предусловия Шаги Ожидаемый результат
VAR-CANVAS-001 Карточка переменных в сайдпанели этапа К Заполнение привязаны две переменные Нажать этап на полотне, открыть вкладку Переменные. Сайдпанель открыта; карточка показывает фактическое количество 2 и кнопку Настроить.
VAR-CANVAS-002 Переход сразу на нужную вкладку Открыта карточка переменных этапа Нажать Настроить. Оверлей настройки этапа открывается сразу на вкладке Поля и переменные, без дополнительного клика; отображаются строки текущего этапа.
VAR-CANVAS-003 Добавление только непривязанной переменной Город уже на этапе, Имя клиента еще нет Нажать + Добавить, открыть селект переменных, выбрать Имя клиента, заполнить действие/описание и локально сохранить. Город отсутствует в селекте; переменные других БП отсутствуют; Имя клиента доступно; после сохранения появляется одна новая строка с именем и типом.
VAR-CANVAS-004 Валидация формы добавления через этап Открыта форма добавления Проверить отсутствие переменной, действия и описания; проверить описание 150/151 символ и дублирование прямым запросом. Все три поля обязательны; 150 символов допустимы, 151 — нет; дубль пары отклонен; невалидная строка не добавляется.
VAR-CANVAS-005 Редактирование действия и описания Есть Город / Просмотр / Проверьте город В меню строки выбрать Редактировать, сменить на Уточнение / Уточните город, локально и окончательно сохранить. Форма предзаполнена; изменены только action/description текущей привязки; результат виден в настройке этапов из списка переменных.
VAR-CANVAS-006 Удаление из этапа с подтверждением Есть привязка Город к Согласование Выбрать Удалить, сначала отменить, затем повторить и подтвердить; сохранить оверлей. При отмене строка остается; после подтверждения и общего сохранения удалена только привязка; переменная остается в БП; подтверждение содержит переменную и этап.
VAR-CANVAS-007 Сохранение оверлея обновляет счетчик В таблицу добавлена одна валидная строка Нажать основную кнопку Сохранить, дождаться закрытия и проверить сайдпанель. Изменение сохранено; оверлей закрыт; счетчик увеличен на 1 и равен данным при повторном открытии.
VAR-CANVAS-008 Отмена изменений этапа Подготовлены несохраненные добавление, изменение и удаление Нажать Отмена, повторно открыть этап. Все серверные данные и счетчик остались исходными; временные строки отсутствуют.
VAR-CANVAS-009 Синхронизация двух точек входа Изменение сохранено через полотно Открыть управление этапами той же переменной из общего списка; затем изменить там и вернуться в этап. Обе точки входа читают одну сущность VariableAssignment; действие, описание, наличие строки и счетчики совпадают без обновления вручную сверх предусмотренного потока.

Порядок и экран исполнения

Основание: BR-REQ-001, BR-REQ-019, FR-VAR-006, FR-CANVAS-007, макеты исполнения.

ID Название Предусловия Шаги Ожидаемый результат
VAR-ORDER-001 Изменение глобального порядка В БП есть Город, Сумма, Дата Переместить Дата перед Город, сохранить/дождаться автосохранения, обновить страницу. Новый глобальный order сохранен и стабилен; нет дублей/пропусков, влияющих на сортировку; в общем контексте исполнения используется новый порядок.
VAR-ORDER-002 Изменение локального порядка этапа Все три переменные привязаны к Заполнение На вкладке этапа переместить Сумма первой, сохранить и открыть повторно. Новый порядок VariableAssignment.order сохранен только для Заполнение; drag-and-drop/кнопки имеют однозначный результат.
VAR-ORDER-003 Независимость глобального и локального порядка Настроены отличающиеся порядки Изменить глобальный порядок, проверить локальный; затем изменить локальный и проверить глобальный. Изменение одного порядка не перезаписывает другой; оба значения воспроизводятся после обновления.
VAR-ORDER-004 Порядок на экране исполнения Настроены глобальный и локальный порядки, запущен экземпляр Открыть этап с локальным порядком и экран без локальной настройки/в согласованном общем контексте. На этапе применяется локальный порядок; там, где локальный порядок не задан, применяется согласованный глобальный; порядок стабилен после повторного входа.
VAR-ACTION-001 Действие Ввод У переменной нет значения; на этапе действие Ввод Попытаться завершить этап без значения, затем ввести валидное значение. Без значения завершение заблокировано; после ввода валидного значения этап можно завершить и значение сохраняется.
VAR-ACTION-002 Действие Редактирование Есть текущее значение; действие Редактирование Попытаться завершить без изменения, затем изменить значение. Поле редактируемо; пользователь обязан изменить текущее значение; без изменения завершение блокируется, с изменением — разрешено.
VAR-ACTION-003 Действие Уточнение Есть текущее значение; действие Уточнение Завершить без изменения; повторить в другом экземпляре с изменением. Поле редактируемо, но изменение необязательно; оба варианта разрешены; выбранное итоговое значение сохраняется.
VAR-ACTION-004 Действие Просмотр Есть значение; действие Просмотр Попытаться изменить значение через UI и запрос исполнения. Значение доступно только для чтения; UI не разрешает ввод; backend не принимает изменение в обход UI.
VAR-ACTION-005 Подсказка действия на исполнении У каждой тестовой переменной задано описание действия Открыть этап исполнения и сопоставить подсказки с привязками. У каждой переменной показано описание именно текущей привязки; текст не подменяется описанием переменной, не обрезается до 150 символов с потерей сохраненного значения и соответствует этапу.

Согласованность данных и безопасность

Основание: FR-SEC-001, NFR-SEC-001–002, NFR-RELIAB-001–003.

ID Название Предусловия Шаги Ожидаемый результат
VAR-DATA-001 Каскад при удалении этапа К Согласование привязаны три переменные, у них есть другие этапы Удалить этап предусмотренным модулем способом и проверить связи. Удалены все и только привязки удаленного этапа; переменные и их связи с другими этапами сохранены; orphan-записей нет; счетчики пересчитаны.
VAR-DATA-002 Атомарность и полной набор валидаций Пакет содержит две валидные и одну невалидную привязку/настройку Сохранить пакет и проверить БД/API после ошибки; исправить ошибку и повторить. До исправления не сохранена ни одна часть пакета; показаны понятные ошибки всех обнаруженных полей либо согласованный полный ответ валидации; после исправления пакет сохраняется целиком.
VAR-SEC-001 Права и статус проверяются на каждом изменении Наблюдатель; опубликованный БП; известны запросы операций Попытаться создать, изменить, удалить переменную, изменить порядок и привязки через UI и сервисные запросы. UI не предлагает запрещенные действия; каждый запрос независимо проверяет авторизацию, право и статус БП; возвращается контролируемый отказ; данные не меняются.
VAR-SEC-002 Изоляция переменных и привязок по БП В БП А и Б есть свои переменные/этапы Подставить идентификатор переменной/этапа из БП Б в чтение и изменения БП А, включая создание привязки и reorder. Чужие данные не появляются в списках/селектах; detail/update/delete/assignment/reorder отклоняются как not found или согласованная бизнес-ошибка; данные обоих БП не изменены.

Производительность и масштабирование

Основание: NFR-PERF-001–003, NFR-SCALE-001–004.

ID Название Предусловия Шаги Ожидаемый результат
VAR-PERF-001 Открытие трех основных интерфейсов до 2 секунд Стандартный согласованный профиль По 5 раз открыть создание/редактирование, настройку этапов переменной и настройку этапа; фиксировать p95 от действия до готовности. Для каждого интерфейса p95 не превышает 2 секунд; данные и контролы готовы к взаимодействию, а не только показан контейнер.
VAR-PERF-002 Сохранение до 3 секунд Подготовлены валидная переменная и пакет привязок По 5 раз выполнить создание/редактирование и пакетное сохранение; фиксировать p95 до подтвержденного обновления UI. p95 каждой операции не превышает 3 секунд; уведомление не показывается до подтверждения успешной записи.
VAR-PERF-003 Страница с 500 переменными до 5 секунд В БП создано 500 разнотипных переменных Холодно и тепло открыть страницу 5 раз, проверить прокрутку, поиск и меню. p95 полной загрузки не превышает 5 секунд; интерфейс остается работоспособным, строки не теряются и не дублируются.
VAR-PERF-004 Оверлеи при 1000 переменных и 50 этапах В БП 1000 переменных и 50 этапов Открыть три интерфейса из VAR-PERF-001 и выполнить поиск/открытие селекта. Открытие укладывается в 2 секунды по NFR-PERF-001; селекты/поиск не зависают и возвращают полный согласованный результат с пагинацией при наличии.
VAR-PERF-005 Селекты при 100 этапах В БП ровно 100 этапов, часть уже использована Открыть добавление этапа для переменной, найти первый/средний/последний этап и проверить сортировку. Селект работоспособен, отсортирован по order, содержит все 100 минус уже использованные этапы, поиск/прокрутка не теряют элементы.
VAR-PERF-006 Граница суммарного размера файлов 100 МБ maxFiles достаточен, форматы разрешены Загрузить набор ровно 100 МБ и набор 100 МБ + минимальная единица размера по контракту. Набор на границе принимается; набор сверх границы отклоняется до/при сохранении с понятной ошибкой; частичная загрузка не считается успешным значением.
VAR-SCALE-001 Большой набор справочников Подготовлен согласованный большой набор категорий/справочников с пагинацией Выбирать категории на разных страницах, искать справочники, быстро менять категорию и сохранять выбор. Доступен весь набор, а не только первая страница; фильтрация соответствует последней категории; устаревшие ответы не подменяют выбор; время соответствует согласованному нагрузочному профилю.
VAR-SCALE-002 Большой набор объектов учёта Подготовлен согласованный большой набор категорий/объектов Повторить сценарий VAR-SCALE-001, включая системные объекты. Доступны системные и пользовательские объекты нужной категории; пагинация/поиск не смешивают категории; последний выбор сохраняется корректно.

UX и архитектурные проверки

Основание: NFR-USAB-001–003, NFR-MOD-001–002, макеты.

ID Название Предусловия Шаги Ожидаемый результат
VAR-UX-001 Единые паттерны и понятные подписи Доступны все точки входа Последовательно открыть создание/редактирование, добавление/редактирование привязки, оба подтверждения удаления и уведомления. Создание/редактирование использует согласованный overlay, привязки — sidepage, удаление — bottombar, результат — alert/toast; заголовки содержат контекст; Сохранить, Отмена, Подтвердить, добавление и настройка названы единообразно по утвержденному copy.
VAR-UX-002 Обратная связь и восстановление после ошибки Можно имитировать 4xx, 5xx и потерю сети Вызвать ошибку валидации, отказ прав, серверную ошибку и потерю сети при сохранении; восстановить сеть и повторить. Пользователь различает причины; сообщения не содержат stack trace/HTML; форма не закрывается и введенные данные не теряются без подтвержденного успеха; повторная отправка не создает дубль.
VAR-ARCH-001 Расширяемость конфигурации типов Доступны код и архитектурная схема реализации Провести ревью регистрации типов, схем settings, рендера формы, сериализации и валидации; добавить тестовый тип в изолированной ветке/fixture без изменения существующих обработчиков. Новый тип подключается через отдельную конфигурацию/стратегию; существующие типы и общая CRUD-логика не требуют условных правок по всему модулю; неизвестный тип обрабатывается контролируемо.
VAR-ARCH-002 Независимость интеграций Доступны код, контракты и тестовые doubles справочников, объектов, редактора и исполнения Отключить/заменить каждый внешний сервис по отдельности и выполнить релевантный поток; проверить границы модулей. Интеграции идут через явные интерфейсы/API; сбой одного источника дает локализованную ошибку и не повреждает переменные; доменная модель не зависит от UI/конкретного клиента внешней системы.

API: группы, системные переменные, форматы, экшны и ЭБП

Основание: BR-REQ-001–011, FR-CRUD-001–007, FR-TYPE-001–010, FR-ASSIGN-001–007, NFR-SEC-001–003, NFR-RELIAB-001–003. Фактический контракт фиксируется по OpenAPI стенда; токены и идентификаторы пользователей не сохраняются в артефактах.

ID Название Предусловия Шаги Ожидаемый результат
VAR-API-001 Аутентификация REST и GraphQL Получен валидный access token Выполнить одинаковый read-запрос: без заголовков; только с bearer; только с X-Keycloak-Sub; с обоими; с несовпадающим subject. Данные возвращаются только при валидном bearer и согласованной идентичности; клиентский subject без токена не авторизует запрос; ошибки не раскрывают внутренние данные.
VAR-API-002 Фильтры системных и пользовательских переменных В БП есть оба вида переменных Проверить interaction_type, is_system, is_common, is_init_parameter, q; сопоставить пересечения и total. Каждый фильтр возвращает только соответствующие записи; total и пагинация согласованы; системные признаки нельзя подделать пользовательским запросом.
VAR-API-003 Валидация пагинации В БП не менее двух переменных Проверить limit=1 с offset 0/1, затем limit 0, -1, текст и отрицательный offset. Валидные страницы последовательны и не дублируются; невалидные значения дают 422 без выполнения запроса к данным.
VAR-API-004 Изоляция detail по businessProcessId Переменная принадлежит БП A; существует БП B Запросить ID переменной через URL БП A, БП B и несуществующего БП. Только URL БП A возвращает объект; остальные дают 404/403 без раскрытия объекта.
VAR-API-005 Атомарность PATCH с неверным BP Подготовлена тестовая переменная БП A Отправить PATCH через URL БП B/несуществующего БП, затем повторно прочитать через БП A. PATCH отклонён до записи; все поля остались исходными.
VAR-API-006 Изоляция DELETE по businessProcessId Подготовлена тестовая переменная БП A Отправить DELETE через URL БП B; повторно получить переменную через БП A. DELETE отклонён; объект и привязки БП A сохранены.
VAR-API-007 Создание десяти форматов Есть временная пользовательская группа Последовательно создать Строку, Число, Список, Флаг, Ссылку, Дату, Дату и время, Файл, Справочник и Объект учёта с валидными settings/default; повторно прочитать. Каждый запрос 201; API возвращает типизированную схему; данные после GET совпадают с нормализованным контрактом.
VAR-API-008 Негативная валидация settings Есть временная группа Проверить неизвестный формат, maxSelections=0, запрещённый формат файла, maxFiles=0, directory/accounting object без обязательных ссылок, противоречивые number constraints. Каждый запрос отклонён 4xx; шаблон и link группы не создаются; пакетная операция атомарна.
VAR-API-009 Границы имени и описания Есть временная группа Проверить пустое/пробельное имя, description 499/500/501 и имя-дубликат. Пустое имя, 501 и дубликат отклонены контролируемым 4xx; 499/500 сохранены; debug/SQL/stack trace отсутствуют.
VAR-API-010 Защита системного признака Выполняется пользовательский POST/PATCH Передать is_system=true, затем проверить список is_system=true. Клиент не может создать или преобразовать системную переменную; сервер игнорирует поле либо возвращает 403/422.
VAR-API-011 CRUD категории и группы БП доступен для редактирования Создать категорию и группу, прочитать, изменить, проверить повторное имя группы, затем удалить. CRUD использует документированные коды; имя группы уникально в категории; системные категории/группы защищены; после удаления записи отсутствуют.
VAR-API-012 Счётчик и привязка переменных группы Создана группа и несколько переменных Получить группу до/после создания, перемещения и удаления переменных. variable_count и порядок вычислены из актуальных link; нет дублей; удалённые переменные не учитываются.
VAR-API-013 Системные группы в ЭБП Есть системная группа и несколько ЭБП Получить group variables для одного entity и paginated entities. Возвращается одна и та же группа; значения принадлежат указанному ЭБП и template; пагинация/архивный фильтр согласованы.
VAR-API-014 Контракт экшнов переменной Получен OpenAPI/GraphQL schema Найти CRUD привязки переменная–этап; проверить четыре action, описание 149/150/151, дубль пары и обе точки чтения. Контракт существует; доступны ровно четыре действия; границы и уникальность обеспечиваются backend; frontend operations присутствуют в schema.
VAR-API-015 Пользовательская переменная в существующем ЭБП ЭБП создан до переменной Добавить variable template и запросить entity fields/view существующего ЭБП. Поведение соответствует утверждённой миграционной политике: поле синхронизировано либо API явно сообщает, что применяется только к новым ЭБП.
VAR-API-016 Пользовательская переменная в новом ЭБП Создан валидный template в системном разделе Создать новый ЭБП; получить entity fields и view. Есть ровно одно поле с parent_id template; оно находится в правильной секции и доступно по обеим точкам чтения.
VAR-API-017 Default value в новом ЭБП Template имеет валидный default Создать ЭБП и получить поле каждого формата. data.value и UI-значение инициализированы default value с сохранением типа/формата.
VAR-API-018 Bulk-update поля ЭБП Есть пользовательское поле нового ЭБП Изменить значение, повторно прочитать view; повторить с невалидным field/entity и смешанным пакетом. Валидный пакет даёт 200 и сохраняется; невалидный — контролируемый 4xx; смешанный пакет не сохраняется частично.
VAR-API-019 Каскад и очистка тестовых объектов Используется уникальный префикс теста Удалить ЭБП, variables, группу, категорию; повторно выполнить списки/GET. Удалены только созданные тестом объекты и их entity fields/links; исходные данные неизменны; повторный GET даёт 404.
VAR-API-020 Согласованность OpenAPI, OPTIONS и frontend Доступны спецификация и frontend bundle Сопоставить методы/схемы OpenAPI, OPTIONS, реальные запросы и GraphQL documents клиента. Методы, payload, response и операции совпадают; нет клиентских операций, отсутствующих на backend; контракт проходит автоматический тест.
VAR-API-021 Полнота переданного endpoint inventory Получен согласованный список backend-ручек и OpenAPI стенда Для каждого маршрута шаблонов, actions, values, групп, init parameters и системных конфигов сопоставить path и HTTP methods. Все переданные маршруты опубликованы в OpenAPI с теми же методами; отсутствующие/лишние операции перечислены явно.
VAR-API-022 Глобальный порядок variables В отдельном тестовом БП есть системные и две пользовательские variables Получить полный список ID, отправить обратный порядок через fields/reorder, повторно прочитать; отправить неполный/чужой набор; восстановить исходный порядок. Полный набор атомарно получает order=1..N; неполный, дублированный или чужой набор отклоняется 4xx без изменения; исходный порядок восстановлен.
VAR-API-023 Симметричный CRUD action из variable и stage Есть variable и stage одного тестового БП Создать action через variable endpoint; прочитать через оба входа; PATCH через stage; DELETE через variable. Повторить в обратном направлении. Оба входа представляют один объект с одинаковым ID/данными; изменение и удаление видны с обеих сторон.
VAR-API-024 Валидация action и уникальность пары Есть variable и stage Проверить input/edit/clarify/view, неизвестное действие, пустое описание, длины 149/150/151 и повтор пары variable+stage. Ровно четыре действия допустимы; описание обязательно и не длиннее 150; дубль пары и invalid payload дают контролируемый 4xx без частичной записи.
VAR-API-025 Локальный порядок actions этапа На stage созданы минимум три action Отправить полный обратный ordered_ids, повторно прочитать через stage и variables; затем неполный, дублированный и содержащий чужой ID набор. Полный набор сохраняет локальный порядок; invalid наборы отклоняются атомарно; глобальный порядок variables не меняется.
VAR-API-026 Запись одного значения по action ЭБП находится на stage с action каждого типа Получить draggables/{id}/field-actions, записать value через action ID и повторно прочитать поле/view. Доступность записи соответствует action; валидное значение сохраняется с правильным типом; чужой draggable/action и invalid value отклоняются.
VAR-API-027 Атомарная запись нескольких значений В ЭБП доступны несколько actions Отправить валидный bulk, затем пакет с одним invalid/чужим action и повторно прочитать все значения. Валидный пакет сохраняется целиком; смешанный пакет не меняет ни одного значения и возвращает контролируемый 4xx.
VAR-API-028 Публикация категории и variables layout Создана временная пользовательская категория с группой Запросить layout черновика; publish; запросить layout; запретить недопустимые изменения; unpublish и повторно прочитать. Черновик недоступен в layout; опубликованная категория доступна; lifecycle и ограничения статуса соблюдаются; cleanup возвращает draft.
VAR-API-029 Параметры запуска Создана временная variable Назначить через PUT, повторно прочитать GET, снять DELETE; повторить через чужой/несуществующий БП и смешанный список ID. Назначение и снятие сохраняются; scope и полный набор валидируются до записи; ошибка не приводит к частичному назначению.
VAR-API-030 Конфиги системных переменных Доступна изолированная роль/среда для системного конфига Проверить list/detail/filter/pagination; создать уникальный bp_type, изменить excluded fields, проверить влияние на новый БП и удалить. CRUD документирован, bp_type уникален, excluded fields валидируются; только привилегированная роль изменяет конфиг; удаление возвращает исходную генерацию.
VAR-API-031 Верхнеуровневые группы и links Созданы category, groups и variables Сопоставить /field-groups/, groups в category, /field-group-links/ и group-variable read models до/после перемещения. Все представления содержат согласованные group/link/order; чужой BP недоступен; нет дублированных links.
VAR-API-032 CRUD значений /fields/ Создан отдельный ЭБП и известен template Создать value, прочитать list/detail, PUT/PATCH, проверить чужую entity/template и DELETE с повторным GET. CRUD сохраняет только значение данного ЭБП; parent/entity scope соблюдается; invalid/чужие ссылки отклоняются без побочных записей.
VAR-API-033 Невалидный template не блокирует создание ЭБП Используется отдельный тестовый БП и crash-safe cleanup Попытаться создать переменную с пустым именем; затем создать новый ЭБП в том же БП. При ошибке повторно проверить отсутствие остаточных сущностей. Невалидная переменная отклонена 4xx; новый ЭБП создаётся независимо от отклонённого запроса. Если template всё же принят, ошибка создания ЭБП фиксируется отдельно от первичного дефекта валидации; cleanup удаляет template, ЭБП и БП.

Автоматизация API-кейсов

Кейсы Реализация Статус автоматизации
VAR-API-001, VAR-API-004–006, VAR-API-020 api_tests/test_security_and_isolation.py Полная REST/GraphQL auth-матрица и GET/PATCH/DELETE scope; xfail только при точном известном симптоме. В recovery-run чужой БП выбирается read-only, без создания неудаляемой сущности.
VAR-API-002–003, VAR-API-010–012 api_tests/test_groups_and_system_variables.py Все опубликованные фильтры, valid/invalid pagination, уникальность группы, счётчик 2 → 1, POST/PATCH защиты is_system.
VAR-API-007–009 api_tests/test_variable_formats.py, api_tests/test_reference_contracts.py Восемь автономных positive E2E, границы 499/500/501 и 20 negative; каталог справочников проверяется read-only. Positive directory/accounting object — GAP до fixture API.
VAR-API-014, VAR-API-020–021 api_tests/test_actions_contract.py Полный inventory 30 переданных path/method contracts и GraphQL drift; точный xfail BPAPI-017 до deployment.
VAR-API-013, VAR-API-015–019, VAR-API-033 api_tests/test_ebp_fields.py Entity/page read models, existing/new ЭБП, default/update, каскад template → entity field и защита создания ЭБП от невалидного template.
VAR-API-022 api_tests/test_variable_reorder.py Полный набор ID, проверка persistence и обязательное восстановление; BPAPI-017 до deployment.
VAR-API-028 api_tests/test_category_publication.py Publish/unpublish пройдены; variables-layout отсутствует на стенде — BPAPI-017.
VAR-API-029 api_tests/test_init_parameters.py Positive lifecycle пройден; wrong-BP атомарен, но возвращает 500 — BPAPI-020.
VAR-API-030 api_tests/test_system_variable_configs.py Read/auth/schema подготовлены; BFF возвращает 404 — BPAPI-017. Mutation отложена до изолированной системной fixture.
VAR-API-019 api_tests/support/state.py, api_tests/test_cleanup.py, tools/cleanup-api-test-data.py Манифест, LIFO cleanup и аварийный повтор; 20.08.2026 полный цикл включая удаление БП пройден.
VAR-API-023–027, VAR-API-031–032 Контрактные ожидания зафиксированы; E2E будет добавлен после merge/deployment и появления автономной stage fixture Сейчас блокируют BPAPI-017 и отключённые execution routes feature-ветки.

Общие фикстуры находятся в api_tests/conftest.py; клиент OAuth/REST/GraphQL — в api_tests/support/client.py. Все ID создаваемых сущностей берутся из ответов текущего запуска. Учетные данные передаются только через environment variables.

Примечания к исполнению

  • Тесты с прямыми запросами выполняются по фактическому контракту реализации. До появления OpenAPI они не фиксируют выдуманные URL, HTTP-коды и payload.
  • Для VAR-ARCH-* результатом является ссылка на ревью/ADR и автоматические component-тесты, а не только отметка ручного тестировщика.
  • Для VAR-SCALE-* объем набора утверждается в плане нагрузочного тестирования. Формулировка неограниченное количество подтверждается отсутствием искусственного доменного лимита, пагинацией и архитектурным анализом.
  • Если продукт утвердит copy из макетов вместо формулировок ТЗ, сначала обновляются требования и матрица, затем ожидаемые результаты UI-кейсов.