Files
archy/neode-ui/previews/lightning/smoke.mjs

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() }