Files
cc-1c-skills/tests/skills/integration/build-epf.test.mjs
T
Nick Shirokov 0778cc89ee feat: post-run validation + integration tests for skill pipeline
- runner.mjs v0.4: --with-validation flag runs validators on real output
- postValidate config in 20 _skill.json files (maps skill → validator)
- validatePath in ~100 positive test cases
- skipValidation for 5 cross-reference cases (isolated workspace limitation)
- Integration tests: build-config (19 steps), build-epf (6), build-cfe (4)
- base-config cache from build-config for downstream tests
- Fix chart-of-calculation-types test data (DependenceOnCalculationTypes)
- 285/285 unit + 3/3 integration, all green with validation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 17:30:03 +03:00

109 lines
3.8 KiB
JavaScript

// build-epf.test.mjs — Integration test: build an external data processor (EPF) from scratch
// Steps: epf-init → epf-add-form → form-compile → template-add → mxl-compile → epf-validate
export const name = 'Сборка внешней обработки с нуля';
export const setup = 'none';
export const steps = [
// ── 1. Init empty EPF ──
{
name: 'epf-init: пустая обработка ТестоваяОбработка',
script: 'epf-init/scripts/init',
args: { '-Name': 'ТестоваяОбработка', '-SrcDir': '{workDir}' },
validate: { script: 'epf-validate/scripts/epf-validate', flag: '-ObjectPath', path: 'ТестоваяОбработка' },
},
// ── 2. Add form ──
{
name: 'epf-add-form: Форма к ТестоваяОбработка',
script: 'epf-add-form/scripts/add-form',
args: { '-ProcessorName': 'ТестоваяОбработка', '-FormName': 'Форма', '-SrcDir': '{workDir}' },
validate: { script: 'epf-validate/scripts/epf-validate', flag: '-ObjectPath', path: 'ТестоваяОбработка' },
},
// ── 3. Compile form ──
{
name: 'form-compile: Форма с заголовком и полями ввода',
script: 'form-compile/scripts/form-compile',
input: {
title: 'Тестовая обработка',
attributes: [
{ name: 'Объект', type: 'FormDataStructure', main: true },
{ name: 'Наименование', type: 'String' },
{ name: 'Количество', type: 'Number' },
],
elements: [
{ input: 'Наименование', path: 'Наименование', title: 'Наименование' },
{ input: 'Количество', path: 'Количество', title: 'Количество' },
],
},
args: {
'-JsonPath': '{inputFile}',
'-OutputPath': '{workDir}/ТестоваяОбработка/Forms/Форма/Ext/Form.xml',
},
validate: {
script: 'form-validate/scripts/form-validate',
flag: '-FormPath',
path: 'ТестоваяОбработка/Forms/Форма/Ext/Form.xml',
},
},
// ── 4. Add spreadsheet template ──
{
name: 'template-add: Макет к ТестоваяОбработка',
script: 'template-add/scripts/add-template',
args: {
'-ObjectName': 'ТестоваяОбработка',
'-TemplateName': 'Макет',
'-TemplateType': 'SpreadsheetDocument',
'-SrcDir': '{workDir}',
},
},
// ── 5. Compile MXL template ──
{
name: 'mxl-compile: простой макет с двумя областями',
script: 'mxl-compile/scripts/mxl-compile',
input: {
columns: 3,
defaultWidth: 40,
areas: [
{
name: 'Шапка',
rows: [
{ cells: [
{ col: 1, span: 3, text: 'Заголовок документа' },
]},
],
},
{
name: 'Строка',
rows: [
{ cells: [
{ col: 1, param: 'НомерСтроки' },
{ col: 2, param: 'Наименование' },
{ col: 3, param: 'Сумма' },
]},
],
},
],
},
args: {
'-JsonPath': '{inputFile}',
'-OutputPath': '{workDir}/ТестоваяОбработка/Templates/Макет/Ext/Template.xml',
},
validate: {
script: 'mxl-validate/scripts/mxl-validate',
flag: '-TemplatePath',
path: 'ТестоваяОбработка/Templates/Макет/Ext/Template.xml',
},
},
// ── 6. Final validation ──
{
name: 'epf-validate: Финальная валидация обработки',
script: 'epf-validate/scripts/epf-validate',
args: { '-ObjectPath': '{workDir}/ТестоваяОбработка' },
},
];