Files
explorer-monorepo/frontend/scripts/smoke-scroll-height.mjs

91 lines
2.4 KiB
JavaScript
Raw Normal View History

import { chromium } from 'playwright'
const baseUrl = (process.env.BASE_URL || 'https://explorer.d-bis.org').replace(/\/$/, '')
const viewportHeight = Number(process.env.SMOKE_VIEWPORT_HEIGHT || 720)
const maxViewportHeights = Number(process.env.SMOKE_MAX_VIEWPORT_HEIGHTS || 2.5)
const routeLimits = new Map(
(process.env.SMOKE_SCROLL_ROUTE_LIMITS || ' /=4,/operator=4,/transactions=3')
.split(',')
.map((entry) => entry.trim())
.filter(Boolean)
.map((entry) => {
const [path, limit] = entry.split('=')
return [path, Number(limit)]
}),
)
function limitForRoute(path) {
return routeLimits.get(path) ?? maxViewportHeights
}
const routes = [
'/',
'/bridge',
'/routes',
'/operations',
'/system',
'/operator',
'/analytics',
'/liquidity',
'/blocks',
'/transactions',
'/addresses',
'/wallet',
'/access',
]
async function main() {
const browser = await chromium.launch({ headless: true })
const page = await browser.newPage({
viewport: { width: 1280, height: viewportHeight },
})
let failures = 0
for (const path of routes) {
const url = `${baseUrl}${path}`
try {
const response = await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 20000 })
await page.waitForLoadState('networkidle', { timeout: 5000 }).catch(() => {})
if (!response || !response.ok()) {
console.error(`FAIL ${path}: HTTP ${response ? response.status() : 'no-response'}`)
failures += 1
continue
}
const scrollHeight = await page.evaluate(() => document.documentElement.scrollHeight)
const routeLimit = limitForRoute(path)
const limit = viewportHeight * routeLimit
if (scrollHeight > limit) {
console.error(
`FAIL ${path}: scrollHeight ${scrollHeight}px exceeds ${routeLimit}× viewport (${Math.round(limit)}px)`,
)
failures += 1
continue
}
console.log(`OK ${path} (${scrollHeight}px)`)
} catch (error) {
console.error(`FAIL ${path}: ${error instanceof Error ? error.message : String(error)}`)
failures += 1
}
}
await browser.close()
if (failures > 0) {
process.exitCode = 1
return
}
console.log(`Scroll-height smoke passed for ${routes.length} routes at ${viewportHeight}px viewport`)
}
main().catch((error) => {
console.error(error instanceof Error ? error.stack || error.message : String(error))
process.exitCode = 1
})