mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-18 08:39:40 +03:00
refactor(web-test): унификация shape fillFields + fillTableRow (Phase 3)
Все action-функции теперь возвращают плоский form state с extras —
закрыта последняя аномалия API. Раньше:
- fillFields → {filled, form} (вложенный, документировано в SKILL.md)
- fillTableRow → 3 разных shape в 5 ветках (array | {filled, form} | {filled, notFilled, form}),
при этом документация заявляла плоский — код её игнорировал
Теперь обе функции используют returnFormState({filled, notFilled?}) — тот же
паттерн что у всех action-функций после Phase 1+2 (clickElement, selectValue,
closeForm, filterList и т.д.).
Что закрывает:
1. Тихий баг в production-клиенте C:\WS\projects\titan\tests\helpers\query.mjs
на res.filled?.find() — array-ветки fillTableRow возвращали [{...}] без .filled
→ ошибки заполнения параметров запросов молча пропускались. R1/R2-аналог.
2. Костыли r.filled || r в tests/web-test/05-table.test.mjs (2 места) —
убраны, поскольку polymorphism устранён.
3. Расхождение код ↔ документация в fillTableRow.
4. Внутренний polymorphism в row-fill.mjs: убраны два `if (Array.isArray(more))`
костыля в рекурсивных вызовах самого fillTableRow.
Файлы:
- engine/forms/fill.mjs v1.17 → v1.18 (1 ветка → returnFormState)
- engine/table/row-fill.mjs v1.17 → v1.18 (5 веток + 2 рекурсии)
- tests/web-test/05-table.test.mjs (r.filled || r → r.filled)
- .claude/skills/web-test/SKILL.md (сигнатуры fillFields/fillTableRow + общая
ремарка про плоский return shape в начале раздела Actions)
- docs/web-test-guide.md (строки fillFields/fillTableRow/navigateSection;
общая ремарка в начале раздела «Действия»)
В тестах ни один кейс не обращался к .form.X, blast radius нулевой.
Точечный регресс (03/05/06/07/10/16) и полный регресс 19/19 — зелёные.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -53,7 +53,7 @@ export default async function({ navigateSection, openCommand, clickElement, fill
|
||||
{ 'Согласовано': true },
|
||||
{ table: 'Товары', row: 1 }
|
||||
);
|
||||
log(`checkbox result: ${JSON.stringify(r.filled || r)}`);
|
||||
log(`checkbox result: ${JSON.stringify(r.filled)}`);
|
||||
const t = await readTable({ table: 'Товары' });
|
||||
log(`row 1 Согласовано='${t.rows[1]['Согласовано']}'`);
|
||||
assert.equal(t.rows[1]['Согласовано'], 'true', 'Согласовано должно стать true');
|
||||
@@ -65,7 +65,7 @@ export default async function({ navigateSection, openCommand, clickElement, fill
|
||||
{ 'Номенклатура': '' },
|
||||
{ table: 'Товары', row: 0 }
|
||||
);
|
||||
log(`clear result: ${JSON.stringify(r.filled || r)}`);
|
||||
log(`clear result: ${JSON.stringify(r.filled)}`);
|
||||
const t = await readTable({ table: 'Товары' });
|
||||
log(`row 0 Номенклатура after clear='${t.rows[0]['Номенклатура']}'`);
|
||||
assert.equal(t.rows[0]['Номенклатура'], '', 'Номенклатура должна быть очищена (Shift+F4)');
|
||||
|
||||
Reference in New Issue
Block a user