import { describe, expect, it } from "vitest"; import { FeishuConfigSchema, FeishuGroupSchema } from "./config-schema.js";
function expectSchemaIssue(
result: ReturnType<typeof FeishuConfigSchema.safeParse>,
issuePath: string,
) {
expect(result.success).toBe(false); if (!result.success) {
expect(result.error.issues.some((issue) => issue.path.join(".") === issuePath)).toBe(true);
}
}
describe("FeishuConfigSchema webhook validation", () => {
it("applies top-level defaults", () => { const result = FeishuConfigSchema.parse({});
expect(result.domain).toBe("feishu");
expect(result.connectionMode).toBe("websocket");
expect(result.webhookPath).toBe("/feishu/events");
expect(result.dmPolicy).toBe("pairing");
expect(result.groupPolicy).toBe("allowlist"); // requireMention has no schema-level default now — it is resolved at runtime // through shared channel group-policy resolution, with an open-group override // that defaults to false only when requireMention is otherwise unset.
expect(result.requireMention).toBeUndefined();
});
it("does not force top-level policy defaults into account config", () => { const result = FeishuConfigSchema.parse({
accounts: {
main: {},
},
});
describe("FeishuConfigSchema replyInThread", () => {
it("accepts replyInThread at top level", () => { const result = FeishuConfigSchema.parse({ replyInThread: "enabled" });
expect(result.replyInThread).toBe("enabled");
});
it("defaults replyInThread to undefined when not set", () => { const result = FeishuConfigSchema.parse({});
expect(result.replyInThread).toBeUndefined();
});
describe("FeishuConfigSchema defaultAccount", () => {
it("accepts defaultAccount when it matches an account key", () => { const result = FeishuConfigSchema.safeParse({
defaultAccount: "router-d",
accounts: { "router-d": { appId: "cli_router", appSecret: "secret_router" }, // pragma: allowlist secret
},
});
expect(result.success).toBe(true);
});
it("rejects defaultAccount when it does not match an account key", () => { const result = FeishuConfigSchema.safeParse({
defaultAccount: "router-d",
accounts: {
backup: { appId: "cli_backup", appSecret: "secret_backup" }, // pragma: allowlist secret
},
});
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.