food-market/tests/e2e/scripts/screenshot-empty-state.ts
nns 6fc74f8db6
Some checks are pending
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
docs(sprint7): пункт 5 ✓ + empty-state screenshot
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 11:21:30 +05:00

50 lines
2.2 KiB
TypeScript

/**
* Sprint 7 item 5 — визуально подтверждаем EmptyState на свежей организации.
* Без seed-demo, просто заходим в /catalog/products и видим «Здесь пока пусто».
*/
import { chromium } from 'playwright'
import { makeClient, login } from '../lib/api.js'
const BASE = process.env.E2E_ADMIN_URL ?? 'https://test.admin.food-market.kz'
const TS = Date.now()
const EMAIL = `empty-shot-${TS}@food-market.local`
const PASS = 'EmptyShot12345!'
async function ensureSession() {
const api = makeClient()
const r = await api.post('/api/auth/signup', {
email: EMAIL, password: PASS,
organizationName: `EmptyShot ${TS}`, phone: '+77011190001', plan: 'start',
})
if (r.status !== 200) throw new Error(`signup ${r.status}: ${JSON.stringify(r.data)}`)
return login(EMAIL, PASS)
}
async function main() {
const sess = await ensureSession()
console.log(`[shot] session ${sess.email}`)
const browser = await chromium.launch({ headless: true })
const ctx = await browser.newContext({ ignoreHTTPSErrors: true, viewport: { width: 1280, height: 800 } })
const page = await ctx.newPage()
await page.goto(`${BASE}/`)
await page.evaluate(({ token }) => localStorage.setItem('fm.access_token', token), { token: sess.accessToken })
await page.goto(`${BASE}/catalog/products`, { waitUntil: 'domcontentloaded' })
await page.waitForLoadState('networkidle')
// Жде EmptyState — он содержит текст «Здесь пока пусто»
await page.waitForSelector('text=Здесь пока пусто', { timeout: 8000 })
await page.screenshot({ path: `reports/empty-state-products-${TS}.png` })
console.log(`[shot] products empty → reports/empty-state-products-${TS}.png`)
// Также проверим SuppliesPage
await page.goto(`${BASE}/purchases/supplies`, { waitUntil: 'domcontentloaded' })
await page.waitForLoadState('networkidle')
await page.waitForSelector('text=Приёмок пока нет', { timeout: 8000 })
await page.screenshot({ path: `reports/empty-state-supplies-${TS}.png` })
console.log(`[shot] supplies empty → reports/empty-state-supplies-${TS}.png`)
await browser.close()
}
main().catch(err => { console.error(err); process.exit(1) })