37 lines
1.7 KiB
TypeScript
37 lines
1.7 KiB
TypeScript
import { type APIRequestContext, type Page } from "@playwright/test";
|
|
|
|
export const BASE_URL = process.env.E2E_BASE_URL ?? "http://localhost:3000";
|
|
|
|
let ownerEmail = process.env.E2E_OWNER_EMAIL ?? "";
|
|
let ownerPassword = process.env.E2E_OWNER_PASSWORD ?? "";
|
|
|
|
/** Ensures an owner account exists and returns its credentials, bootstrapping the instance if needed. */
|
|
export async function ensureOwner(request: APIRequestContext): Promise<{ email: string; password: string }> {
|
|
if (ownerEmail && ownerPassword) return { email: ownerEmail, password: ownerPassword };
|
|
|
|
const status = await request.get(`${BASE_URL}/auth/bootstrap-status`);
|
|
const body = await status.json();
|
|
if (!body.needs_setup) {
|
|
throw new Error(
|
|
"Instance is already bootstrapped and E2E_OWNER_EMAIL/E2E_OWNER_PASSWORD were not set - " +
|
|
"cannot create the owner account this suite needs to provision fresh members per test.",
|
|
);
|
|
}
|
|
|
|
ownerEmail = `e2e-owner-${Date.now()}@vantage.test`;
|
|
ownerPassword = "correct horse battery staple 1";
|
|
const res = await request.post(`${BASE_URL}/auth/bootstrap`, {
|
|
data: { instance_name: "E2E", email: ownerEmail, password: ownerPassword },
|
|
});
|
|
if (!res.ok()) throw new Error(`bootstrap failed: ${res.status()} ${await res.text()}`);
|
|
return { email: ownerEmail, password: ownerPassword };
|
|
}
|
|
|
|
/** Fills the login form and submits it. */
|
|
export async function signIn(page: Page, email: string, password: string) {
|
|
await page.goto("/login");
|
|
await page.getByLabel("Email").fill(email);
|
|
await page.getByLabel("Password").fill(password);
|
|
await page.getByRole("button", { name: "Sign In" }).click();
|
|
}
|