fix(web-test): числовое поле с калькулятором (iCalcB) заполнять paste, не selectValue

fillFields классифицировал поля по кнопкам: _DLB → ссылка, _CB → pick (если
класс iCalendB → дата). Числовое поле формы (напр. «Цена») имеет _CB с классом
iCalcB (калькулятор) и isDate=false, поэтому уходило в ветку selectValue, которая
ждёт форму выбора → детерминированный фейл "DLB click did not open a popup or
selection form". Калькулятор формой выбора не является.

- dom/forms.mjs: распознаём iCalcB → флаг isCalc (по аналогии с isDate/iCalendB),
  пробрасываем его в resolveFieldsScript.
- engine/forms/fill.mjs: ветку paste расширяем на hasPick && (isDate || isCalc) —
  калькулятор заполняем через Ctrl+A + paste + Tab, как календарь. Ссылочный
  fallback (hasPick без даты/калькулятора) не тронут.

Пробел покрытия: «Цена» в наборе заполнялась только через fillTableRow (Tab-путь),
а fillFields-ветка калькулятора не гонялась. Добавлен 'Цена' в 03-fillfields.test
с assert method=paste и значением 777,00. E2E: тест 03 зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-31 15:08:14 +03:00
parent 0dde66e2eb
commit ebdd596d4f
3 changed files with 12 additions and 5 deletions
+5 -1
View File
@@ -15,7 +15,8 @@ export default async function({ navigateSection, openCommand, clickElement, fill
const result = await fillFields({
'Артикул': 'TEST-001',
'Активен': false, // Boolean → CheckBoxField, toggle
'ДатаПоступления': '15.05.2026', // date
'ДатаПоступления': '15.05.2026', // date → CB iCalendB calendar, paste
'Цена': '777', // Number → CB iCalcB calculator, paste
'ВидНоменклатуры': 'Услуга', // EnumRef dropdown
});
@@ -23,11 +24,14 @@ export default async function({ navigateSection, openCommand, clickElement, fill
for (const f of result.filled) {
assert.ok(f.ok, `fillField "${f.field}" должен вернуть ok=true`);
}
assert.equal(result.filled.find(f => f.field === 'Цена')?.method, 'paste',
'Цена через paste (калькулятор ≠ форма выбора)');
const state = await getFormState();
assert.equal(findField(state, 'Артикул')?.value, 'TEST-001', 'Артикул text');
assert.equal(findField(state, 'Активен')?.value, false, 'Активен checkbox=false');
assert.equal(findField(state, 'ДатаПоступления')?.value, '15.05.2026', 'ДатаПоступления');
assert.equal(findField(state, 'Цена')?.value, '777,00', 'Цена записалась (1С форматирует → 777,00)');
assert.equal(findField(state, 'ВидНоменклатуры')?.value, 'Услуга', 'ВидНоменклатуры dropdown');
await closeForm({ save: false });