mitai-jinkendo/tests/global-setup.js
Lars ae7d0ac1d9
Some checks failed
Deploy Development / deploy (push) Successful in 1m11s
Build Test / pytest-backend (push) Failing after 5s
Build Test / lint-backend (push) Successful in 0s
Build Test / build-frontend (push) Successful in 22s
test: stabilize Playwright smoke and issue-audit against dev
Fix nav selectors (Erfassen), shared auth via global-setup to avoid login rate limits, and desktop sidebar viewport handling.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-25 16:37:36 +02:00

65 lines
2.1 KiB
JavaScript

const { chromium } = require('@playwright/test');
const fs = require('fs');
const path = require('path');
const TEST_EMAIL = process.env.TEST_EMAIL || 'lars@stommer.com';
const TEST_PASSWORD = process.env.TEST_PASSWORD || '5112';
const AUTH_FILE = path.join(__dirname, '.auth', 'user.json');
async function tryLogin(page, baseURL) {
await page.goto(`${baseURL}/`);
await page.waitForLoadState('networkidle');
const loginBtn = page.locator('button:has-text("Anmelden")');
if ((await loginBtn.count()) === 0) {
return { ok: true, status: 200 };
}
await page.fill('input[type="email"]', TEST_EMAIL);
await page.fill('input[type="password"]', TEST_PASSWORD);
const responsePromise = page
.waitForResponse(
(r) => r.url().includes('/api/auth/login') && r.request().method() === 'POST',
{ timeout: 15000 }
)
.catch(() => null);
await page.click('button:has-text("Anmelden")');
const response = await responsePromise;
await page.waitForLoadState('networkidle');
const loginVisible = await page.locator('button:has-text("Anmelden")').count();
return { ok: loginVisible === 0, status: response?.status() ?? null };
}
module.exports = async (config) => {
fs.mkdirSync(path.dirname(AUTH_FILE), { recursive: true });
const browser = await chromium.launch({ channel: 'chrome', headless: true });
const page = await browser.newPage();
const baseURL = config.projects?.[0]?.use?.baseURL || 'https://dev.mitai.jinkendo.de';
const waits = [0, 15000, 30000, 45000];
let lastStatus = null;
for (let i = 0; i < waits.length; i++) {
if (waits[i] > 0) {
console.log(`Global setup: warte ${waits[i] / 1000}s (Login-Rate-Limit 5/min)…`);
await page.waitForTimeout(waits[i]);
}
const result = await tryLogin(page, baseURL);
lastStatus = result.status;
if (result.ok) {
await page.context().storageState({ path: AUTH_FILE });
await browser.close();
return;
}
}
await browser.close();
throw new Error(
`Global setup: Login fehlgeschlagen (letzter HTTP-Status: ${lastStatus ?? 'unbekannt'})`
);
};