Files
Investidor-V2/tools/local-dev-smoke.cjs
paulomassigue 14ad2f60c5
tests / ci (push) Canceled after 0s
header:navbar e footer
2026-10-19 13:07:16 +02:00

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