Files
cc-1c-skills/tests/web-test/13-misc.test.mjs
T
Nick Shirokov 96dad75b2f feat(web-test): M6-MVP follow-up — 13-misc setup + URL webtest-runner
13-misc.test.mjs: setup-шаг упрощён до `assert.ok(existsSync(epfPath))`.
EPF-сборку (epf-init → form-add → form-compile → epf-build) забрал
_hooks.mjs.prepare() — здесь только проверка артефакта с понятной
ошибкой при отсутствии: «запустите раннер с `-- --rebuild-epf`».

webtest.config.mjs: URL обоих контекстов переключён на
`/webtest-runner/ru_RU` — отдельная публикация автономного стенда,
не конфликтует с интерактивной разведкой через `/webtest` на 8081.
2026-05-12 20:25:54 +03:00

48 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export const name = 'misc: openFile EPF + security confirm';
export const tags = ['openfile'];
export const timeout = 120000;
export default async function({ openFile, closeForm, getFormState, assert, step, log }) {
const fs = await import('fs');
const path = await import('path');
const dir = 'test-tmp/13-openfile';
const buildDir = path.join(dir, 'build');
const epfPath = path.join(buildDir, 'ТестОткрытия.epf');
await step('setup: тестовый EPF должен быть собран в prepare()', async () => {
// Сборка переехала в tests/web-test/_hooks.mjs (EPF_SPEC + buildEpf).
// Если EPF отсутствует — запустить с `-- --rebuild-epf` или `-- --rebuild-stand`.
assert.ok(fs.existsSync(epfPath),
`EPF не найден: ${epfPath}. Запустите раннер с '-- --rebuild-epf' для сборки.`);
log(`EPF готов: ${epfPath} size=${fs.statSync(epfPath).size}`);
});
await step('openFile: открывает EPF с формой и текстовой декорацией (security confirm — авто)', async () => {
const beforeForm = (await getFormState()).form;
const r = await openFile(epfPath);
log(`opened: form=${r.form} activeTab=${r.activeTab} texts=${JSON.stringify(r.texts)}`);
assert.ok(r.form != null, 'state.form задан после openFile');
assert.notEqual(r.form, beforeForm, 'открыта новая форма');
assert.equal(r.activeTab, 'Тест открытия', 'заголовок формы из form-compile');
// Security confirmation modal обрабатывается внутри openFile — наружу не пробивается
assert.ok(!r.errors?.modal, 'нет оставшейся modal ошибки (security confirm обработан)');
// Декорация видна в state.texts[]
assert.ok(Array.isArray(r.texts) && r.texts.length >= 1, 'state.texts содержит декорации');
const decor = r.texts.find(t => t.name === 'Заголовок');
assert.ok(decor, 'декорация «Заголовок» присутствует в texts[]');
assert.equal(decor.value, 'Это тестовая обработка для проверки openFile', 'текст декорации');
// attempt=1 → security confirm не понадобился ИЛИ обработан с первой попытки
assert.ok(r.opened?.attempt >= 1, 'opened.attempt задан');
});
await step('cleanup: закрываем форму обработки', async () => {
await closeForm();
const s = await getFormState();
log(`after cleanup: form=${s.form} formCount=${s.formCount} activeTab=${s.activeTab}`);
// Проверяем что наша EPF-форма точно закрылась. Между тестами в desktop
// могут оставаться формы от других тестов — это не наш регресс.
assert.notEqual(s.activeTab, 'Тест открытия', 'форма обработки ТестОткрытия закрыта');
});
}