73 lines
1.9 KiB
TypeScript
73 lines
1.9 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { encode } from "next-auth/jwt";
|
|
|
|
import {
|
|
AUTH_STATE_PATH,
|
|
E2E_AUTH_SECRET,
|
|
E2E_BASE_URL,
|
|
} from "./support/environment";
|
|
|
|
const SESSION_MAX_AGE_SECONDS = 12 * 60 * 60;
|
|
|
|
export default async function globalSetup() {
|
|
if (process.env.E2E_STORAGE_STATE) return;
|
|
|
|
const now = Date.now();
|
|
const baseUrl = new URL(E2E_BASE_URL);
|
|
const secure = baseUrl.protocol === "https:";
|
|
const token = await encode({
|
|
secret: E2E_AUTH_SECRET,
|
|
maxAge: SESSION_MAX_AGE_SECONDS,
|
|
token: {
|
|
sub: "playwright-user",
|
|
username: "playwright",
|
|
name: "E2E 测试用户",
|
|
email: "playwright@example.invalid",
|
|
accessToken: "playwright-access-token",
|
|
accessTokenIssuedAt: now,
|
|
accessTokenExpires: now + SESSION_MAX_AGE_SECONDS * 1000,
|
|
sessionExpiresAt: now + SESSION_MAX_AGE_SECONDS * 1000,
|
|
},
|
|
});
|
|
|
|
await fs.mkdir(path.dirname(AUTH_STATE_PATH), { recursive: true });
|
|
await fs.writeFile(
|
|
AUTH_STATE_PATH,
|
|
JSON.stringify(
|
|
{
|
|
cookies: [
|
|
{
|
|
name: secure
|
|
? "__Secure-next-auth.session-token"
|
|
: "next-auth.session-token",
|
|
value: token,
|
|
domain: baseUrl.hostname,
|
|
path: "/",
|
|
expires: Math.floor(now / 1000) + SESSION_MAX_AGE_SECONDS,
|
|
httpOnly: true,
|
|
secure,
|
|
sameSite: "Lax",
|
|
},
|
|
],
|
|
origins: [
|
|
{
|
|
origin: baseUrl.origin,
|
|
localStorage: [
|
|
{ name: "active_project", value: "playwright-project" },
|
|
{ name: "MAP_WORKSPACE", value: "tjwater_e2e" },
|
|
{ name: "NETWORK_NAME", value: "tjwater_e2e" },
|
|
{
|
|
name: "MAP_EXTENT",
|
|
value: "13508801.93,3608163.35,13555650.64,3633685.14",
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
null,
|
|
2,
|
|
),
|
|
);
|
|
}
|