mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 15:48:28 +00:00
test(cron): dedupe applyJobPatch fixture setup
This commit is contained in:
@@ -5,11 +5,15 @@ import { DEFAULT_TOP_OF_HOUR_STAGGER_MS } from "./stagger.js";
|
|||||||
import type { CronJob, CronJobPatch } from "./types.js";
|
import type { CronJob, CronJobPatch } from "./types.js";
|
||||||
|
|
||||||
describe("applyJobPatch", () => {
|
describe("applyJobPatch", () => {
|
||||||
it("clears delivery when switching to main session", () => {
|
const createIsolatedAgentTurnJob = (
|
||||||
|
id: string,
|
||||||
|
delivery: CronJob["delivery"],
|
||||||
|
overrides?: Partial<CronJob>,
|
||||||
|
): CronJob => {
|
||||||
const now = Date.now();
|
const now = Date.now();
|
||||||
const job: CronJob = {
|
return {
|
||||||
id: "job-1",
|
id,
|
||||||
name: "job-1",
|
name: id,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
createdAtMs: now,
|
createdAtMs: now,
|
||||||
updatedAtMs: now,
|
updatedAtMs: now,
|
||||||
@@ -17,62 +21,47 @@ describe("applyJobPatch", () => {
|
|||||||
sessionTarget: "isolated",
|
sessionTarget: "isolated",
|
||||||
wakeMode: "now",
|
wakeMode: "now",
|
||||||
payload: { kind: "agentTurn", message: "do it" },
|
payload: { kind: "agentTurn", message: "do it" },
|
||||||
delivery: { mode: "announce", channel: "telegram", to: "123" },
|
delivery,
|
||||||
state: {},
|
state: {},
|
||||||
|
...overrides,
|
||||||
};
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const patch: CronJobPatch = {
|
const switchToMainPatch = (): CronJobPatch => ({
|
||||||
sessionTarget: "main",
|
sessionTarget: "main",
|
||||||
payload: { kind: "systemEvent", text: "ping" },
|
payload: { kind: "systemEvent", text: "ping" },
|
||||||
};
|
});
|
||||||
|
|
||||||
expect(() => applyJobPatch(job, patch)).not.toThrow();
|
it("clears delivery when switching to main session", () => {
|
||||||
|
const job = createIsolatedAgentTurnJob("job-1", {
|
||||||
|
mode: "announce",
|
||||||
|
channel: "telegram",
|
||||||
|
to: "123",
|
||||||
|
});
|
||||||
|
|
||||||
|
expect(() => applyJobPatch(job, switchToMainPatch())).not.toThrow();
|
||||||
expect(job.sessionTarget).toBe("main");
|
expect(job.sessionTarget).toBe("main");
|
||||||
expect(job.payload.kind).toBe("systemEvent");
|
expect(job.payload.kind).toBe("systemEvent");
|
||||||
expect(job.delivery).toBeUndefined();
|
expect(job.delivery).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("keeps webhook delivery when switching to main session", () => {
|
it("keeps webhook delivery when switching to main session", () => {
|
||||||
const now = Date.now();
|
const job = createIsolatedAgentTurnJob("job-webhook", {
|
||||||
const job: CronJob = {
|
mode: "webhook",
|
||||||
id: "job-webhook",
|
to: "https://example.invalid/cron",
|
||||||
name: "job-webhook",
|
});
|
||||||
enabled: true,
|
|
||||||
createdAtMs: now,
|
|
||||||
updatedAtMs: now,
|
|
||||||
schedule: { kind: "every", everyMs: 60_000 },
|
|
||||||
sessionTarget: "isolated",
|
|
||||||
wakeMode: "now",
|
|
||||||
payload: { kind: "agentTurn", message: "do it" },
|
|
||||||
delivery: { mode: "webhook", to: "https://example.invalid/cron" },
|
|
||||||
state: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
const patch: CronJobPatch = {
|
expect(() => applyJobPatch(job, switchToMainPatch())).not.toThrow();
|
||||||
sessionTarget: "main",
|
|
||||||
payload: { kind: "systemEvent", text: "ping" },
|
|
||||||
};
|
|
||||||
|
|
||||||
expect(() => applyJobPatch(job, patch)).not.toThrow();
|
|
||||||
expect(job.sessionTarget).toBe("main");
|
expect(job.sessionTarget).toBe("main");
|
||||||
expect(job.delivery).toEqual({ mode: "webhook", to: "https://example.invalid/cron" });
|
expect(job.delivery).toEqual({ mode: "webhook", to: "https://example.invalid/cron" });
|
||||||
});
|
});
|
||||||
|
|
||||||
it("maps legacy payload delivery updates onto delivery", () => {
|
it("maps legacy payload delivery updates onto delivery", () => {
|
||||||
const now = Date.now();
|
const job = createIsolatedAgentTurnJob("job-2", {
|
||||||
const job: CronJob = {
|
mode: "announce",
|
||||||
id: "job-2",
|
channel: "telegram",
|
||||||
name: "job-2",
|
to: "123",
|
||||||
enabled: true,
|
});
|
||||||
createdAtMs: now,
|
|
||||||
updatedAtMs: now,
|
|
||||||
schedule: { kind: "every", everyMs: 60_000 },
|
|
||||||
sessionTarget: "isolated",
|
|
||||||
wakeMode: "now",
|
|
||||||
payload: { kind: "agentTurn", message: "do it" },
|
|
||||||
delivery: { mode: "announce", channel: "telegram", to: "123" },
|
|
||||||
state: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
const patch: CronJobPatch = {
|
const patch: CronJobPatch = {
|
||||||
payload: {
|
payload: {
|
||||||
@@ -101,20 +90,10 @@ describe("applyJobPatch", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("treats legacy payload targets as announce requests", () => {
|
it("treats legacy payload targets as announce requests", () => {
|
||||||
const now = Date.now();
|
const job = createIsolatedAgentTurnJob("job-3", {
|
||||||
const job: CronJob = {
|
mode: "none",
|
||||||
id: "job-3",
|
channel: "telegram",
|
||||||
name: "job-3",
|
});
|
||||||
enabled: true,
|
|
||||||
createdAtMs: now,
|
|
||||||
updatedAtMs: now,
|
|
||||||
schedule: { kind: "every", everyMs: 60_000 },
|
|
||||||
sessionTarget: "isolated",
|
|
||||||
wakeMode: "now",
|
|
||||||
payload: { kind: "agentTurn", message: "do it" },
|
|
||||||
delivery: { mode: "none", channel: "telegram" },
|
|
||||||
state: {},
|
|
||||||
};
|
|
||||||
|
|
||||||
const patch: CronJobPatch = {
|
const patch: CronJobPatch = {
|
||||||
payload: { kind: "agentTurn", to: " 999 " },
|
payload: { kind: "agentTurn", to: " 999 " },
|
||||||
|
|||||||
Reference in New Issue
Block a user