From eafc8c15fc747df6bddf65792f04c70a3231cf50 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 12:10:18 +0500 Subject: [PATCH] =?UTF-8?q?test(uat):=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=80=D0=B8=D1=82=D1=8C=20per-control=20=D0=BD=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=85=D0=BE=D0=B4=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F/=D1=81=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F/?= =?UTF-8?q?=D0=B8=D0=BD=D0=B2=D0=B5=D0=BD=D1=82=D0=B0=D1=80=D0=B8=D0=B7?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B8/=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D1=8B/=D0=B4=D0=B2=D0=B8=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 21/21 ✓: Товары (поиск/сброс/сорт/пагинация/экспорт), Приёмки (поиск/фильтр оплаты/ сорт/экспорт + жизненный цикл провести→снять→удалить), Продажи (поиск/сорт), Движения (store-фильтр), Контрагенты (поиск), Оприходования/Списания/Инвентаризации/ Возвраты поставщику (поиск). Семантику параметр→строки держит filters-sweep. Co-Authored-By: Claude Opus 5.5 --- .../scenarios/stage-ui-uat-controls.spec.ts | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/e2e/scenarios/stage-ui-uat-controls.spec.ts b/tests/e2e/scenarios/stage-ui-uat-controls.spec.ts index f104ef8..cfd13bf 100644 --- a/tests/e2e/scenarios/stage-ui-uat-controls.spec.ts +++ b/tests/e2e/scenarios/stage-ui-uat-controls.spec.ts @@ -27,7 +27,9 @@ test.describe('UAT per-control (browser)', () => { return (pred ? items.find(pred) : items[0]).id as string } const unitId = await first('/api/catalog/units-of-measure?pageSize=50') - const storeId = await first('/api/catalog/stores?pageSize=50') + const storesList = (await (await ctx.get('/api/catalog/stores?pageSize=50')).json()).items as { id: string; name: string }[] + const storeId = storesList[0].id + const storeName = storesList[0].name const currencyId = await first('/api/catalog/currencies?pageSize=50', (c: any) => c.code === 'KZT') const priceTypeId = await first('/api/catalog/price-types?pageSize=50') const groupId = await first('/api/catalog/product-groups?pageSize=50') @@ -181,6 +183,31 @@ test.describe('UAT per-control (browser)', () => { await check('Контрагенты', 'поиск → search=', () => fires(() => page.getByPlaceholder(/поиск|названи|имен|бин/i).first().fill('Поставщик'), '/api/catalog/counterparties', 'search=')) + // ── Остальные документные списки: поиск (всегда в шапке) шлёт search= ─ + const docScreens: [string, string, string, RegExp][] = [ + ['Оприходования', '/inventory/enters', '/api/inventory/enters', /номер/i], + ['Списания', '/inventory/losses', '/api/inventory/losses', /номер/i], + ['Инвентаризации', '/inventory/inventories', '/api/inventory/inventories', /номер/i], + ['Возвраты поставщику', '/purchases/supplier-returns', '/api/purchases/supplier-returns', /номер|поставщик/i], + ] + for (const [name, path, url, ph] of docScreens) { + await attachSession(page, sess, path) + await page.waitForTimeout(1200) + await check(name, 'поиск → search=', () => + fires(() => page.getByPlaceholder(ph).first().fill('X1'), url, 'search=')) + } + + // ── Движения: фильтр по складу шлёт storeId ───────────────────────── + await attachSession(page, sess, '/inventory/movements') + await page.waitForTimeout(1500) + await check('Движения', 'фильтр склада → storeId=', () => + fires(async () => { + await page.getByText('Все склады', { exact: true }).first().click() + await page.waitForTimeout(300) + // пункт списка кастомного Select —