From e1d82fd15cb69fb8bf696861eec1b5887dce4556 Mon Sep 17 00:00:00 2001 From: nns Date: Fri, 9 Oct 2026 08:29:04 +0500 Subject: [PATCH] =?UTF-8?q?test(e2e):=20=D0=B1=D1=80=D0=B0=D1=83=D0=B7?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D1=8B=D0=B9=20=D1=82=D0=B5=D1=81=D1=82=20?= =?UTF-8?q?=C2=AB=D0=9F=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=C2=BB=20=E2=80=94=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B9=D0=B4=D0=B6=20+=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D1=8C?= =?UTF-8?q?=20=D1=81=D0=BE=20=D1=81=D1=87=D1=91=D1=82=D1=87=D0=B8=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20(=D0=BF.5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- .../scenarios/stage-ui-data-quality.spec.ts | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 tests/e2e/scenarios/stage-ui-data-quality.spec.ts diff --git a/tests/e2e/scenarios/stage-ui-data-quality.spec.ts b/tests/e2e/scenarios/stage-ui-data-quality.spec.ts new file mode 100644 index 0000000..8779287 --- /dev/null +++ b/tests/e2e/scenarios/stage-ui-data-quality.spec.ts @@ -0,0 +1,44 @@ +/** + * E2E (браузер): фоновая «Проверка данных». + * - создаём товар без цены/группы (quick), пересчитываем через API; + * - на дашборде виден ненавязчивый бейдж «N товаров требуют внимания»; + * - на странице «Проверка данных» видны счётчики и детальный список. + */ +import { test, expect } from '@playwright/test' +import { apiSignup, attachSession } from '../lib/ui.js' +import { request as apiRequest } from '@playwright/test' + +const BASE = process.env.E2E_ADMIN_URL ?? 'https://test.admin.food-market.kz' + +test.describe('data-quality UI', () => { + test('бейдж на главной + панель со счётчиками', async ({ page }) => { + test.setTimeout(120_000) + const sess = await apiSignup('dqui') + const ctx = await apiRequest.newContext({ + baseURL: BASE, ignoreHTTPSErrors: true, timeout: 60_000, + extraHTTPHeaders: { Authorization: `Bearer ${sess.accessToken}` }, + }) + // Товары с проблемами: без цены (и в корне → без группы), пара дублей. + await ctx.post('/api/catalog/products/quick', { data: { name: 'DQ без цены' } }) + await ctx.post('/api/catalog/products/quick', { data: { name: 'DQ дубль' } }) + await ctx.post('/api/catalog/products/quick', { data: { name: 'DQ дубль' } }) + const rec = await ctx.post('/api/data-quality/recompute') + expect(rec.status()).toBe(200) + const sum = await rec.json() + expect(sum.total).toBeGreaterThan(0) + await ctx.dispose() + + // Дашборд: бейдж виден. + await attachSession(page, sess, '/dashboard') + await expect(page.getByText(/требу.* внимания в справочнике/i)).toBeVisible({ timeout: 15_000 }) + + // Панель: заголовок + счётчики проверок. + await page.goto('/catalog/data-quality', { waitUntil: 'domcontentloaded' }) + await expect(page.getByRole('heading', { name: 'Проверка данных' })).toBeVisible({ timeout: 15_000 }) + await expect(page.getByText('Без цены продажи')).toBeVisible() + await expect(page.getByText('Возможный дубль (имя+единица)')).toBeVisible() + // Клик по проверке «Без цены продажи» показывает детальный список. + await page.getByText('Без цены продажи').first().click() + await expect(page.getByText('DQ без цены').first()).toBeVisible({ timeout: 10_000 }) + }) +})