// Генератор фикстуры «фото накладной»: рендерит HTML-таблицу через // Playwright Chromium → JPEG → кладёт в tests/fixtures/invoice-sample.jpg. // // Запуск: pnpm exec tsx scripts/make-invoice-fixture.ts // // Фикстуру коммитим в репо (однажды сгенерирована — используется всеми // e2e-прогонами, в т.ч. в quality-watchdog). Пересобирать при изменении // HTML. import { chromium } from 'playwright' import { writeFileSync, mkdirSync } from 'node:fs' import { dirname, resolve } from 'node:path' import { fileURLToPath } from 'node:url' const __dir = dirname(fileURLToPath(import.meta.url)) const OUT = resolve(__dir, '..', '..', 'fixtures', 'invoice-sample.jpg') const html = `
Поставщик: ТОО "Тестовый Поставщик"
БИН: 123456789012
Адрес: г. Алматы, ул. Абая 100
Накладная № Т-00042
Дата: 03.10.2026
Валюта: KZT
Товарная накладная
Покупатель: ТОО "Food Market Demo" · Склад: Центральный
№ Наименование Штрихкод Код пост. Ед. Кол-во Цена Сумма
1Молоко «Домик в деревне» 3.2% 950мл4870022200015MLK-095шт24420.0010080.00
2Хлеб «Деревенский» 500г4870022200022BRD-500шт30180.005400.00
3Яйцо куриное С1, лоток 10шт4870022200039EGG-10уп15720.0010800.00
4Сахар-песок 1кг «Рафинад»4870022200046SUG-1Kкг40360.0014400.00
5Масло подсолн. рафинир. 1л4870022200053OIL-1Lшт12980.0011760.00
ИТОГО:52440.00
Отпустил: Иванов И. И. _______________ · Принял: _______________ · М.П.
` async function main() { mkdirSync(dirname(OUT), { recursive: true }) const browser = await chromium.launch() const context = await browser.newContext({ viewport: { width: 900, height: 1200 }, deviceScaleFactor: 2 }) const page = await context.newPage() await page.setContent(html, { waitUntil: 'load' }) const buffer = await page.screenshot({ fullPage: true, type: 'jpeg', quality: 92 }) writeFileSync(OUT, buffer) console.log('fixture written:', OUT, buffer.length, 'bytes') await context.close() await browser.close() } main().catch((e) => { console.error(e); process.exit(1) })