You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
2.2 KiB
69 lines
2.2 KiB
import { describe, expect, it, beforeEach, afterEach } from "vitest";
|
|
import {
|
|
EMBED_DEMO_DEFAULT_PASSWORD,
|
|
EMBED_DEMO_ROLE,
|
|
getEmbedDemoPassword,
|
|
signEmbedDemoToken,
|
|
verifyEmbedDemoToken,
|
|
} from "@/modules/embed-demo/auth";
|
|
|
|
describe("embed-demo auth", () => {
|
|
const prevSecret = process.env.JWT_SECRET;
|
|
const prevPassword = process.env.EMBED_DEMO_PASSWORD;
|
|
|
|
beforeEach(() => {
|
|
process.env.JWT_SECRET = "test-jwt-secret-for-embed-demo";
|
|
delete process.env.EMBED_DEMO_PASSWORD;
|
|
});
|
|
|
|
afterEach(() => {
|
|
if (prevSecret === undefined) {
|
|
delete process.env.JWT_SECRET;
|
|
} else {
|
|
process.env.JWT_SECRET = prevSecret;
|
|
}
|
|
if (prevPassword === undefined) {
|
|
delete process.env.EMBED_DEMO_PASSWORD;
|
|
} else {
|
|
process.env.EMBED_DEMO_PASSWORD = prevPassword;
|
|
}
|
|
});
|
|
|
|
it("默认演示密码为 123456", () => {
|
|
expect(getEmbedDemoPassword()).toBe(EMBED_DEMO_DEFAULT_PASSWORD);
|
|
});
|
|
|
|
it("签发与校验演示会话 JWT", async () => {
|
|
const token = await signEmbedDemoToken("CUST_002");
|
|
const payload = await verifyEmbedDemoToken(token);
|
|
expect(payload.sub).toBe("CUST_002");
|
|
expect(payload.role).toBe(EMBED_DEMO_ROLE);
|
|
});
|
|
|
|
it("默认登录类型为 password", async () => {
|
|
const token = await signEmbedDemoToken("CUST_002");
|
|
const payload = await verifyEmbedDemoToken(token);
|
|
expect(payload.loginType).toBe("password");
|
|
});
|
|
|
|
it("api_key 登录类型可往返", async () => {
|
|
const token = await signEmbedDemoToken("CUST_003", "api_key");
|
|
const payload = await verifyEmbedDemoToken(token);
|
|
expect(payload.sub).toBe("CUST_003");
|
|
expect(payload.loginType).toBe("api_key");
|
|
});
|
|
});
|
|
|
|
describe("embedDemoCookieOptions", () => {
|
|
it("非生产默认 SameSite=lax", async () => {
|
|
const { embedDemoCookieOptions } = await import("@/modules/embed-demo/auth");
|
|
const prev = process.env.EMBED_COOKIE_SAMESITE;
|
|
delete process.env.EMBED_COOKIE_SAMESITE;
|
|
const opts = embedDemoCookieOptions();
|
|
expect(opts.sameSite).toBe("lax");
|
|
expect(opts.httpOnly).toBe(true);
|
|
if (prev === undefined) delete process.env.EMBED_COOKIE_SAMESITE;
|
|
else process.env.EMBED_COOKIE_SAMESITE = prev;
|
|
});
|
|
});
|