diff --git a/src/config/slack-token-validation.test.ts b/src/config/slack-token-validation.test.ts index 8a678afdc1..6ebfcabb85 100644 --- a/src/config/slack-token-validation.test.ts +++ b/src/config/slack-token-validation.test.ts @@ -33,4 +33,39 @@ describe("Slack token config fields", () => { }); expect(res.ok).toBe(true); }); + + it("rejects invalid userTokenReadOnly types", () => { + const res = validateConfigObject({ + channels: { + slack: { + botToken: "xoxb-any", + appToken: "xapp-any", + userToken: "xoxp-any", + // oxlint-disable-next-line typescript/no-explicit-any + userTokenReadOnly: "no" as any, + }, + }, + }); + expect(res.ok).toBe(false); + if (!res.ok) { + expect(res.issues.some((iss) => iss.path.includes("userTokenReadOnly"))).toBe(true); + } + }); + + it("rejects invalid userToken types", () => { + const res = validateConfigObject({ + channels: { + slack: { + botToken: "xoxb-any", + appToken: "xapp-any", + // oxlint-disable-next-line typescript/no-explicit-any + userToken: 123 as any, + }, + }, + }); + expect(res.ok).toBe(false); + if (!res.ok) { + expect(res.issues.some((iss) => iss.path.includes("userToken"))).toBe(true); + } + }); }); diff --git a/src/macos/relay-smoke.test.ts b/src/macos/relay-smoke.test.ts index bbd75c5719..891efd6767 100644 --- a/src/macos/relay-smoke.test.ts +++ b/src/macos/relay-smoke.test.ts @@ -10,6 +10,18 @@ describe("parseRelaySmokeTest", () => { expect(parseRelaySmokeTest(["--smoke", "qr"], {})).toBe("qr"); }); + it("rejects --smoke without a value", () => { + expect(() => parseRelaySmokeTest(["--smoke"], {})).toThrow( + "Missing value for --smoke (expected: qr)", + ); + }); + + it("rejects --smoke when the next arg is another flag", () => { + expect(() => parseRelaySmokeTest(["--smoke", "--smoke-qr"], {})).toThrow( + "Missing value for --smoke (expected: qr)", + ); + }); + it("parses --smoke-qr", () => { expect(parseRelaySmokeTest(["--smoke-qr"], {})).toBe("qr"); }); @@ -19,9 +31,18 @@ describe("parseRelaySmokeTest", () => { expect(parseRelaySmokeTest(["send"], { OPENCLAW_SMOKE_QR: "1" })).toBe(null); }); + it("supports OPENCLAW_SMOKE=qr only when no args", () => { + expect(parseRelaySmokeTest([], { OPENCLAW_SMOKE: "qr" })).toBe("qr"); + expect(parseRelaySmokeTest(["send"], { OPENCLAW_SMOKE: "qr" })).toBe(null); + }); + it("rejects unknown smoke values", () => { expect(() => parseRelaySmokeTest(["--smoke", "nope"], {})).toThrow("Unknown smoke test"); }); + + it("prefers explicit --smoke over env vars", () => { + expect(parseRelaySmokeTest(["--smoke", "qr"], { OPENCLAW_SMOKE: "nope" })).toBe("qr"); + }); }); describe("runRelaySmokeTest", () => {