From 51e37f9874a694489ece40e9e42e1e1203259174 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 12 May 2026 16:56:00 +0300 Subject: [PATCH] =?UTF-8?q?feat(web-test):=20M5-pre=20#4a=20=E2=80=94=20?= =?UTF-8?q?=D0=9C=D0=B5=D0=BD=D0=B5=D0=B4=D0=B6=D0=B5=D1=80=20(choiceHisto?= =?UTF-8?q?ryOnInput=3DAuto)=20+=20selectValue/auto-history?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Реквизит шапки ПриходнаяНакладная.Менеджер типа CatalogRef.Контрагенты с дефолтным choiceHistoryOnInput=Auto. Существующий Контрагент в той же шапке имеет DontUse, что даёт парный контраст для тестирования влияния флага на selectValue. Новый шаг 04-selectvalue/auto-history: - selectValue('Менеджер', 'ООО Юг') → method='dropdown' (typeahead активен, префиксный поиск по Description находит «ООО Юг» в catalogue). - Парный 04-selectvalue/direct-form (existing): selectValue('Контрагент', 'Север') → method='form' (typeahead подавлен DontUse → форма выбора). Тест покрывает существующее ветвление selectValue по флагу choiceHistoryOnInput без engine-доработок. Истории на сервере писать заранее не нужно: typeahead использует prefix-match по Description, а не статистику истории. Полный регресс **18/18 зелёный** (8m 47.3s). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../integration/build-webtest-config.test.mjs | 6 ++++++ tests/web-test/04-selectvalue.test.mjs | 21 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/tests/skills/integration/build-webtest-config.test.mjs b/tests/skills/integration/build-webtest-config.test.mjs index 6b952ddc..9c4121d6 100644 --- a/tests/skills/integration/build-webtest-config.test.mjs +++ b/tests/skills/integration/build-webtest-config.test.mjs @@ -151,6 +151,11 @@ export const steps = [ // (для 03-fillfields/direct-edit-form). Ручной ввод запрещён, // выбор только через pick-кнопку → форма выбора. { name: 'Поставщик', type: 'CatalogRef.Контрагенты' }, + // Менеджер — ссылка с дефолтным choiceHistoryOnInput=Auto (история включена, + // для 04-selectvalue/show-all-form). После первого выбора платформа + // запоминает значение и при повторном вводе показывает dropdown + // с историей + кнопку «Показать все» → форма выбора. + { name: 'Менеджер', type: 'CatalogRef.Контрагенты' }, { name: 'Комментарий', type: 'String', length: 200 }, ], tabularSections: [{ @@ -607,6 +612,7 @@ export const steps = [ { input: 'Источник', path: 'Объект.Источник', title: 'Источник' }, // textEdit:false — ручной ввод запрещён, только pick → форма выбора { input: 'Поставщик', path: 'Объект.Поставщик', title: 'Поставщик', textEdit: false }, + { input: 'Менеджер', path: 'Объект.Менеджер', title: 'Менеджер' }, { input: 'Комментарий', path: 'Объект.Комментарий', title: 'Комментарий' }, { table: 'Товары', path: 'Объект.Товары', title: 'Товары', changeRowSet: true, columns: [ { input: 'Номенклатура', path: 'Объект.Товары.Номенклатура', title: 'Номенклатура' }, diff --git a/tests/web-test/04-selectvalue.test.mjs b/tests/web-test/04-selectvalue.test.mjs index 4dd7edce..7ac476a8 100644 --- a/tests/web-test/04-selectvalue.test.mjs +++ b/tests/web-test/04-selectvalue.test.mjs @@ -38,6 +38,27 @@ export default async function({ navigateSection, openCommand, clickElement, sele await closeForm({ save: false }); }); + await step('auto-history: choiceHistoryOnInput=Auto → method=dropdown даже на ссылке без quickChoice', async () => { + // Менеджер и Контрагент оба ссылаются на CatalogRef.Контрагенты (quickChoice=false). + // Отличие — choiceHistoryOnInput: + // Контрагент: 'DontUse' → typeahead-dropdown подавлен → selectValue идёт в form + // Менеджер: 'Auto' (дефолт) → typeahead активен → selectValue остаётся в dropdown + // Шаг подтверждает, что флаг управляет path внутри selectValue. + await navigateSection('Склад'); + await openCommand('Приходная накладная'); + await clickElement('Создать'); + + const r = await selectValue('Менеджер', 'ООО Юг'); + log(`Менеджер (Auto): method=${r.selected?.method}`); + assert.equal(r.selected?.method, 'dropdown', + 'Auto-история включена → typeahead-dropdown → method=dropdown (vs form у Контрагент)'); + + const field = findField(r, 'Менеджер'); + assert.includes(field?.value || '', 'Юг', 'значение установилось из dropdown'); + + await closeForm({ save: false }); + }); + await step('clear: selectValue с пустым search → Shift+F4', async () => { await navigateSection('Склад'); await openCommand('Приходная накладная');