ident
All repositories: gitoria
2.7 KB
// tests/dev-smoke.mjs — a login against the RUNNING DEV server (ident :8351) in one real// headless Chrome (time zone emulated Europe/Vienna): email → OTP read from the dev mail// sink → signed in → the identity list is shown. The first run creates [email protected]// in the DEV store (default identity, welcome form → Skip); later runs just sign in.// Rate limit: max 3 runs per 10 minutes.//// node tests/dev-smoke.mjs [identUrl] default http://100.77.141.84:8351//// Debug ports 8660-8669; Chrome is killed by PID at the end.import { readFileSync, existsSync } from 'node:fs';import { dirname, join, resolve } from 'node:path';import { fileURLToPath } from 'node:url';import { launchBrowser } from './cdp.mjs';if (!process.env.HL_CHROME && existsSync('/opt/google/chrome/chrome')) process.env.HL_CHROME = '/opt/google/chrome/chrome';const APP = resolve(dirname(fileURLToPath(import.meta.url)), '..');const SINK = join(APP, 'storage/mail-sink.txt');const IDENT = process.argv[2] || 'http://100.77.141.84:8351';const EMAIL = '[email protected]';const codes = () => existsSync(SINK) ? readFileSync(SINK, 'utf8').split('\n').filter(l => l.startsWith(EMAIL + ' ')).map(l => l.split(' ')[1]) : [];let br, ok = false;try {br = await launchBrowser({ debugPortRange: [8660, 8669] });const p = await br.newPage();await p.send('Emulation.setTimezoneOverride', { timezoneId: 'Europe/Vienna' });await p.goto(IDENT + '/');if (await p.evaluate('!!document.querySelector("#signout")')) throw new Error('fresh browser is signed in?');await p.waitFor('!!window.__hl && window.__hl.socket && window.__hl.socket.readyState === 1', { label: 'socket' });const before = codes().length;await p.type('#email', EMAIL);await p.click('#sendcode');await p.waitFor('!!document.querySelector("#code") || /\\S/.test(document.querySelector("#message").textContent)', { label: 'code form' });if (codes().length !== before + 1) throw new Error('no new code in ' + SINK + ' — page says: ' + await p.text('#message'));await p.type('#code', codes().at(-1));await p.click('#verify');await p.waitFor('!!document.querySelector("#identities")', { label: 'signed in' });if (await p.evaluate('!!document.querySelector("#skip")')) { console.log('first login: welcome form shown → Skip'); await p.click('#skip'); }console.log('signed in as:', await p.text('#meemail'), '| time zone:', await p.text('#timezone'));console.log('identities:', JSON.stringify(await p.evaluate(`[...document.querySelectorAll('#identities identity-label')].map(e => e.textContent)`)));ok = (await p.text('#meemail')) === EMAIL;} catch (e) {console.log('FAILED', e && e.message || e);} finally {if (br) await br.close();console.log(ok ? 'SMOKE OK' : 'SMOKE FAILED');process.exit(ok ? 0 : 1);}
Branches
- mainmain branch