import { describe, expect, it } from "vitest"; import { looksLikeFeishuId, normalizeFeishuTarget, resolveReceiveIdType } from "./targets.js"; describe("resolveReceiveIdType", () => { it("resolves chat IDs by oc_ prefix", () => { expect(resolveReceiveIdType("oc_123")).toBe("chat_id"); }); it("resolves open IDs by ou_ prefix", () => { expect(resolveReceiveIdType("ou_123")).toBe("open_id"); }); it("defaults unprefixed IDs to user_id", () => { expect(resolveReceiveIdType("u_123")).toBe("user_id"); }); it("treats explicit group targets as chat_id", () => { expect(resolveReceiveIdType("group:oc_123")).toBe("chat_id"); }); it("treats explicit channel targets as chat_id", () => { expect(resolveReceiveIdType("channel:oc_123")).toBe("chat_id"); }); it("treats dm-prefixed open IDs as open_id", () => { expect(resolveReceiveIdType("dm:ou_123")).toBe("open_id"); }); }); describe("normalizeFeishuTarget", () => { it("strips provider and user prefixes", () => { expect(normalizeFeishuTarget("feishu:user:ou_123")).toBe("ou_123"); expect(normalizeFeishuTarget("lark:user:ou_123")).toBe("ou_123"); }); it("strips provider and chat prefixes", () => { expect(normalizeFeishuTarget("feishu:chat:oc_123")).toBe("oc_123"); }); it("normalizes group/channel prefixes to chat ids", () => { expect(normalizeFeishuTarget("group:oc_123")).toBe("oc_123"); expect(normalizeFeishuTarget("feishu:group:oc_123")).toBe("oc_123"); expect(normalizeFeishuTarget("channel:oc_456")).toBe("oc_456"); expect(normalizeFeishuTarget("lark:channel:oc_456")).toBe("oc_456"); }); it("accepts provider-prefixed raw ids", () => { expect(normalizeFeishuTarget("feishu:ou_123")).toBe("ou_123"); }); it("strips provider and dm prefixes", () => { expect(normalizeFeishuTarget("lark:dm:ou_123")).toBe("ou_123"); }); }); describe("looksLikeFeishuId", () => { it("accepts provider-prefixed user targets", () => { expect(looksLikeFeishuId("feishu:user:ou_123")).toBe(true); }); it("accepts provider-prefixed chat targets", () => { expect(looksLikeFeishuId("lark:chat:oc_123")).toBe(true); }); it("accepts group/channel targets", () => { expect(looksLikeFeishuId("feishu:group:oc_123")).toBe(true); expect(looksLikeFeishuId("group:oc_123")).toBe(true); expect(looksLikeFeishuId("channel:oc_456")).toBe(true); }); });