52 lines
2.8 KiB
JavaScript
52 lines
2.8 KiB
JavaScript
const fs = require('node:fs');
|
|
const path = require('node:path');
|
|
const assert = require('node:assert/strict');
|
|
const { chromium } = require(process.env.PLAYWRIGHT_MODULE || 'playwright');
|
|
|
|
// Read-only public navigation and login of the documented local demo account.
|
|
// Receipts never include cookies, request bodies or credentials.
|
|
(async () => {
|
|
const base = 'http://127.0.0.1:8000';
|
|
const directory = path.resolve(__dirname, '../outputs/local-startup-20261019');
|
|
fs.mkdirSync(directory, { recursive: true });
|
|
const browser = await chromium.launch({ channel: 'chrome', headless: true });
|
|
const errors = [];
|
|
const failures = [];
|
|
const checks = [];
|
|
try {
|
|
const page = await browser.newPage({ viewport: { width: 1366, height: 900 } });
|
|
page.on('pageerror', error => errors.push(error.message));
|
|
page.on('response', response => {
|
|
if (response.url().startsWith(base) && response.status() >= 500) {
|
|
failures.push({ path: new URL(response.url()).pathname, status: response.status() });
|
|
}
|
|
});
|
|
for (const route of ['/', '/oportunidades', '/sectores/agronegocio', '/login', '/register']) {
|
|
const response = await page.goto(base + route, { waitUntil: 'networkidle', timeout: 90000 });
|
|
assert.equal(response.status(), 200, route);
|
|
await page.locator('#app').waitFor();
|
|
assert.ok((await page.locator('body').innerText()).trim().length > 100, route);
|
|
checks.push({ path: route, status: response.status(), rendered: true });
|
|
if (route === '/') await page.screenshot({ path: path.join(directory, 'home.png'), fullPage: true });
|
|
}
|
|
await page.goto(base + '/login', { waitUntil: 'networkidle' });
|
|
await page.locator('input[name=email]').fill('test@example.com');
|
|
await page.locator('input[name=password]').fill('password');
|
|
await Promise.all([
|
|
page.waitForURL('**/dashboard', { timeout: 60000 }),
|
|
page.locator('button[type=submit]').click(),
|
|
]);
|
|
await page.waitForLoadState('networkidle');
|
|
assert.ok((await page.locator('body').innerText()).trim().length > 100);
|
|
checks.push({ path: '/dashboard', authenticated: true, rendered: true });
|
|
await page.screenshot({ path: path.join(directory, 'dashboard.png'), fullPage: true });
|
|
assert.deepEqual(errors, []);
|
|
assert.deepEqual(failures, []);
|
|
const receipt = { at: new Date().toISOString(), checks, javascriptErrors: errors, serverErrors: failures };
|
|
fs.writeFileSync(path.join(directory, 'browser.json'), JSON.stringify(receipt, null, 2));
|
|
console.log(JSON.stringify(receipt));
|
|
} finally {
|
|
await browser.close();
|
|
}
|
|
})().catch(error => { console.error(error); process.exitCode = 1; });
|