chore(infra): update dev compose, add playwright e2e suite & assets
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { chromium } from "@playwright/test";
|
||||
import { ADMIN_EMAIL, ADMIN_PASSWORD, BASE } from "./helpers";
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
|
||||
const AUTH_FILE = path.join(__dirname, ".auth-state.json");
|
||||
|
||||
export default async function globalSetup() {
|
||||
// If answer is not exposed in captcha, skip auth — tests requiring auth will skip themselves.
|
||||
const browser = await chromium.launch({
|
||||
executablePath: `${process.env.HOME}/.cache/ms-playwright/chromium_headless_shell-1234/chrome-headless-shell-linux64/chrome-headless-shell`,
|
||||
args: ["--no-sandbox", "--disable-dev-shm-usage"],
|
||||
});
|
||||
const context = await browser.newContext({ ignoreHTTPSErrors: true });
|
||||
const page = await context.newPage();
|
||||
|
||||
try {
|
||||
const captchaRes = await page.request.get(`${BASE}/api/auth/captcha`);
|
||||
const captchaData = await captchaRes.json();
|
||||
|
||||
if (!captchaData.answer) {
|
||||
console.warn("\n⚠ CAPTCHA_EXPOSE_ANSWER not set — restart the API container to enable auth tests.\n Run: ./scripts/compose-dev.sh restart api\n");
|
||||
fs.writeFileSync(AUTH_FILE, JSON.stringify({ available: false }));
|
||||
await browser.close();
|
||||
return;
|
||||
}
|
||||
|
||||
const loginRes = await page.request.post(`${BASE}/api/auth/login`, {
|
||||
data: {
|
||||
username: ADMIN_EMAIL,
|
||||
password: ADMIN_PASSWORD,
|
||||
challengeId: captchaData.challengeId,
|
||||
captchaAnswer: captchaData.answer,
|
||||
rememberMe: true,
|
||||
},
|
||||
});
|
||||
const body = await loginRes.json();
|
||||
|
||||
if (!body.accessToken) {
|
||||
console.warn("\n⚠ Admin login failed in global setup:", JSON.stringify(body));
|
||||
fs.writeFileSync(AUTH_FILE, JSON.stringify({ available: false }));
|
||||
await browser.close();
|
||||
return;
|
||||
}
|
||||
|
||||
fs.writeFileSync(AUTH_FILE, JSON.stringify({
|
||||
available: true,
|
||||
accessToken: body.accessToken,
|
||||
refreshToken: body.refreshToken,
|
||||
user: body.user,
|
||||
}));
|
||||
console.log("\n✓ Auth state cached for test suite\n");
|
||||
} catch (e) {
|
||||
fs.writeFileSync(AUTH_FILE, JSON.stringify({ available: false }));
|
||||
console.warn("\n⚠ Global setup failed:", e);
|
||||
}
|
||||
|
||||
await browser.close();
|
||||
}
|
||||
Reference in New Issue
Block a user