Cron: route reminders by session namespace

This commit is contained in:
Vignesh Natarajan
2026-02-16 14:29:21 -08:00
committed by Peter Steinberger
parent f452a7a60b
commit f988abf202
19 changed files with 530 additions and 32 deletions

View File

@@ -79,6 +79,30 @@ describe("normalizeCronJobCreate", () => {
expect(cleared.agentId).toBeNull();
});
it("trims sessionKey and drops blanks", () => {
const normalized = normalizeCronJobCreate({
name: "session-key",
enabled: true,
schedule: { kind: "cron", expr: "* * * * *" },
sessionTarget: "main",
wakeMode: "next-heartbeat",
sessionKey: " agent:main:discord:channel:ops ",
payload: { kind: "systemEvent", text: "hi" },
}) as unknown as Record<string, unknown>;
expect(normalized.sessionKey).toBe("agent:main:discord:channel:ops");
const cleared = normalizeCronJobCreate({
name: "session-key-clear",
enabled: true,
schedule: { kind: "cron", expr: "* * * * *" },
sessionTarget: "main",
wakeMode: "next-heartbeat",
sessionKey: " ",
payload: { kind: "systemEvent", text: "hi" },
}) as unknown as Record<string, unknown>;
expect("sessionKey" in cleared).toBe(false);
});
it("canonicalizes payload.channel casing", () => {
const normalized = normalizeCronJobCreate({
name: "legacy provider",
@@ -329,4 +353,16 @@ describe("normalizeCronJobPatch", () => {
expect(payload.channel).toBe("telegram");
expect(payload.to).toBe("+15550001111");
});
it("preserves null sessionKey patches and trims string values", () => {
const trimmed = normalizeCronJobPatch({
sessionKey: " agent:main:telegram:group:-100123 ",
}) as unknown as Record<string, unknown>;
expect(trimmed.sessionKey).toBe("agent:main:telegram:group:-100123");
const cleared = normalizeCronJobPatch({
sessionKey: null,
}) as unknown as Record<string, unknown>;
expect(cleared.sessionKey).toBeNull();
});
});