test(e2e): браузерные тесты паритета — прибыль на главной, автоген ШК (п.10)
stage-ui-parity.spec.ts (3 теста, стенд): блок «Прибыль за сегодня/месяц»; в карточке нового товара штрихкод автозаполнен + кнопка «Сгенерировать» меняет его; товар только с именем получает сгенерированный EAN-13. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
210e8171d3
commit
cfc335e911
58
tests/e2e/scenarios/stage-ui-parity.spec.ts
Normal file
58
tests/e2e/scenarios/stage-ui-parity.spec.ts
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
/**
|
||||||
|
* E2E (браузер): паритет с МойСкладом — видимые элементы.
|
||||||
|
* - Дашборд: блок «Прибыль за сегодня/месяц» (п.8).
|
||||||
|
* - Карточка нового товара: штрихкод автозаполнен + кнопка «Сгенерировать» (п.4).
|
||||||
|
* - Создание товара только с именем через API → в карточке виден сгенерированный ШК.
|
||||||
|
*/
|
||||||
|
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('MoySklad parity UI', () => {
|
||||||
|
test('дашборд: блок «Прибыль за сегодня/месяц»', async ({ page }) => {
|
||||||
|
test.setTimeout(90_000)
|
||||||
|
const sess = await apiSignup('parity')
|
||||||
|
await attachSession(page, sess, '/dashboard')
|
||||||
|
await expect(page.getByText('Прибыль за сегодня')).toBeVisible({ timeout: 15_000 })
|
||||||
|
await expect(page.getByText('Прибыль за месяц')).toBeVisible()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('карточка товара: штрихкод автозаполнен + кнопка «Сгенерировать»', async ({ page }) => {
|
||||||
|
test.setTimeout(90_000)
|
||||||
|
const sess = await apiSignup('paritycard')
|
||||||
|
await attachSession(page, sess, '/catalog/products/new')
|
||||||
|
await page.waitForLoadState('networkidle')
|
||||||
|
// В секции «Штрихкоды» есть поле с кодом (автозаполнено, 13 цифр) и кнопка генерации.
|
||||||
|
await expect(page.getByText('Штрихкоды')).toBeVisible({ timeout: 15_000 })
|
||||||
|
const genBtn = page.getByRole('button', { name: 'Сгенерировать внутренний штрихкод' })
|
||||||
|
await expect(genBtn).toBeVisible()
|
||||||
|
// Код — непустой; клик по «Сгенерировать» меняет его на другой 13-значный.
|
||||||
|
const codeInput = page.getByPlaceholder('Код').first()
|
||||||
|
const before = await codeInput.inputValue()
|
||||||
|
expect(before).toMatch(/^[0-9]{13}$/)
|
||||||
|
await genBtn.click()
|
||||||
|
const after = await codeInput.inputValue()
|
||||||
|
expect(after).toMatch(/^[0-9]{13}$/)
|
||||||
|
})
|
||||||
|
|
||||||
|
test('товар только с именем: сгенерированный ШК виден в карточке', async ({ page }) => {
|
||||||
|
test.setTimeout(90_000)
|
||||||
|
const sess = await apiSignup('parityname')
|
||||||
|
const ctx = await apiRequest.newContext({
|
||||||
|
baseURL: BASE, ignoreHTTPSErrors: true, timeout: 60_000,
|
||||||
|
extraHTTPHeaders: { Authorization: `Bearer ${sess.accessToken}` },
|
||||||
|
})
|
||||||
|
const r = await ctx.post('/api/catalog/products', { data: { name: 'Товар только имя' } })
|
||||||
|
expect(r.status()).toBe(201)
|
||||||
|
const id = (await r.json()).id
|
||||||
|
await ctx.dispose()
|
||||||
|
|
||||||
|
await attachSession(page, sess, `/catalog/products/${id}`)
|
||||||
|
await page.waitForLoadState('networkidle')
|
||||||
|
await expect(page.getByText('Штрихкоды')).toBeVisible({ timeout: 15_000 })
|
||||||
|
const code = await page.getByPlaceholder('Код').first().inputValue()
|
||||||
|
expect(code).toMatch(/^[0-9]{13}$/)
|
||||||
|
})
|
||||||
|
})
|
||||||
Loading…
Reference in a new issue