36 lines
2.0 KiB
JavaScript
36 lines
2.0 KiB
JavaScript
// Run preview first: npx vite --config vite.lightning-preview.config.ts
|
|
// CHROMIUM_PATH=/usr/bin/chromium node previews/lightning/smoke.mjs
|
|
import { chromium } from '@playwright/test'
|
|
import assert from 'node:assert/strict'
|
|
const browser = await chromium.launch({ headless: true, ...(process.env.CHROMIUM_PATH ? { executablePath: process.env.CHROMIUM_PATH } : {}) })
|
|
try {
|
|
const page = await browser.newPage()
|
|
const errors = []
|
|
page.on('pageerror', e => errors.push(e.message))
|
|
await page.goto('http://127.0.0.1:8194/')
|
|
for (const viewport of [{ width: 1280, height: 900 }, { width: 390, height: 844 }]) {
|
|
await page.setViewportSize(viewport)
|
|
await page.getByRole('button', { name: 'Buy inbound channel', exact: true }).click()
|
|
await page.getByText('Node ready.', { exact: false }).waitFor()
|
|
const dialog = page.getByRole('dialog')
|
|
assert.equal(await dialog.count(), 1)
|
|
for (let i = 0; i < 8; i++) {
|
|
await page.keyboard.press('Tab')
|
|
assert.equal(await page.evaluate(() => !!document.activeElement?.closest('[role="dialog"]')), true)
|
|
}
|
|
assert.equal(await page.evaluate(() => document.documentElement.scrollWidth > innerWidth), false)
|
|
// Pixel-based trackpad-style scrolling: modal content scrolls, footer stays reachable.
|
|
const scroller = dialog.locator('.overflow-y-auto')
|
|
await scroller.hover()
|
|
await page.mouse.wheel(0, 500)
|
|
await page.getByRole('link', { name: 'Continue to ZEUS' }).scrollIntoViewIfNeeded()
|
|
page.once('dialog', async prompt => { assert.match(prompt.message(), /Demo only/); await prompt.accept() })
|
|
await page.getByRole('link', { name: 'Continue to ZEUS' }).click()
|
|
assert.equal(page.url(), 'http://127.0.0.1:8194/')
|
|
await page.keyboard.press('Escape')
|
|
await dialog.waitFor({ state: 'hidden' })
|
|
}
|
|
assert.deepEqual(errors, [])
|
|
console.log('PASS: desktop/mobile dialog, pixel scroll, safe demo handoff, Escape, no horizontal overflow or page errors')
|
|
} finally { await browser.close() }
|