mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-24 16:32:29 +00:00
154 lines
4.4 KiB
TypeScript
154 lines
4.4 KiB
TypeScript
import { DEFAULT_ACCOUNT_ID } from "openclaw/plugin-sdk/setup";
|
|
import { describe, expect, it, vi } from "vitest";
|
|
|
|
const resolveMattermostAccount = vi.hoisted(() => vi.fn());
|
|
const normalizeMattermostBaseUrl = vi.hoisted(() => vi.fn((value: string | undefined) => value));
|
|
const hasConfiguredSecretInput = vi.hoisted(() => vi.fn((value: unknown) => Boolean(value)));
|
|
|
|
vi.mock("./mattermost/accounts.js", () => ({
|
|
resolveMattermostAccount,
|
|
}));
|
|
|
|
vi.mock("./mattermost/client.js", () => ({
|
|
normalizeMattermostBaseUrl,
|
|
}));
|
|
|
|
vi.mock("./secret-input.js", () => ({
|
|
hasConfiguredSecretInput,
|
|
}));
|
|
|
|
describe("mattermost setup core", () => {
|
|
it("reports configuration only when token and base url are both present", async () => {
|
|
const { isMattermostConfigured } = await import("./setup-core.js");
|
|
|
|
expect(
|
|
isMattermostConfigured({
|
|
botToken: "bot-token",
|
|
baseUrl: "https://chat.example.com",
|
|
config: {},
|
|
} as never),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
isMattermostConfigured({
|
|
botToken: "",
|
|
baseUrl: "https://chat.example.com",
|
|
config: { botToken: "secret-ref" },
|
|
} as never),
|
|
).toBe(true);
|
|
|
|
expect(
|
|
isMattermostConfigured({
|
|
botToken: "",
|
|
baseUrl: "",
|
|
config: {},
|
|
} as never),
|
|
).toBe(false);
|
|
});
|
|
|
|
it("resolves accounts with unresolved secret refs allowed", async () => {
|
|
resolveMattermostAccount.mockReturnValue({ accountId: "default" });
|
|
|
|
const { resolveMattermostAccountWithSecrets } = await import("./setup-core.js");
|
|
const cfg = { channels: { mattermost: {} } };
|
|
|
|
expect(resolveMattermostAccountWithSecrets(cfg as never, "default")).toEqual({
|
|
accountId: "default",
|
|
});
|
|
expect(resolveMattermostAccount).toHaveBeenCalledWith({
|
|
cfg,
|
|
accountId: "default",
|
|
allowUnresolvedSecretRef: true,
|
|
});
|
|
});
|
|
|
|
it("validates env and explicit credential requirements", async () => {
|
|
const { mattermostSetupAdapter } = await import("./setup-core.js");
|
|
const validateInput = mattermostSetupAdapter.validateInput;
|
|
expect(validateInput).toBeTypeOf("function");
|
|
|
|
expect(
|
|
validateInput!({
|
|
accountId: "secondary",
|
|
input: { useEnv: true },
|
|
} as never),
|
|
).toBe("Mattermost env vars can only be used for the default account.");
|
|
|
|
normalizeMattermostBaseUrl.mockReturnValue(undefined);
|
|
expect(
|
|
validateInput!({
|
|
accountId: DEFAULT_ACCOUNT_ID,
|
|
input: { useEnv: false, botToken: "tok", httpUrl: "not-a-url" },
|
|
} as never),
|
|
).toBe("Mattermost requires --bot-token and --http-url (or --use-env).");
|
|
|
|
normalizeMattermostBaseUrl.mockReturnValue("https://chat.example.com");
|
|
expect(
|
|
validateInput!({
|
|
accountId: DEFAULT_ACCOUNT_ID,
|
|
input: { useEnv: false, botToken: "tok", httpUrl: "https://chat.example.com" },
|
|
} as never),
|
|
).toBeNull();
|
|
});
|
|
|
|
it("applies normalized config for default and named accounts", async () => {
|
|
normalizeMattermostBaseUrl.mockReturnValue("https://chat.example.com");
|
|
const { mattermostSetupAdapter } = await import("./setup-core.js");
|
|
const applyAccountConfig = mattermostSetupAdapter.applyAccountConfig;
|
|
expect(applyAccountConfig).toBeTypeOf("function");
|
|
|
|
expect(
|
|
applyAccountConfig!({
|
|
cfg: { channels: { mattermost: {} } },
|
|
accountId: DEFAULT_ACCOUNT_ID,
|
|
input: {
|
|
name: "Default",
|
|
botToken: "tok",
|
|
httpUrl: "https://chat.example.com",
|
|
},
|
|
} as never),
|
|
).toEqual({
|
|
channels: {
|
|
mattermost: {
|
|
enabled: true,
|
|
name: "Default",
|
|
botToken: "tok",
|
|
baseUrl: "https://chat.example.com",
|
|
},
|
|
},
|
|
});
|
|
|
|
expect(
|
|
applyAccountConfig!({
|
|
cfg: {
|
|
channels: {
|
|
mattermost: {
|
|
name: "Legacy",
|
|
},
|
|
},
|
|
},
|
|
accountId: "Work Team",
|
|
input: {
|
|
name: "Work",
|
|
botToken: "tok2",
|
|
httpUrl: "https://chat.example.com",
|
|
},
|
|
} as never),
|
|
).toMatchObject({
|
|
channels: {
|
|
mattermost: {
|
|
accounts: {
|
|
default: { name: "Legacy" },
|
|
"work-team": {
|
|
enabled: true,
|
|
name: "Work",
|
|
botToken: "tok2",
|
|
baseUrl: "https://chat.example.com",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
});
|
|
});
|