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.

81 lines
2.4 KiB

import { afterEach, describe, expect, it } from "vitest";
import {
decryptSecret,
encryptSecret,
} from "@/modules/customer/token-crypto";
import {
getFlockLoginSource,
hasEffectiveFlockLogin,
runWithFlockLoginContext,
} from "@/lib/flock/login-context";
import { serializeProviderCredentialAdminView } from "@/modules/customer/provider-credentials";
describe("encryptSecret / decryptSecret", () => {
it("往返一致", () => {
const plain = "daetrDG#%%^Ydad12";
expect(decryptSecret(encryptSecret(plain))).toBe(plain);
});
it("空/非法密文返回 null", () => {
expect(decryptSecret(null)).toBeNull();
expect(decryptSecret("")).toBeNull();
expect(decryptSecret("@@@")).toBeNull();
});
});
describe("serializeProviderCredentialAdminView", () => {
it("回传完整邮箱与明文密码", () => {
const password = "Secret#1";
const view = serializeProviderCredentialAdminView({
provider: "flock",
loginEmail: "ops@example.com",
passwordCiphertext: encryptSecret(password),
updatedAt: new Date("2026-07-15T00:00:00.000Z"),
isDeleted: false,
});
expect(view.email).toBe("ops@example.com");
expect(view.password).toBe(password);
expect(view.has_password).toBe(true);
});
it("已删除不回传账密", () => {
const view = serializeProviderCredentialAdminView({
provider: "mothership",
loginEmail: "ops@example.com",
passwordCiphertext: encryptSecret("x"),
updatedAt: new Date(),
isDeleted: true,
});
expect(view.email).toBeNull();
expect(view.password).toBeNull();
expect(view.has_password).toBe(false);
});
});
describe("flock login context", () => {
afterEach(() => {
delete process.env.FLOCK_LOGIN_EMAIL;
delete process.env.FLOCK_LOGIN_PASSWORD;
});
it("客户凭据优先于环境变量", async () => {
process.env.FLOCK_LOGIN_EMAIL = "env@example.com";
process.env.FLOCK_LOGIN_PASSWORD = "env-pass";
await runWithFlockLoginContext(
{ email: "cust@example.com", password: "cust-pass" },
"customer",
async () => {
expect(hasEffectiveFlockLogin()).toBe(true);
expect(getFlockLoginSource()).toBe("customer");
},
);
});
it("无 ALS 时回退 env", async () => {
process.env.FLOCK_LOGIN_EMAIL = "env@example.com";
process.env.FLOCK_LOGIN_PASSWORD = "env-pass";
expect(hasEffectiveFlockLogin()).toBe(true);
expect(getFlockLoginSource()).toBe("env");
});
});