35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
import { expect, test } from "./utils/test";
|
|
import { getTenantCredentials, loginAsTenantUser, tenantSettingsProfilePath } from "./utils/auth";
|
|
import { skipOrFailWhenE2eInputsMissing } from "./utils/readiness";
|
|
|
|
const credentials = getTenantCredentials();
|
|
const dashboardPath = process.env.E2E_TENANT_DASHBOARD_PATH ?? "/app/dashboard";
|
|
|
|
test.describe("tenant auth and shell flow", () => {
|
|
test("logs in and navigates from dashboard to settings", async ({ page }) => {
|
|
if (!credentials) {
|
|
skipOrFailWhenE2eInputsMissing(["E2E_TENANT_EMAIL", "E2E_TENANT_PASSWORD"], "Skipping authenticated tenant shell flow");
|
|
}
|
|
|
|
await loginAsTenantUser(page, credentials!);
|
|
|
|
await page.goto(dashboardPath, { waitUntil: "domcontentloaded" });
|
|
await expect(page).toHaveURL(new RegExp(`${escapeRegExp(dashboardPath)}(?:[?#].*)?$`, "u"));
|
|
|
|
await expect(page.locator('[data-ui-id="ui.surface.app.sidebar"]')).toBeVisible();
|
|
await expect(page.locator('[data-ui-id="ui.nav.app.dashboard"]').first()).toBeVisible();
|
|
|
|
const settingsLink = page.locator('[data-ui-id="ui.nav.app.settings"]').first();
|
|
await expect(settingsLink).toBeVisible();
|
|
await settingsLink.click();
|
|
|
|
const settingsProfilePath = tenantSettingsProfilePath(dashboardPath);
|
|
await expect(page).toHaveURL(new RegExp(`${escapeRegExp(settingsProfilePath)}(?:[?#].*)?$`, "u"));
|
|
await expect(page.locator('[data-ui-id="ui.surface.app.sidebar"]')).toBeVisible();
|
|
});
|
|
});
|
|
|
|
function escapeRegExp(value: string): string {
|
|
return value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
}
|