Files
clawdbot/src/config/provider-capabilities.test.ts
Peter Steinberger 6d378ee608 feat(telegram): inline keyboard buttons (#491)
Co-authored-by: Azade <azade@hey.com>
2026-01-09 20:47:03 +01:00

88 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { ClawdbotConfig } from "./config.js";
import { resolveProviderCapabilities } from "./provider-capabilities.js";
describe("resolveProviderCapabilities", () => {
it("returns undefined for missing inputs", () => {
expect(resolveProviderCapabilities({})).toBeUndefined();
expect(
resolveProviderCapabilities({ cfg: {} as ClawdbotConfig }),
).toBeUndefined();
expect(
resolveProviderCapabilities({ cfg: {} as ClawdbotConfig, provider: "" }),
).toBeUndefined();
});
it("normalizes and prefers per-account capabilities", () => {
const cfg = {
telegram: {
capabilities: [" inlineButtons ", ""],
accounts: {
default: {
capabilities: [" perAccount ", " "],
},
},
},
} satisfies Partial<ClawdbotConfig>;
expect(
resolveProviderCapabilities({
cfg: cfg as ClawdbotConfig,
provider: "telegram",
accountId: "default",
}),
).toEqual(["perAccount"]);
});
it("falls back to provider capabilities when account capabilities are missing", () => {
const cfg = {
telegram: {
capabilities: ["inlineButtons"],
accounts: {
default: {},
},
},
} satisfies Partial<ClawdbotConfig>;
expect(
resolveProviderCapabilities({
cfg: cfg as ClawdbotConfig,
provider: "telegram",
accountId: "default",
}),
).toEqual(["inlineButtons"]);
});
it("matches account keys case-insensitively", () => {
const cfg = {
slack: {
accounts: {
Family: { capabilities: ["threads"] },
},
},
} satisfies Partial<ClawdbotConfig>;
expect(
resolveProviderCapabilities({
cfg: cfg as ClawdbotConfig,
provider: "slack",
accountId: "family",
}),
).toEqual(["threads"]);
});
it("supports msteams capabilities", () => {
const cfg = {
msteams: { capabilities: [" polls ", ""] },
} satisfies Partial<ClawdbotConfig>;
expect(
resolveProviderCapabilities({
cfg: cfg as ClawdbotConfig,
provider: "msteams",
}),
).toEqual(["polls"]);
});
});