openclaw/src/config/config.irc.test.ts

134 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { validateConfigObject } from "./config.js";
function expectValidConfig(result: ReturnType<typeof validateConfigObject>) {
expect(result.ok).toBe(true);
if (!result.ok) {
throw new Error("expected config to be valid");
}
return result.config;
}
function expectInvalidConfig(result: ReturnType<typeof validateConfigObject>) {
expect(result.ok).toBe(false);
if (result.ok) {
throw new Error("expected config to be invalid");
}
return result.issues;
}
describe("config irc", () => {
it("accepts basic irc config", () => {
const res = validateConfigObject({
channels: {
irc: {
host: "irc.libera.chat",
nick: "openclaw-bot",
channels: ["#openclaw"],
},
},
});
const config = expectValidConfig(res);
expect(config.channels?.irc?.host).toBe("irc.libera.chat");
expect(config.channels?.irc?.nick).toBe("openclaw-bot");
});
it('rejects irc.dmPolicy="open" without allowFrom "*"', () => {
const res = validateConfigObject({
channels: {
irc: {
dmPolicy: "open",
allowFrom: ["alice"],
},
},
});
const issues = expectInvalidConfig(res);
expect(issues[0]?.path).toBe("channels.irc.allowFrom");
});
it('accepts irc.dmPolicy="open" with allowFrom "*"', () => {
const res = validateConfigObject({
channels: {
irc: {
dmPolicy: "open",
allowFrom: ["*"],
},
},
});
const config = expectValidConfig(res);
expect(config.channels?.irc?.dmPolicy).toBe("open");
});
it("accepts mixed allowFrom value types for IRC", () => {
const res = validateConfigObject({
channels: {
irc: {
allowFrom: [12345, "alice"],
groupAllowFrom: [67890, "alice!ident@example.org"],
groups: {
"#ops": {
allowFrom: [42, "alice"],
},
},
},
},
});
const config = expectValidConfig(res);
expect(config.channels?.irc?.allowFrom).toEqual([12345, "alice"]);
expect(config.channels?.irc?.groupAllowFrom).toEqual([67890, "alice!ident@example.org"]);
expect(config.channels?.irc?.groups?.["#ops"]?.allowFrom).toEqual([42, "alice"]);
});
it("rejects nickserv register without registerEmail", () => {
const res = validateConfigObject({
channels: {
irc: {
nickserv: {
register: true,
password: "secret",
},
},
},
});
const issues = expectInvalidConfig(res);
expect(issues[0]?.path).toBe("channels.irc.nickserv.registerEmail");
});
it("accepts nickserv register with password and registerEmail", () => {
const res = validateConfigObject({
channels: {
irc: {
nickserv: {
register: true,
password: "secret",
registerEmail: "bot@example.com",
},
},
},
});
const config = expectValidConfig(res);
expect(config.channels?.irc?.nickserv?.register).toBe(true);
});
it("accepts nickserv register with registerEmail only (password may come from env)", () => {
const res = validateConfigObject({
channels: {
irc: {
nickserv: {
register: true,
registerEmail: "bot@example.com",
},
},
},
});
expectValidConfig(res);
});
});