// Mattermost tests cover config schema plugin behavior. import { describe, expect, it } from "vitest"; import { MattermostConfigSchema } from "./config-schema-core.js"; describe("MattermostConfigSchema", () => { it("accepts SecretRef botToken at top-level", () => { const result = MattermostConfigSchema.safeParse({ botToken: { source: "env", provider: "default", id: "MATTERMOST_BOT_TOKEN" }, baseUrl: "https://chat.example.com", }); expect(result.success).toBe(true); }); it("accepts SecretRef botToken on account", () => { const result = MattermostConfigSchema.safeParse({ accounts: { main: { botToken: { source: "env", provider: "default", id: "MATTERMOST_BOT_TOKEN_MAIN" }, baseUrl: "https://chat.example.com", }, }, }); expect(result.success).toBe(true); }); it("accepts replyToMode", () => { const result = MattermostConfigSchema.safeParse({ replyToMode: "all", }); expect(result.success).toBe(true); }); it('rejects dmPolicy="open" without wildcard allowFrom', () => { const result = MattermostConfigSchema.safeParse({ dmPolicy: "open", }); expect(result.success).toBe(false); }); it('accepts dmPolicy="open" with wildcard allowFrom', () => { const result = MattermostConfigSchema.safeParse({ dmPolicy: "open", allowFrom: ["*"], }); expect(result.success).toBe(true); }); it("accepts documented streaming modes and progress config", () => { const result = MattermostConfigSchema.safeParse({ streaming: { mode: "progress", progress: { label: "Shelling", maxLines: 4, toolProgress: false, }, }, accounts: { quiet: { streaming: "off", }, }, }); expect(result.success).toBe(true); }); it("accepts groups with requireMention", () => { const result = MattermostConfigSchema.safeParse({ groups: { "*": { requireMention: true }, "channel-123": { requireMention: false }, }, }); expect(result.success).toBe(true); }); it("accepts groups on account", () => { const result = MattermostConfigSchema.safeParse({ accounts: { main: { baseUrl: "https://chat.example.com", groups: { "*": { requireMention: true }, }, }, }, }); expect(result.success).toBe(true); }); it("rejects unknown properties inside groups entry", () => { const result = MattermostConfigSchema.safeParse({ groups: { "*": { requireMention: true, unknownProp: "bad" }, }, }); expect(result.success).toBe(false); }); it("rejects unsupported direct-message reply threading config", () => { const result = MattermostConfigSchema.safeParse({ dm: { replyToMode: "all", }, }); expect(result.success).toBe(false); }); it("rejects unsupported per-chat-type reply threading config", () => { const result = MattermostConfigSchema.safeParse({ replyToModeByChatType: { direct: "all", }, }); expect(result.success).toBe(false); }); });