43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import {
|
|
connectSkillPrompt,
|
|
encodeConnectSkillToken,
|
|
parseConnectSkillToken,
|
|
} from "@/react-app/domains/session/surface/composer/connect-skill-token";
|
|
|
|
describe("connect skill token", () => {
|
|
const token = {
|
|
slug: "daytona-chrome-cdp",
|
|
name: "Daytona Chrome CDP",
|
|
marketplace: "Engineering Marketplace",
|
|
capability: "plugin:plg_01kx4t4h2aendr697p964fsg15:cob_01kx4t4hzjendr69kfjprv2wz6",
|
|
};
|
|
|
|
test("round-trips through the draft text token", () => {
|
|
const encoded = encodeConnectSkillToken(token);
|
|
expect(encoded.startsWith("[connect-skill ")).toBe(true);
|
|
expect(encoded.endsWith("]")).toBe(true);
|
|
expect(parseConnectSkillToken(encoded)).toEqual(token);
|
|
});
|
|
|
|
test("escapes separator and bracket characters in fields", () => {
|
|
const tricky = { ...token, name: "A|B ] C % D", marketplace: "M|]%" };
|
|
const encoded = encodeConnectSkillToken(tricky);
|
|
expect(parseConnectSkillToken(encoded)).toEqual(tricky);
|
|
});
|
|
|
|
test("rejects non-token segments", () => {
|
|
expect(parseConnectSkillToken("[skill invalid]")).toBeNull();
|
|
expect(parseConnectSkillToken("[connect-skill only|two]")).toBeNull();
|
|
expect(parseConnectSkillToken("plain text")).toBeNull();
|
|
});
|
|
|
|
test("expands to the full connect prompt for the model", () => {
|
|
const prompt = connectSkillPrompt(token);
|
|
expect(prompt).toContain(`"${token.name}" skill`);
|
|
expect(prompt).toContain(`"${token.marketplace}" marketplace`);
|
|
expect(prompt).toContain(token.capability);
|
|
});
|
|
});
|