Files
clawdbot/src/telegram/reaction-level.test.ts
2026-01-15 17:07:38 +00:00

118 lines
3.7 KiB
TypeScript

import { afterAll, beforeAll, describe, expect, it } from "vitest";
import type { ClawdbotConfig } from "../config/config.js";
import { resolveTelegramReactionLevel } from "./reaction-level.js";
describe("resolveTelegramReactionLevel", () => {
const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN;
beforeAll(() => {
process.env.TELEGRAM_BOT_TOKEN = "test-token";
});
afterAll(() => {
if (prevTelegramToken === undefined) {
delete process.env.TELEGRAM_BOT_TOKEN;
} else {
process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken;
}
});
it("defaults to ack level when reactionLevel is not set", () => {
const cfg: ClawdbotConfig = {
channels: { telegram: {} },
};
const result = resolveTelegramReactionLevel({ cfg });
expect(result.level).toBe("ack");
expect(result.ackEnabled).toBe(true);
expect(result.agentReactionsEnabled).toBe(false);
expect(result.agentReactionGuidance).toBeUndefined();
});
it("returns off level with no reactions enabled", () => {
const cfg: ClawdbotConfig = {
channels: { telegram: { reactionLevel: "off" } },
};
const result = resolveTelegramReactionLevel({ cfg });
expect(result.level).toBe("off");
expect(result.ackEnabled).toBe(false);
expect(result.agentReactionsEnabled).toBe(false);
expect(result.agentReactionGuidance).toBeUndefined();
});
it("returns ack level with only ackEnabled", () => {
const cfg: ClawdbotConfig = {
channels: { telegram: { reactionLevel: "ack" } },
};
const result = resolveTelegramReactionLevel({ cfg });
expect(result.level).toBe("ack");
expect(result.ackEnabled).toBe(true);
expect(result.agentReactionsEnabled).toBe(false);
expect(result.agentReactionGuidance).toBeUndefined();
});
it("returns minimal level with agent reactions enabled and minimal guidance", () => {
const cfg: ClawdbotConfig = {
channels: { telegram: { reactionLevel: "minimal" } },
};
const result = resolveTelegramReactionLevel({ cfg });
expect(result.level).toBe("minimal");
expect(result.ackEnabled).toBe(false);
expect(result.agentReactionsEnabled).toBe(true);
expect(result.agentReactionGuidance).toBe("minimal");
});
it("returns extensive level with agent reactions enabled and extensive guidance", () => {
const cfg: ClawdbotConfig = {
channels: { telegram: { reactionLevel: "extensive" } },
};
const result = resolveTelegramReactionLevel({ cfg });
expect(result.level).toBe("extensive");
expect(result.ackEnabled).toBe(false);
expect(result.agentReactionsEnabled).toBe(true);
expect(result.agentReactionGuidance).toBe("extensive");
});
it("resolves reaction level from a specific account", () => {
const cfg: ClawdbotConfig = {
channels: {
telegram: {
reactionLevel: "ack",
accounts: {
work: { botToken: "tok-work", reactionLevel: "extensive" },
},
},
},
};
const result = resolveTelegramReactionLevel({ cfg, accountId: "work" });
expect(result.level).toBe("extensive");
expect(result.ackEnabled).toBe(false);
expect(result.agentReactionsEnabled).toBe(true);
expect(result.agentReactionGuidance).toBe("extensive");
});
it("falls back to global level when account has no reactionLevel", () => {
const cfg: ClawdbotConfig = {
channels: {
telegram: {
reactionLevel: "minimal",
accounts: {
work: { botToken: "tok-work" },
},
},
},
};
const result = resolveTelegramReactionLevel({ cfg, accountId: "work" });
expect(result.level).toBe("minimal");
expect(result.agentReactionsEnabled).toBe(true);
expect(result.agentReactionGuidance).toBe("minimal");
});
});