From 91b39b758b21654292d17983a2aae8fbfb1edef7 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Mon, 11 May 2026 16:30:51 +0300 Subject: [PATCH] =?UTF-8?q?test(web-test):=20M4.B+G=20=E2=80=94=20subordin?= =?UTF-8?q?ate-nav=20+=20platform=20dialogs=20=D0=B2=2012-formstate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Расширены тесты getFormState: проверка ветвей navigation[] и platformDialogs[] возвращаемой структуры. - subordinate-nav: форма элемента Контрагент → state.navigation содержит «Основное» (active) и «Контактные лица» (подчинённый каталог). - platform-dialogs: открытый через hamburger «О программе…» виден в state.platformDialogs[{type:'about'}]. - platform-dialog-close: closeForm закрывает платформенный диалог, массив становится пустым. Покрыто 3 P2-кейса coverage matrix (12-formstate/subordinate-nav, platform-dialogs, platform-dialog-close). Полный регресс 14/14 зелёный. Co-Authored-By: Claude Opus 4.7 (1M context) --- tests/web-test/12-formstate.test.mjs | 37 ++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/web-test/12-formstate.test.mjs b/tests/web-test/12-formstate.test.mjs index c73b3c00..a917ba26 100644 --- a/tests/web-test/12-formstate.test.mjs +++ b/tests/web-test/12-formstate.test.mjs @@ -68,4 +68,41 @@ export default async function({ navigateSection, openCommand, clickElement, clos assert.ok(s.tabs.length >= 2, `На форме Номенклатуры >= 2 табов (got ${s.tabs.length})`); await closeForm(); }); + + await step('subordinate-nav: форма элемента Контрагент возвращает state.navigation с КонтактнымиЛицами', async () => { + await navigateSection('Склад'); + await openCommand('Контрагенты'); + await clickElement('ООО Север', { dblclick: true }); + const s = await getFormState(); + log(`navigation: ${JSON.stringify(s.navigation)}`); + assert.ok(Array.isArray(s.navigation), 'state.navigation — массив'); + assert.ok(s.navigation.length >= 2, 'минимум Основное + один подчинённый'); + const main = s.navigation.find(n => n.active); + assert.ok(main && main.name === 'Основное', 'активная ссылка — Основное'); + const sub = s.navigation.find(n => /Контактные/.test(n.name)); + assert.ok(sub, 'есть ссылка на Контактные лица'); + await closeForm(); + }); + + await step('platform-dialogs: открытый «О программе» виден в state.platformDialogs', async () => { + const page = await getPage(); + await page.click('#captionbarMore'); + await page.waitForTimeout(800); + await page.getByText('О программе...', { exact: true }).click(); + await page.waitForTimeout(1500); + const s = await getFormState(); + log(`platformDialogs: ${JSON.stringify(s.platformDialogs)}`); + assert.ok(Array.isArray(s.platformDialogs) && s.platformDialogs.length === 1, + 'state.platformDialogs — массив с одним элементом'); + assert.equal(s.platformDialogs[0].type, 'about', 'type=about'); + assert.equal(s.platformDialogs[0].title, 'О программе', 'title'); + }); + + await step('platform-dialog-close: closeForm закрывает платформенный диалог', async () => { + // About остался открыт с предыдущего шага + await closeForm(); + const s = await getFormState(); + log(`platformDialogs after closeForm: ${s.platformDialogs?.length || 0}`); + assert.ok(!s.platformDialogs?.length, 'после closeForm нет platformDialogs'); + }); }