mirror of https://github.com/openclaw/openclaw.git
132 lines
4.1 KiB
TypeScript
132 lines
4.1 KiB
TypeScript
import type { OpenClawConfig } from "openclaw/plugin-sdk/googlechat";
|
|
import { describe, expect, it } from "vitest";
|
|
import { resolveGoogleChatAccount } from "./accounts.js";
|
|
|
|
describe("resolveGoogleChatAccount", () => {
|
|
it("inherits shared defaults from accounts.default for named accounts", () => {
|
|
const cfg: OpenClawConfig = {
|
|
channels: {
|
|
googlechat: {
|
|
accounts: {
|
|
default: {
|
|
audienceType: "app-url",
|
|
audience: "https://example.com/googlechat",
|
|
webhookPath: "/googlechat",
|
|
},
|
|
andy: {
|
|
serviceAccountFile: "/tmp/andy-sa.json",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const resolved = resolveGoogleChatAccount({ cfg, accountId: "andy" });
|
|
expect(resolved.config.audienceType).toBe("app-url");
|
|
expect(resolved.config.audience).toBe("https://example.com/googlechat");
|
|
expect(resolved.config.webhookPath).toBe("/googlechat");
|
|
expect(resolved.config.serviceAccountFile).toBe("/tmp/andy-sa.json");
|
|
});
|
|
|
|
it("prefers top-level and account overrides over accounts.default", () => {
|
|
const cfg: OpenClawConfig = {
|
|
channels: {
|
|
googlechat: {
|
|
audienceType: "project-number",
|
|
audience: "1234567890",
|
|
accounts: {
|
|
default: {
|
|
audienceType: "app-url",
|
|
audience: "https://default.example.com/googlechat",
|
|
webhookPath: "/googlechat-default",
|
|
},
|
|
april: {
|
|
webhookPath: "/googlechat-april",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const resolved = resolveGoogleChatAccount({ cfg, accountId: "april" });
|
|
expect(resolved.config.audienceType).toBe("project-number");
|
|
expect(resolved.config.audience).toBe("1234567890");
|
|
expect(resolved.config.webhookPath).toBe("/googlechat-april");
|
|
});
|
|
|
|
it("does not inherit disabled state from accounts.default for named accounts", () => {
|
|
const cfg: OpenClawConfig = {
|
|
channels: {
|
|
googlechat: {
|
|
accounts: {
|
|
default: {
|
|
enabled: false,
|
|
audienceType: "app-url",
|
|
audience: "https://example.com/googlechat",
|
|
},
|
|
andy: {
|
|
serviceAccountFile: "/tmp/andy-sa.json",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const resolved = resolveGoogleChatAccount({ cfg, accountId: "andy" });
|
|
expect(resolved.enabled).toBe(true);
|
|
expect(resolved.config.enabled).toBeUndefined();
|
|
expect(resolved.config.audienceType).toBe("app-url");
|
|
});
|
|
|
|
it("does not inherit default-account credentials into named accounts", () => {
|
|
const cfg: OpenClawConfig = {
|
|
channels: {
|
|
googlechat: {
|
|
accounts: {
|
|
default: {
|
|
serviceAccountRef: {
|
|
source: "env",
|
|
provider: "test",
|
|
id: "default-sa",
|
|
},
|
|
audienceType: "app-url",
|
|
audience: "https://example.com/googlechat",
|
|
},
|
|
andy: {
|
|
serviceAccountFile: "/tmp/andy-sa.json",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const resolved = resolveGoogleChatAccount({ cfg, accountId: "andy" });
|
|
expect(resolved.credentialSource).toBe("file");
|
|
expect(resolved.credentialsFile).toBe("/tmp/andy-sa.json");
|
|
expect(resolved.config.audienceType).toBe("app-url");
|
|
});
|
|
|
|
it("does not inherit dangerous name matching from accounts.default", () => {
|
|
const cfg: OpenClawConfig = {
|
|
channels: {
|
|
googlechat: {
|
|
accounts: {
|
|
default: {
|
|
dangerouslyAllowNameMatching: true,
|
|
audienceType: "app-url",
|
|
audience: "https://example.com/googlechat",
|
|
},
|
|
andy: {
|
|
serviceAccountFile: "/tmp/andy-sa.json",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
};
|
|
|
|
const resolved = resolveGoogleChatAccount({ cfg, accountId: "andy" });
|
|
expect(resolved.config.dangerouslyAllowNameMatching).toBeUndefined();
|
|
expect(resolved.config.audienceType).toBe("app-url");
|
|
});
|
|
});
|