mirror of https://github.com/openclaw/openclaw.git
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
import { resolveZaloToken } from "./token.js";
|
|
import type { ZaloConfig } from "./types.js";
|
|
|
|
describe("resolveZaloToken", () => {
|
|
it("falls back to top-level token for non-default accounts without overrides", () => {
|
|
const cfg = {
|
|
botToken: "top-level-token",
|
|
accounts: {
|
|
work: {},
|
|
},
|
|
} as ZaloConfig;
|
|
const res = resolveZaloToken(cfg, "work");
|
|
expect(res.token).toBe("top-level-token");
|
|
expect(res.source).toBe("config");
|
|
});
|
|
|
|
it("uses accounts.default botToken for default account when configured", () => {
|
|
const cfg = {
|
|
botToken: "top-level-token",
|
|
accounts: {
|
|
default: {
|
|
botToken: "default-account-token",
|
|
},
|
|
},
|
|
} as ZaloConfig;
|
|
const res = resolveZaloToken(cfg, "default");
|
|
expect(res.token).toBe("default-account-token");
|
|
expect(res.source).toBe("config");
|
|
});
|
|
|
|
it("does not inherit top-level token when account token is explicitly blank", () => {
|
|
const cfg = {
|
|
botToken: "top-level-token",
|
|
accounts: {
|
|
work: {
|
|
botToken: "",
|
|
},
|
|
},
|
|
} as ZaloConfig;
|
|
const res = resolveZaloToken(cfg, "work");
|
|
expect(res.token).toBe("");
|
|
expect(res.source).toBe("none");
|
|
});
|
|
|
|
it("resolves account token when account key casing differs from normalized id", () => {
|
|
const cfg = {
|
|
accounts: {
|
|
Work: {
|
|
botToken: "work-token",
|
|
},
|
|
},
|
|
} as ZaloConfig;
|
|
const res = resolveZaloToken(cfg, "work");
|
|
expect(res.token).toBe("work-token");
|
|
expect(res.source).toBe("config");
|
|
});
|
|
|
|
it.runIf(process.platform !== "win32")("rejects symlinked token files", () => {
|
|
const dir = fs.mkdtempSync(path.join(os.tmpdir(), "openclaw-zalo-token-"));
|
|
const tokenFile = path.join(dir, "token.txt");
|
|
const tokenLink = path.join(dir, "token-link.txt");
|
|
fs.writeFileSync(tokenFile, "file-token\n", "utf8");
|
|
fs.symlinkSync(tokenFile, tokenLink);
|
|
|
|
const cfg = {
|
|
tokenFile: tokenLink,
|
|
} as ZaloConfig;
|
|
const res = resolveZaloToken(cfg);
|
|
expect(res.token).toBe("");
|
|
expect(res.source).toBe("none");
|
|
fs.rmSync(dir, { recursive: true, force: true });
|
|
});
|
|
});
|