From 44521c5c16a4ce00bd668073ec49893d2fb861cb Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Thu, 28 May 2026 21:42:31 +0300 Subject: [PATCH] =?UTF-8?q?test(web-test):=20=D1=80=D0=B0=D1=81=D1=88?= =?UTF-8?q?=D0=B8=D1=80=D0=B8=D1=82=D1=8C=20=D1=81=D0=B8=D0=BD=D1=82=D0=B5?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B9=20=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BD=D0=B4=20=D0=BF=D0=BE=D0=B4=20cell-click=20=D1=81?= =?UTF-8?q?=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Готовит почву под полноценные тесты clickElement({row,column}) на гридах формы и virtualization-сценарии: ТЧ Товары документа ПриходнаяНакладная — было 6 колонок, стало 18: - Единица, Скидка, СтавкаНДС, СуммаСНДС — для ширины и mix типов - кластер 3 boolean (ВРезерве, НаКомиссии, Подарок) подряд — для теста что focus-click при horizontal scroll умеет пропускать checkbox edge - Серия, НомерГТД, СтранаПроисхождения, СрокГодности — text/date - ПризнакКонтроля (boolean) последней колонкой — отдельный edge-case Новый enum СтавкиНДС (БезНДС, НДС0, НДС10, НДС20) — реалистичный тип для СтавкаНДС, чтобы не переиспользовать КатегорииЦен (не по смыслу). Документ LongDoc с 30 строками в ТЧ — для тестов reveal-loop через scroll: true, когда строка вне DOM-окна виртуализированного грида. Идентифицируется через Комментарий='LongDoc'. Колонка Комментарий в форме списка ПриходнаяНакладная — чтобы можно было искать LongDoc через filterList. Существующее покрытие 05-table сохранено: добавление колонок аддитивно, ранее проверенные ассерты не затронуты. Co-Authored-By: Claude Opus 4.7 --- .../integration/build-webtest-config.test.mjs | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/tests/skills/integration/build-webtest-config.test.mjs b/tests/skills/integration/build-webtest-config.test.mjs index 9c4121d6..9e85cabd 100644 --- a/tests/skills/integration/build-webtest-config.test.mjs +++ b/tests/skills/integration/build-webtest-config.test.mjs @@ -132,6 +132,18 @@ export const steps = [ validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Enums/СпособыУчёта' }, }, + // Перечисление СтавкиНДС — для реквизита СтавкаНДС в ТЧ Товары (18-cell-click) + { + name: 'meta-compile: Перечисление СтавкиНДС', + script: 'meta-compile/scripts/meta-compile', + input: { + type: 'Enum', name: 'СтавкиНДС', + values: ['БезНДС', 'НДС0', 'НДС10', 'НДС20'], + }, + args: { '-JsonPath': '{inputFile}', '-OutputDir': '{workDir}' }, + validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Enums/СтавкиНДС' }, + }, + // Документ ПриходнаяНакладная — шапка + ТЧ { name: 'meta-compile: Документ ПриходнаяНакладная', @@ -160,6 +172,11 @@ export const steps = [ ], tabularSections: [{ name: 'Товары', + // Существующие 6 реквизитов оставлены в начале (05-table / 06-document + // полагаются на их позицию). Ниже добавлены ~12 новых для тестов + // 18-cell-click: ширина для horizontal scroll, кластер из 3 boolean + // подряд и финальный boolean в конце — для проверки что focus-click + // умеет пропускать checkbox-ячейки при выборе edge-cell. attributes: [ { name: 'Номенклатура', type: 'CatalogRef.Номенклатура' }, { name: 'Количество', type: 'Number', length: 15, precision: 3 }, @@ -168,6 +185,22 @@ export const steps = [ { name: 'Согласовано', type: 'Boolean' }, // Источник — составной тип в ТЧ (для edit-dblclick через выбор типа) { name: 'Источник', type: 'CatalogRef.Контрагенты + CatalogRef.Номенклатура + CatalogRef.Организации' }, + // Дополнительные колонки для ширины и для тестов 18-cell-click + { name: 'Единица', type: 'String', length: 10 }, + { name: 'Скидка', type: 'Number', length: 10, precision: 2 }, + { name: 'СтавкаНДС', type: 'EnumRef.СтавкиНДС' }, + { name: 'СуммаСНДС', type: 'Number', length: 15, precision: 2 }, + // Кластер из 3 boolean подряд — при определённом скролле они окажутся + // на правом краю viewport и фокус-клик должен их пропустить. + { name: 'ВРезерве', type: 'Boolean' }, + { name: 'НаКомиссии', type: 'Boolean' }, + { name: 'Подарок', type: 'Boolean' }, + { name: 'Серия', type: 'String', length: 25 }, + { name: 'НомерГТД', type: 'String', length: 25 }, + { name: 'СтранаПроисхождения', type: 'String', length: 50 }, + { name: 'СрокГодности', type: 'Date' }, + // Последняя колонка — тоже boolean (edge-case: краевая = checkbox). + { name: 'ПризнакКонтроля', type: 'Boolean' }, ], }], }, @@ -346,6 +379,22 @@ export const steps = [ \t\tКонецЦикла; \t\tДок.Записать(РежимЗаписиДокумента.Запись); \tКонецЦикла; +\t// Длинный документ — 30 строк для тестов виртуализации / reveal-loop (18-cell-click). +\t// Комментарий "LongDoc" — селектор для тестов, чтобы найти именно этот документ. +\tДокДлинный = Документы.ПриходнаяНакладная.СоздатьДокумент(); +\tДокДлинный.Дата = ТекущаяДата(); +\tДокДлинный.Организация = Организация; +\tДокДлинный.Контрагент = Контрагенты[0]; +\tДокДлинный.Склад = "Основной"; +\tДокДлинный.Комментарий = "LongDoc"; +\tДля Поз = 1 По 30 Цикл +\t\tСтрока = ДокДлинный.Товары.Добавить(); +\t\tСтрока.Номенклатура = Номенклатура[Поз % Номенклатура.Количество()]; +\t\tСтрока.Количество = Поз; +\t\tСтрока.Цена = 50; +\t\tСтрока.Сумма = Строка.Количество * Строка.Цена; +\tКонецЦикла; +\tДокДлинный.Записать(РежимЗаписиДокумента.Запись); КонецПроцедуры `, }, @@ -624,6 +673,20 @@ export const steps = [ // companion-имена дублируются в одной форме. form-compile использует // имя элемента, не путь, для генерации companion-имён. { input: 'ИсточникТЧ', path: 'Объект.Товары.Источник', title: 'Источник' }, + // Дополнительные колонки — для тестов 18-cell-click (ширина для horizontal + // scroll + кластер boolean + последняя колонка boolean). + { input: 'Единица', path: 'Объект.Товары.Единица', title: 'Единица' }, + { input: 'Скидка', path: 'Объект.Товары.Скидка', title: 'Скидка' }, + { input: 'СтавкаНДС', path: 'Объект.Товары.СтавкаНДС', title: 'Ставка НДС' }, + { input: 'СуммаСНДС', path: 'Объект.Товары.СуммаСНДС', title: 'Сумма с НДС' }, + { check: 'ВРезерве', path: 'Объект.Товары.ВРезерве', title: 'В резерве' }, + { check: 'НаКомиссии', path: 'Объект.Товары.НаКомиссии', title: 'На комиссии' }, + { check: 'Подарок', path: 'Объект.Товары.Подарок', title: 'Подарок' }, + { input: 'Серия', path: 'Объект.Товары.Серия', title: 'Серия' }, + { input: 'НомерГТД', path: 'Объект.Товары.НомерГТД', title: 'Номер ГТД' }, + { input: 'СтранаПроисхождения', path: 'Объект.Товары.СтранаПроисхождения', title: 'Страна происхождения' }, + { input: 'СрокГодности', path: 'Объект.Товары.СрокГодности', title: 'Срок годности' }, + { check: 'ПризнакКонтроля', path: 'Объект.Товары.ПризнакКонтроля', title: 'Признак контроля' }, ]}, ], }, @@ -651,6 +714,9 @@ export const steps = [ { input: 'Date', path: 'Список.Date', title: 'Дата' }, { input: 'Number', path: 'Список.Number', title: 'Номер' }, { input: 'Контрагент', path: 'Список.Контрагент', title: 'Контрагент' }, + // Комментарий — для тестов 18-cell-click: поиск длинного документа + // через filterList по значению 'LongDoc'. + { input: 'Комментарий', path: 'Список.Комментарий', title: 'Комментарий' }, { input: 'Posted', path: 'Список.Posted', title: 'Проведён' }, ]}, ],