43 lines
1.7 KiB
TypeScript
43 lines
1.7 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
import { z } from "zod";
|
|
import { defineTask, redact, TaskRegistry, UnknownTaskError } from "../src/index.ts";
|
|
|
|
describe("TaskRegistry", () => {
|
|
it("注册表默认为空,未注册任务明确报错", () => {
|
|
const reg = new TaskRegistry();
|
|
expect(reg.names()).toEqual([]);
|
|
expect(reg.has("submitDownload")).toBe(false);
|
|
expect(() => reg.latest("submitDownload")).toThrow(UnknownTaskError);
|
|
});
|
|
|
|
it("latest 取最高版本;select 按 name@version / @version 过滤", () => {
|
|
const mk = (name: string, version: number) =>
|
|
defineTask({ name, version, inputSchema: z.object({}), handler: async () => null });
|
|
const reg = new TaskRegistry().register(mk("a", 1), mk("a", 2), mk("b", 1));
|
|
expect(reg.latest("a").version).toBe(2);
|
|
expect(reg.select(["a@1"]).map((d) => `${d.name}@${d.version}`)).toEqual(["a@1"]);
|
|
expect(reg.select(["@1"]).map((d) => `${d.name}@${d.version}`)).toEqual(["a@1", "b@1"]);
|
|
expect(reg.select(["a"])).toHaveLength(2);
|
|
expect(reg.select()).toHaveLength(3);
|
|
expect(() => reg.register(mk("a", 1))).toThrow(/already registered/);
|
|
expect(() => reg.latest("zzz")).toThrow(UnknownTaskError);
|
|
expect(() => mk("a", 0)).toThrow(/invalid task version/);
|
|
});
|
|
});
|
|
|
|
describe("redact", () => {
|
|
it("敏感键与 URL 凭证参数脱敏", () => {
|
|
expect(
|
|
redact({
|
|
url: "https://pt.example/download.php?id=1&passkey=abcdef123",
|
|
nested: { apiKey: "k", password: "p", ok: 1 },
|
|
list: ["http://x/rss?sign=zz&x=1"],
|
|
}),
|
|
).toEqual({
|
|
url: "https://pt.example/download.php?id=1&passkey=***",
|
|
nested: { apiKey: "***", password: "***", ok: 1 },
|
|
list: ["http://x/rss?sign=***&x=1"],
|
|
});
|
|
});
|
|
});
|