Files
openwork/apps/app/tests/connect-skill-token.test.ts
T

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);
});
});