nxtgauge-frontend-solid/tests/e2e/visual/debug-dashboard.spec.ts
Tracewebstudio Dev aa79b30465 fix: RequireAuth hydration mismatch and role resolution
- RequireAuth: use setTimeout to defer clientReady=true until after hydration completes, preventing SSR/client mismatch
- dashboard.tsx: add SSR guard to return empty div on server
- playwright tests for dashboard role verification
2026-04-22 00:36:12 +02:00

55 lines
No EOL
2 KiB
TypeScript

import { test, expect, Page } from "@playwright/test";
test("TUTOR dashboard - final verification", async ({ page }) => {
const errors: string[] = [];
page.on("pageerror", (err) => errors.push(err.message));
await page.goto("http://localhost:3000/");
await page.waitForLoadState("networkidle");
const loginRes = await page.request.post("http://localhost:3000/api/auth/login", {
data: { email: "testtutora2026@example.com", password: "Test1234!" },
headers: { "Content-Type": "application/json", Accept: "application/json" },
});
const loginData = await loginRes.json();
const token = loginData.access_token;
const role = loginData.user?.active_role || "TUTOR";
await page.evaluate(
({ token, role }) => {
const payload = {
email: "testtutora2026@example.com",
fullName: "Test User",
name: "Test User",
roleKey: role.toLowerCase(),
role: role.toLowerCase(),
active_role: role,
selectedProfessionalRole: role,
user: { id: "test-id", email: "testtutora2026@example.com", full_name: "Test User", active_role: role },
};
window.sessionStorage.setItem("nxtgauge_access_token", token);
window.sessionStorage.setItem("nxtgauge_frontend_access_token", token);
window.localStorage.setItem("nxtgauge_auth_user", JSON.stringify(payload));
window.localStorage.setItem("nxtgauge_user", JSON.stringify(payload));
window.localStorage.setItem("nxtgauge_signup_profile_v1", JSON.stringify(payload));
},
{ token, role }
);
await page.goto(`http://localhost:3000/dashboard?role=${role}`, { timeout: 10000 });
await page.waitForLoadState("domcontentloaded");
await page.waitForTimeout(5000);
await page.screenshot({ path: "test-results/dashboard-tutor-final.png", fullPage: true });
// Check URL
console.log("URL:", page.url());
// Check for errors
if (errors.length > 0) {
console.log("Page errors:", errors.slice(0, 3));
}
// Assertions
expect(page.url()).toContain("dashboard");
});