From 07753921beb073ce332c45475cbd952e746bc6b5 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 2 May 2026 19:49:19 +0300 Subject: [PATCH] =?UTF-8?q?test(05-table):=20smoke=20add/edit/delete=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=87=D0=BD?= =?UTF-8?q?=D0=BE=D0=B9=20=D1=87=D0=B0=D1=81=D1=82=D0=B8=20=D0=BD=D0=B0?= =?UTF-8?q?=D0=BA=D0=BB=D0=B0=D0=B4=D0=BD=D0=BE=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Покрывает работу с табличной частью Товары документа Приходная накладная: - fillTableRow с add:true добавляет строки последовательно - fillTableRow с row:N редактирует существующую строку (Tab-навигация) - deleteTableRow удаляет строку по индексу Закрытие формы без сохранения (save:false) — соответствует новой семантике после фикса form-compile (SavedData). --- tests/web-test/05-table.test.mjs | 47 ++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/web-test/05-table.test.mjs diff --git a/tests/web-test/05-table.test.mjs b/tests/web-test/05-table.test.mjs new file mode 100644 index 00000000..68651924 --- /dev/null +++ b/tests/web-test/05-table.test.mjs @@ -0,0 +1,47 @@ +export const name = 'Табличная часть: add, edit, delete на Товары накладной'; +export const tags = ['table', 'smoke']; +export const timeout = 90000; + +export default async function({ navigateSection, openCommand, clickElement, fillFields, fillTableRow, deleteTableRow, readTable, closeForm, getFormState, assert, step, log }) { + + await step('add: добавить две строки в Товары через fillTableRow add:true', async () => { + await navigateSection('Склад'); + await openCommand('Приходная накладная'); + await clickElement('Создать'); + await fillFields({ 'Контрагент': 'ООО Север' }); + + await fillTableRow( + { 'Номенклатура': 'Товар 01', 'Количество': '5', 'Цена': '100' }, + { table: 'Товары', add: true } + ); + await fillTableRow( + { 'Номенклатура': 'Товар 02', 'Количество': '3', 'Цена': '200' }, + { table: 'Товары', add: true } + ); + + const t = await readTable({ table: 'Товары' }); + log(`rows after add: ${t.rows?.length}`); + assert.equal(t.rows?.length, 2, 'Должно быть 2 строки'); + assert.equal(t.rows[0]['Номенклатура'], 'Товар 01', 'Строка 0 = Товар 01'); + assert.equal(t.rows[1]['Номенклатура'], 'Товар 02', 'Строка 1 = Товар 02'); + }); + + await step('edit: изменить количество в строке 0 через fillTableRow row:0', async () => { + await fillTableRow( + { 'Количество': '10' }, + { table: 'Товары', row: 0 } + ); + const t = await readTable({ table: 'Товары' }); + log(`row 0 after edit: ${JSON.stringify(t.rows[0])}`); + assert.equal(t.rows[0]['Количество'], '10,000', 'Количество строки 0 = 10'); + }); + + await step('delete: удалить первую строку', async () => { + await deleteTableRow(0, { table: 'Товары' }); + const t = await readTable({ table: 'Товары' }); + log(`rows after delete: ${t.rows?.length}, [0]=${t.rows[0]?.['Номенклатура']}`); + assert.equal(t.rows?.length, 1, 'Должна остаться 1 строка'); + assert.equal(t.rows[0]['Номенклатура'], 'Товар 02', 'Осталась строка Товар 02'); + await closeForm({ save: false }); + }); +}