mirror of
https://github.com/webadderallorg/Recordly.git
synced 2026-11-09 15:33:31 +00:00
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
import type { Page } from "@playwright/test";
|
|
import type { User } from "@supabase/supabase-js";
|
|
|
|
const user = {
|
|
id: "00000000-0000-4000-8000-000000000001",
|
|
email: "test@email.com",
|
|
aud: "authenticated",
|
|
role: "authenticated",
|
|
app_metadata: { provider: "email", providers: ["email"] },
|
|
user_metadata: { full_name: "Test User" },
|
|
created_at: "2026-09-23T00:00:00.000Z",
|
|
email_confirmed_at: "2026-09-23T00:00:00.000Z",
|
|
is_anonymous: false,
|
|
};
|
|
|
|
export async function installSupabaseAuth(page: Page, { signedIn = true } = {}) {
|
|
await page.route("**/cloud/config", (route) =>
|
|
route.fulfill({
|
|
headers: { "Access-Control-Allow-Origin": "*" },
|
|
json: { authCaptcha: { enabled: false } },
|
|
}),
|
|
);
|
|
const account: User = structuredClone(user);
|
|
const expiresAt = Math.floor(Date.now() / 1000) + 3600;
|
|
const encode = (value: unknown) => Buffer.from(JSON.stringify(value)).toString("base64url");
|
|
const session = {
|
|
access_token: `${encode({ alg: "HS256", typ: "JWT" })}.${encode({ sub: user.id, exp: expiresAt, role: "authenticated" })}.ui-test-signature`,
|
|
refresh_token: "ui-test-refresh-token",
|
|
token_type: "bearer",
|
|
expires_in: 3600,
|
|
expires_at: expiresAt,
|
|
user: account,
|
|
};
|
|
await page.route("https://auth.recordly.test/**", async (route) => {
|
|
const path = new URL(route.request().url()).pathname;
|
|
if (path === "/auth/v1/settings")
|
|
return route.fulfill({
|
|
json: { external: { google: true, azure: true, apple: true, email: true } },
|
|
});
|
|
if (path === "/auth/v1/verify") return route.fulfill({ json: session });
|
|
if (path === "/auth/v1/token") return route.fulfill({ json: session });
|
|
if (path === "/auth/v1/user") {
|
|
if (route.request().method() === "PUT") {
|
|
const update = route.request().postDataJSON();
|
|
if (update.data)
|
|
account.user_metadata = { ...account.user_metadata, ...update.data };
|
|
if (update.email) account.new_email = update.email;
|
|
}
|
|
return route.fulfill({ json: account });
|
|
}
|
|
if (path === "/auth/v1/otp") return route.fulfill({ json: {} });
|
|
if (path === "/auth/v1/logout") return route.fulfill({ status: 204 });
|
|
return route.fulfill({ status: 503, json: { message: "Service unavailable in UI tests" } });
|
|
});
|
|
await page.addInitScript(
|
|
({ signedIn, session }) => {
|
|
if (sessionStorage.getItem("recordly.ui.auth.initialized")) return;
|
|
sessionStorage.setItem("recordly.ui.auth.initialized", "1");
|
|
if (signedIn) localStorage.setItem("sb-auth-auth-token", JSON.stringify(session));
|
|
else localStorage.removeItem("sb-auth-auth-token");
|
|
},
|
|
{ signedIn, session },
|
|
);
|
|
}
|
|
|
|
export async function completeSupabaseSignIn(page: Page) {
|
|
await page.evaluate(() => {
|
|
window.dispatchEvent(
|
|
new CustomEvent("recordly-test-auth-callback", {
|
|
detail: "recordly-dev://auth/callback?code=ui-auth-code",
|
|
}),
|
|
);
|
|
});
|
|
}
|