import { expect, test } from "./utils/test"; import { getTenantCredentials, loginAsTenantUser } from "./utils/auth"; import { skipIfUnavailable } from "./utils/navigation"; import { skipOrFailWhenE2eInputsMissing } from "./utils/readiness"; /** * Tasks-Smoke (AK-P4b / DoD D.19): Login -> /tasks oeffnen -> Liste sichtbar. * * Die Route ist modul-gegated (tenantHasModule "tasks") + permission-gegated * (tasks.read_own). Bei aktivem Modul + Berechtigung rendert sie die Aufgaben- * Liste mit `data-ui-id="ui.tasks.list"`. Skippt ohne E2E-Credentials / wenn die * Route im Environment nicht erreichbar ist (404 bei fehlendem Modul/Recht). */ const credentials = getTenantCredentials(); const dashboardPath = process.env.E2E_TENANT_DASHBOARD_PATH ?? "/app/dashboard"; const tasksPath = process.env.E2E_TENANT_TASKS_PATH ?? dashboardPath.replace(/\/dashboard\/?$/u, "/tasks"); test.describe("tasks smoke", () => { test("renders the tasks list", async ({ page }) => { skipOrFailWhenE2eInputsMissing(["E2E_TENANT_EMAIL", "E2E_TENANT_PASSWORD"], "Tasks smoke inputs not configured"); await loginAsTenantUser(page, credentials!); const response = await page.goto(tasksPath, { waitUntil: "domcontentloaded" }); await skipIfUnavailable(page, response, "Tasks path is not reachable in this environment"); await expect(page.locator('[data-ui-id="ui.tasks.list"]')).toBeVisible(); }); });