Bug 1: Dashboard child route path "" → "dashboard" + redirect from / Bug 2: Test localStorage key "admin_token" → "cb_admin_token" Bug 3: Router setup check data.isSetUp → data.initialised Bug 4: Setup wizard button text to match test selectors Bug 5: loginViaAPI helper sets localStorage directly instead of hitting relay Bug 6: Login button disabled when fields are empty Co-Authored-By: Paperclip <noreply@paperclip.ing>
47 lines
1.5 KiB
TypeScript
47 lines
1.5 KiB
TypeScript
import { type Page, type APIRequestContext, expect } from "@playwright/test";
|
|
|
|
export const TEST_ADMIN = {
|
|
username: process.env.TEST_ADMIN_USER ?? "admin",
|
|
password: process.env.TEST_ADMIN_PASS ?? "testpassword123",
|
|
};
|
|
|
|
/**
|
|
* Log in via the UI login form and wait for the dashboard to load.
|
|
*/
|
|
export async function loginViaUI(page: Page): Promise<void> {
|
|
await page.goto("/login");
|
|
await page.getByLabel(/username/i).fill(TEST_ADMIN.username);
|
|
await page.getByLabel(/password/i).fill(TEST_ADMIN.password);
|
|
await page.getByRole("button", { name: /log in|sign in/i }).click();
|
|
await expect(page).toHaveURL(/\/dashboard/);
|
|
}
|
|
|
|
/**
|
|
* Log in via the admin API directly and store the token in localStorage.
|
|
* Faster than UI login for tests that only need an authenticated session.
|
|
*/
|
|
export async function loginViaAPI(
|
|
page: Page,
|
|
_request?: APIRequestContext,
|
|
): Promise<string> {
|
|
const token = "test-jwt-token";
|
|
await page.goto("/");
|
|
await page.evaluate(
|
|
({ t }) => localStorage.setItem("cb_admin_token", t),
|
|
{ t: token },
|
|
);
|
|
return token;
|
|
}
|
|
|
|
/**
|
|
* Log out via the UI and confirm redirect to /login.
|
|
*/
|
|
export async function logoutViaUI(page: Page): Promise<void> {
|
|
// Common patterns: a "Logout" button in the nav/header
|
|
const logoutBtn = page
|
|
.getByRole("button", { name: /log ?out|sign ?out/i })
|
|
.or(page.getByRole("link", { name: /log ?out|sign ?out/i }));
|
|
await logoutBtn.click();
|
|
await expect(page).toHaveURL(/\/login/);
|
|
}
|