import { describe, expect, it } from "bun:test"; import { buildSkillMentionReferences, resolveSkillMentions } from "@/lib/canvas/canvas-skill-mentions"; import type { Skill } from "@/services/api/skills"; function skill(overrides: Partial = {}): Skill { return { skill_id: "skill-1", skill_name: "镜头拆解", description: "把文本拆成可执行镜头", instruction: "先读取当前画布,再按镜头顺序创建节点。", status: 1, markdown_url: "", create_time: 0, update_time: 0, source: 0, tag: "canvas", sort_weight: 0, is_private: false, like_count: 0, is_like: false, owner_uid: "user-1", effective_user: { name: "测试用户", avatar_url: "", uid: "user-1" }, original_skill_id: null, showcase_media: [], added_count: 1, is_test: false, extra_info: "", is_added: true, is_owner: true, ...overrides, }; } describe("canvas skill mentions", () => { it("only exposes added skills as composer references", () => { const references = buildSkillMentionReferences([skill(), skill({ skill_id: "skill-2", skill_name: "未加入", is_added: false })]); expect(references.map((item) => item.id)).toEqual(["skill:skill-1"]); expect(references[0]?.kind).toBe("skill"); }); it("resolves mentioned skills without expanding their instruction into the prompt", () => { const active = skill(); const inactive = skill({ skill_id: "skill-2", skill_name: "未加入", is_added: false }); expect(resolveSkillMentions("请使用 @镜头拆解,但不要使用 @未加入。", [active, inactive]).map((item) => item.skill_id)).toEqual(["skill-1"]); }); });