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, "\\$&"); }