Files
openclaw/src/cron/session-target.test.ts
2026-04-27 06:44:53 +01:00

49 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
resolveCronDeliverySessionKey,
resolveCronFailureNotificationSessionKey,
resolveCronNotificationSessionKey,
resolveCronSessionTargetSessionKey,
} from "./session-target.js";
describe("cron session target helpers", () => {
it("extracts and trims persistent session targets", () => {
expect(resolveCronSessionTargetSessionKey("session: agent:main:telegram:direct:123 ")).toBe(
"agent:main:telegram:direct:123",
);
});
it("rejects unsafe persistent session targets", () => {
expect(() => resolveCronSessionTargetSessionKey("session:../../outside")).toThrow(
"invalid cron sessionTarget session id",
);
});
it("prefers sessionTarget over creator sessionKey for delivery", () => {
expect(
resolveCronDeliverySessionKey({
sessionTarget: "session:agent:main:telegram:direct:123",
sessionKey: "agent:main:telegram:group:ops:sender:123",
}),
).toBe("agent:main:telegram:direct:123");
});
it("falls back to trimmed creator sessionKey for delivery", () => {
expect(
resolveCronDeliverySessionKey({
sessionTarget: "isolated",
sessionKey: " agent:main:telegram:group:ops:sender:123 ",
}),
).toBe("agent:main:telegram:group:ops:sender:123");
});
it("uses cron failure session fallback when no delivery session exists", () => {
expect(resolveCronNotificationSessionKey({ jobId: "job-1", sessionKey: " " })).toBe(
"cron:job-1:failure",
);
expect(
resolveCronFailureNotificationSessionKey({ id: "job-2", sessionTarget: "isolated" }),
).toBe("cron:job-2:failure");
});
});