mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-06-11 08:24:57 +03:00
f257bb428c
modal: F4 на ref-поле открывает модальную форму выбора Контрагентов, state.modal=true, formCount=2. tabs: форма элемента Номенклатуры с двумя табами (Основное/Дополнительно) возвращает state.tabs[]. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
72 lines
3.9 KiB
JavaScript
72 lines
3.9 KiB
JavaScript
export const name = 'getFormState: базовая структура — fields, buttons, tables, openForms';
|
||
export const tags = ['formstate', 'smoke'];
|
||
export const timeout = 60000;
|
||
|
||
export default async function({ navigateSection, openCommand, clickElement, closeForm, getFormState, getPage, assert, step, log }) {
|
||
|
||
await step('basic: getFormState на форме списка возвращает таблицу и команды', async () => {
|
||
await navigateSection('Склад');
|
||
const s = await openCommand('Контрагенты');
|
||
log(`form=${s.form} formCount=${s.formCount} tables=${s.tables?.length} buttons=${s.buttons?.length}`);
|
||
assert.ok(s.form != null, 'state.form задан');
|
||
assert.equal(s.formCount, 1, 'Открыта одна форма');
|
||
assert.ok(Array.isArray(s.openForms) && s.openForms.length === 1, 'openForms — массив с одной записью');
|
||
assert.ok(s.tables?.length >= 1, 'На форме списка есть таблица');
|
||
assert.ok(s.tables[0].columns?.length >= 2, 'У таблицы есть колонки');
|
||
assert.ok(s.buttons?.length >= 1, 'На форме есть кнопки');
|
||
await closeForm();
|
||
});
|
||
|
||
await step('basic: getFormState на форме элемента возвращает fields с label и value', async () => {
|
||
await navigateSection('Склад');
|
||
await openCommand('Контрагенты');
|
||
await clickElement('ООО Север', { dblclick: true });
|
||
const s = await getFormState();
|
||
log(`fields count=${s.fields?.length}`);
|
||
assert.ok(s.fields?.length >= 1, 'На форме элемента есть поля');
|
||
const named = s.fields.find(f => f.name === 'Наименование');
|
||
log(`Наименование: label='${named?.label}' value='${named?.value}'`);
|
||
assert.ok(named, 'Должно быть поле Наименование');
|
||
assert.equal(named.value, 'ООО Север', 'value поля Наименование');
|
||
assert.ok(named.label, 'У поля есть label');
|
||
await closeForm();
|
||
});
|
||
|
||
await step('modal: форма выбора Контрагентов открыта как модальная', async () => {
|
||
await navigateSection('Склад');
|
||
await openCommand('Приходная накладная');
|
||
await clickElement('Создать');
|
||
const page = await getPage();
|
||
// Найти input Контрагент и фокус, затем F4 → откроется модальная форма выбора
|
||
const focused = await page.evaluate(`(() => {
|
||
const inputs = [...document.querySelectorAll('input')];
|
||
const target = inputs.find(i => /Контрагент/i.test(i.id || '') && i.offsetWidth > 0);
|
||
if (target) { target.focus(); return target.id; }
|
||
return null;
|
||
})()`);
|
||
log(`focused input id=${focused}`);
|
||
await page.keyboard.press('F4');
|
||
await page.waitForTimeout(1500);
|
||
|
||
const s = await getFormState();
|
||
log(`after F4: form=${s.form} formCount=${s.formCount} modal=${s.modal}`);
|
||
assert.equal(s.modal, true, 'state.modal=true для модальной формы выбора');
|
||
assert.ok(s.formCount >= 2, 'formCount >= 2 (родитель + модальная)');
|
||
|
||
await closeForm();
|
||
await closeForm({ save: false });
|
||
});
|
||
|
||
await step('tabs: на форме элемента Номенклатуры присутствует tabs[]', async () => {
|
||
await navigateSection('Склад');
|
||
await openCommand('Номенклатура');
|
||
await clickElement('Товары', { dblclick: true });
|
||
await clickElement('Товар 01', { dblclick: true });
|
||
const s = await getFormState();
|
||
log(`tabs: ${JSON.stringify(s.tabs)}`);
|
||
assert.ok(Array.isArray(s.tabs), 'state.tabs должен быть массивом');
|
||
assert.ok(s.tabs.length >= 2, `На форме Номенклатуры >= 2 табов (got ${s.tabs.length})`);
|
||
await closeForm();
|
||
});
|
||
}
|