Files
UHD_Media_Tool/apps/server/test/schedules/module-jobs.test.ts
T
rootandClaude Opus 5.5 a0b0a64246 refactor(schedules): register pi.token_refresh and auth.cleanup as scheduled jobs
Pi token refresh (10 min) and auth session cleanup (1 h) no longer run
their own setInterval; both register in the maintain group of the
schedules registry with the same default intervals.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-09-28 13:44:48 +08:00

52 lines
2.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { createAuthSettingsModule } from "../../src/modules/auth-settings/index.ts";
import { createPiModule } from "../../src/modules/pi/index.ts";
import { scheduleRegistry } from "../../src/modules/schedules/registry.ts";
import type { ServerContext } from "../../src/modules/types.ts";
// W8-A:pi token 刷新与认证表清理不再自建计时器,改为登记到定时任务注册表(维护组、默认开启、周期不变)。
describe("模块周期任务登记", () => {
it("pi.token_refresh:10 分钟,执行体按时间槽幂等入队 refreshPiTokens", async () => {
const enqueued: { name: string; key: string }[] = [];
const ctx = {
engine: {
enqueue: (name: string, _i: unknown, o: { idempotencyKey: string }) => {
enqueued.push({ name, key: o.idempotencyKey });
return Promise.resolve({ deduplicated: false });
},
},
} as unknown as ServerContext;
const mod = createPiModule();
await mod.start?.(ctx);
const def = scheduleRegistry(ctx).get("pi.token_refresh");
expect(def?.defaults).toMatchObject({ group: "maintain", schedule: { type: "interval", everyMs: 600_000 } });
expect(def?.defaults.enabled).not.toBe(false);
await def?.run({
jobId: "pi.token_refresh",
runId: "r",
trigger: "schedule",
now: new Date(),
config: {},
slot: "42",
});
expect(enqueued).toEqual([{ name: "refreshPiTokens", key: "refreshPiTokens:42" }]);
await mod.stop?.();
});
it("refreshIntervalMs<=0 不登记", async () => {
const ctx = {} as ServerContext;
await createPiModule({ refreshIntervalMs: 0 }).start?.(ctx);
expect(scheduleRegistry(ctx).get("pi.token_refresh")).toBeUndefined();
});
it("auth.cleanup:1 小时,维护组", async () => {
const ctx = {} as ServerContext;
await createAuthSettingsModule({ setupTokenOnStart: false }).start?.(ctx);
expect(scheduleRegistry(ctx).get("auth.cleanup")?.defaults).toMatchObject({
group: "maintain",
schedule: { type: "interval", everyMs: 3_600_000 },
});
});
});