mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2026-07-11 21:45:04 +10:00
67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
import type { APIRequestContext, Browser, BrowserContext, Page } from "@playwright/test";
|
|
import type { E2EAccount } from "./data";
|
|
|
|
async function assertAuthResponse(response: Awaited<ReturnType<APIRequestContext["post"]>>) {
|
|
if (response.ok()) return;
|
|
|
|
throw new Error(`Authentication request failed with ${response.status()}: ${await response.text()}`);
|
|
}
|
|
|
|
export async function registerViaUi(page: Page, account: E2EAccount) {
|
|
await page.goto("/auth/register");
|
|
await page.getByRole("textbox", { name: "Name", exact: true }).fill(account.name);
|
|
await page.getByLabel("Username").fill(account.username);
|
|
await page.getByLabel("Email Address", { exact: true }).fill(account.email);
|
|
await page.getByLabel("Password", { exact: true }).fill(account.password);
|
|
await page.getByRole("button", { name: "Sign up" }).click();
|
|
await page.getByRole("button", { name: "Continue" }).click();
|
|
await page.waitForURL(/\/dashboard/);
|
|
}
|
|
|
|
export async function loginViaUi(page: Page, account: E2EAccount) {
|
|
await page.goto("/auth/login");
|
|
await page.getByLabel("Email Address", { exact: true }).fill(account.email);
|
|
await page.getByLabel("Password", { exact: true }).fill(account.password);
|
|
await page.getByRole("button", { name: "Sign in" }).click();
|
|
await page.waitForURL(/\/dashboard/);
|
|
}
|
|
|
|
export async function logoutViaUi(page: Page, account: E2EAccount) {
|
|
await page.getByText(account.email).click();
|
|
await page.getByRole("menuitem", { name: "Logout" }).click();
|
|
await page.waitForURL(/\/auth\/login/);
|
|
}
|
|
|
|
async function registerViaApi(request: APIRequestContext, account: E2EAccount, baseURL: string) {
|
|
const response = await request.post("/api/auth/sign-up/email", {
|
|
headers: {
|
|
origin: baseURL,
|
|
referer: `${baseURL}/auth/register`,
|
|
},
|
|
data: {
|
|
name: account.name,
|
|
email: account.email,
|
|
password: account.password,
|
|
username: account.username,
|
|
displayUsername: account.username,
|
|
callbackURL: "/dashboard",
|
|
},
|
|
});
|
|
|
|
await assertAuthResponse(response);
|
|
}
|
|
|
|
export async function createAuthenticatedContext(
|
|
browser: Browser,
|
|
request: APIRequestContext,
|
|
account: E2EAccount,
|
|
baseURL: string,
|
|
): Promise<BrowserContext> {
|
|
await registerViaApi(request, account, baseURL);
|
|
|
|
return browser.newContext({
|
|
baseURL,
|
|
storageState: await request.storageState(),
|
|
});
|
|
}
|