Files
openclaw/extensions/discord/src/client.test.ts
2026-05-10 12:37:10 +01:00

84 lines
2.2 KiB
TypeScript

import type { OpenClawConfig } from "openclaw/plugin-sdk/config-contracts";
import { afterEach, describe, expect, it, vi } from "vitest";
import { createDiscordRestClient } from "./client.js";
import type { RequestClient } from "./internal/discord.js";
afterEach(() => {
vi.unstubAllEnvs();
});
describe("createDiscordRestClient", () => {
const fakeRest = {} as RequestClient;
it("uses explicit token without resolving config token SecretRefs", () => {
const cfg = {
channels: {
discord: {
token: {
source: "exec",
provider: "vault",
id: "discord/bot-token",
},
},
},
} as OpenClawConfig;
const result = createDiscordRestClient({ cfg, token: "Bot explicit-token", rest: fakeRest });
expect(result.token).toBe("explicit-token");
expect(result.rest).toBe(fakeRest);
expect(result.account.accountId).toBe("default");
});
it("keeps account retry config when explicit token is provided", () => {
const cfg = {
channels: {
discord: {
accounts: {
ops: {
token: {
source: "exec",
provider: "vault",
id: "discord/ops-token",
},
retry: {
attempts: 7,
},
},
},
},
},
} as OpenClawConfig;
const result = createDiscordRestClient({
cfg,
accountId: "ops",
token: "Bot explicit-account-token",
rest: fakeRest,
});
expect(result.token).toBe("explicit-account-token");
expect(result.account.accountId).toBe("ops");
expect(result.account.config.retry).toMatchObject({ attempts: 7 });
});
it("still fails closed when no explicit token is provided and config token is unresolved", () => {
vi.stubEnv("DISCORD_BOT_TOKEN", "env-token");
const cfg = {
channels: {
discord: {
token: {
source: "file",
provider: "default",
id: "/discord/token",
},
},
},
} as OpenClawConfig;
expect(() => createDiscordRestClient({ cfg, rest: fakeRest })).toThrow(
/configured for account "default" is unavailable/i,
);
});
});