From 62e864e474ff65ee39d666baf166d9110a1eb42e Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Tue, 12 May 2026 16:11:46 +0300 Subject: [PATCH] =?UTF-8?q?feat(web-test):=20M5-pre=20#3=20=E2=80=94=20tex?= =?UTF-8?q?tEdit:false=20=D0=BF=D0=BE=D0=BB=D0=B5=20+=2003-fillfields/dire?= =?UTF-8?q?ct-edit-form?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Расширение синтетики: реквизит Поставщик типа CatalogRef.Контрагенты добавлен в шапку ПриходнаяНакладная. Элемент формы Поставщик скомпилирован с textEdit:false (новый DSL ключ form-compile v1.21 из коммита 32bf9c1): ручной ввод запрещён, селект-кнопки нет, выбор только через форму выбора по pick-кнопке. Новый шаг 03-fillfields/direct-edit-form (~7s) — fillFields на Поставщик ('ООО Юг') возвращает method:'form', минуя обычные paste/typeahead/dropdown ветки. fillFields внутренне детектит textEdit:false и сразу идёт через форму выбора (selectValue path). Полный регресс **18/18 зелёный** (8m 40.6s). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../integration/build-webtest-config.test.mjs | 6 ++++++ tests/web-test/03-fillfields.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 f3837a2b..6b952ddc 100644 --- a/tests/skills/integration/build-webtest-config.test.mjs +++ b/tests/skills/integration/build-webtest-config.test.mjs @@ -147,6 +147,10 @@ export const steps = [ // Источник — составной тип (для 03-fillfields/composite). // Платформа покажет селектор типа в UI перед выбором значения. { name: 'Источник', type: 'CatalogRef.Контрагенты + CatalogRef.Номенклатура + CatalogRef.Организации' }, + // Поставщик — обычная ссылка, но на форме элемент с textEdit:false + // (для 03-fillfields/direct-edit-form). Ручной ввод запрещён, + // выбор только через pick-кнопку → форма выбора. + { name: 'Поставщик', type: 'CatalogRef.Контрагенты' }, { name: 'Комментарий', type: 'String', length: 200 }, ], tabularSections: [{ @@ -601,6 +605,8 @@ export const steps = [ { input: 'Контрагент', path: 'Объект.Контрагент', title: 'Контрагент' }, { input: 'Склад', path: 'Объект.Склад', title: 'Склад' }, { input: 'Источник', path: 'Объект.Источник', title: 'Источник' }, + // textEdit:false — ручной ввод запрещён, только pick → форма выбора + { input: 'Поставщик', path: 'Объект.Поставщик', title: 'Поставщик', textEdit: false }, { input: 'Комментарий', path: 'Объект.Комментарий', title: 'Комментарий' }, { table: 'Товары', path: 'Объект.Товары', title: 'Товары', changeRowSet: true, columns: [ { input: 'Номенклатура', path: 'Объект.Товары.Номенклатура', title: 'Номенклатура' }, diff --git a/tests/web-test/03-fillfields.test.mjs b/tests/web-test/03-fillfields.test.mjs index 39b4f47e..119d7cca 100644 --- a/tests/web-test/03-fillfields.test.mjs +++ b/tests/web-test/03-fillfields.test.mjs @@ -154,4 +154,25 @@ export default async function({ navigateSection, openCommand, clickElement, fill await closeForm({ save: false }); }); + + await step('direct-edit-form: textEdit:false → fillFields method=form', async () => { + // ПриходнаяНакладная.Поставщик — обычный CatalogRef.Контрагенты, но + // элемент формы с textEdit:false: ручной ввод запрещён, выбор только + // через форму выбора (не через paste/typeahead/dropdown). + await navigateSection('Склад'); + await openCommand('Приходная накладная'); + await clickElement('Создать'); + + const r = await fillFields({ 'Поставщик': 'ООО Юг' }); + log('Поставщик method=' + r.filled[0]?.method); + assert.equal(r.filled[0]?.ok, true, 'Поставщик заполнен'); + assert.equal(r.filled[0]?.method, 'form', + 'textEdit:false принуждает к method=form (минуя paste/typeahead/dropdown)'); + + const state = await getFormState(); + const p = state.fields?.find(f => f.name === 'Поставщик'); + assert.equal(p?.value, 'ООО Юг', 'значение Поставщик установилось'); + + await closeForm({ save: false }); + }); }