From 1ff209849ffda88b3cfdb1fdf097eaa75dd64c80 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Fri, 1 May 2026 14:36:13 +0300 Subject: [PATCH] =?UTF-8?q?feat(web-test):=20=D0=BF=D0=B5=D1=80=D0=B2?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81=D1=82=D1=83=D1=80=20(M1=20Step=205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Покрытие matrix #9 — данные для smoke-тестов: - Константа ДанныеЗаполнены (Boolean) — флаг идемпотентности - ОбщиеФункции.ЗаполнитьФикстурыЕслиНужно() — транзакционно создаёт: * 4 контрагента (ООО Север/Юг/Восток, АО Запад) * 25 номенклатуры в группах Товары (15) и Услуги (10) * 3 приходных накладных по 3 строки - Ext/ManagedApplicationModule.bsl с ПриНачалеРаботыСистемы — вызывает заполнение при первом старте тонкого клиента Платформенная верификация компилирует BSL (43 шага, 23.7s). Реальное выполнение заполнения произойдёт при первом подключении web-test runner-а к синтетической базе. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../integration/build-webtest-config.test.mjs | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) diff --git a/tests/skills/integration/build-webtest-config.test.mjs b/tests/skills/integration/build-webtest-config.test.mjs index 1dfabc70..1b8b3b45 100644 --- a/tests/skills/integration/build-webtest-config.test.mjs +++ b/tests/skills/integration/build-webtest-config.test.mjs @@ -159,6 +159,18 @@ export const steps = [ validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Constants/ОсновнаяВалюта' }, }, + // Константа ДанныеЗаполнены — флаг первоначального заполнения фикстур + { + name: 'meta-compile: Константа ДанныеЗаполнены', + script: 'meta-compile/scripts/meta-compile', + input: { + type: 'Constant', name: 'ДанныеЗаполнены', + valueType: 'Boolean', + }, + args: { '-JsonPath': '{inputFile}', '-OutputDir': '{workDir}' }, + validate: { script: 'meta-validate/scripts/meta-validate', flag: '-ObjectPath', path: 'Constants/ДанныеЗаполнены' }, + }, + // Общий модуль ОбщиеФункции { name: 'meta-compile: Общий модуль ОбщиеФункции', @@ -180,6 +192,104 @@ export const steps = [ Процедура ВызватьТестовоеИсключение() Экспорт \tВызватьИсключение "Тестовое исключение"; КонецПроцедуры + +Процедура ЗаполнитьФикстурыЕслиНужно() Экспорт +\tЕсли Константы.ДанныеЗаполнены.Получить() Тогда +\t\tВозврат; +\tКонецЕсли; +\tНачатьТранзакцию(); +\tПопытка +\t\tЗаполнитьКонтрагентов(); +\t\tЗаполнитьНоменклатуру(); +\t\tЗаполнитьДокументы(); +\t\tКонстанты.ДанныеЗаполнены.Установить(Истина); +\t\tЗафиксироватьТранзакцию(); +\tИсключение +\t\tОтменитьТранзакцию(); +\t\tВызватьИсключение; +\tКонецПопытки; +КонецПроцедуры + +Процедура ЗаполнитьКонтрагентов() +\tСписок = Новый Массив; +\tСписок.Добавить(Новый Структура("Имя,ИНН", "ООО Север", "7700000001")); +\tСписок.Добавить(Новый Структура("Имя,ИНН", "ООО Юг", "7700000002")); +\tСписок.Добавить(Новый Структура("Имя,ИНН", "ООО Восток", "7700000003")); +\tСписок.Добавить(Новый Структура("Имя,ИНН", "АО Запад", "7700000004")); +\tДля Каждого Запись Из Список Цикл +\t\tЭлемент = Справочники.Контрагенты.СоздатьЭлемент(); +\t\tЭлемент.Наименование = Запись.Имя; +\t\tЭлемент.ИНН = Запись.ИНН; +\t\tЭлемент.Записать(); +\tКонецЦикла; +КонецПроцедуры + +Процедура ЗаполнитьНоменклатуру() +\tГруппаТовары = СоздатьГруппуНоменклатуры("Товары"); +\tГруппаУслуги = СоздатьГруппуНоменклатуры("Услуги"); +\tДля Сч = 1 По 15 Цикл +\t\tЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); +\t\tЭлемент.Родитель = ГруппаТовары; +\t\tЭлемент.Наименование = "Товар " + Формат(Сч, "ЧЦ=2; ЧВН="); +\t\tЭлемент.Артикул = "T" + Формат(Сч, "ЧЦ=4; ЧВН="); +\t\tЭлемент.Цена = 100 * Сч; +\t\tЭлемент.Активен = Истина; +\t\tЭлемент.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар; +\t\tЭлемент.Записать(); +\tКонецЦикла; +\tДля Сч = 1 По 10 Цикл +\t\tЭлемент = Справочники.Номенклатура.СоздатьЭлемент(); +\t\tЭлемент.Родитель = ГруппаУслуги; +\t\tЭлемент.Наименование = "Услуга " + Формат(Сч, "ЧЦ=2; ЧВН="); +\t\tЭлемент.Артикул = "U" + Формат(Сч, "ЧЦ=4; ЧВН="); +\t\tЭлемент.Цена = 500 * Сч; +\t\tЭлемент.Активен = Истина; +\t\tЭлемент.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга; +\t\tЭлемент.Записать(); +\tКонецЦикла; +КонецПроцедуры + +Функция СоздатьГруппуНоменклатуры(Имя) +\tГруппа = Справочники.Номенклатура.СоздатьГруппу(); +\tГруппа.Наименование = Имя; +\tГруппа.Записать(); +\tВозврат Группа.Ссылка; +КонецФункции + +Процедура ЗаполнитьДокументы() +\tЗапросК = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 5 Контрагенты.Ссылка КАК Контрагент ИЗ Справочник.Контрагенты КАК Контрагенты"); +\tКонтрагенты = ЗапросК.Выполнить().Выгрузить().ВыгрузитьКолонку("Контрагент"); +\tЗапросН = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 10 Номенклатура.Ссылка КАК Номенклатура ИЗ Справочник.Номенклатура КАК Номенклатура ГДЕ НЕ Номенклатура.ЭтоГруппа"); +\tНоменклатура = ЗапросН.Выполнить().Выгрузить().ВыгрузитьКолонку("Номенклатура"); +\tЕсли Контрагенты.Количество() = 0 Или Номенклатура.Количество() = 0 Тогда +\t\tВозврат; +\tКонецЕсли; +\tДля Сч = 1 По 3 Цикл +\t\tДок = Документы.ПриходнаяНакладная.СоздатьДокумент(); +\t\tДок.Дата = ТекущаяДата(); +\t\tДок.Контрагент = Контрагенты[(Сч - 1) % Контрагенты.Количество()]; +\t\tДок.Склад = "Основной"; +\t\tДля Поз = 1 По 3 Цикл +\t\t\tСтрока = Док.Товары.Добавить(); +\t\t\tСтрока.Номенклатура = Номенклатура[(Сч * Поз) % Номенклатура.Количество()]; +\t\t\tСтрока.Количество = Поз * 10; +\t\t\tСтрока.Цена = Поз * 100; +\t\t\tСтрока.Сумма = Строка.Количество * Строка.Цена; +\t\tКонецЦикла; +\t\tДок.Записать(РежимЗаписиДокумента.Запись); +\tКонецЦикла; +КонецПроцедуры +`, + }, + + // ManagedApplicationModule — вызывает заполнение фикстур при первом запуске + { + name: 'writeFile: ManagedApplicationModule.bsl', + writeFile: 'Ext/ManagedApplicationModule.bsl', + content: `&НаКлиенте +Процедура ПриНачалеРаботыСистемы() +\tОбщиеФункции.ЗаполнитьФикстурыЕслиНужно(); +КонецПроцедуры `, },