| ff39a5e8 Andy McCall ↶ |
1 |
import { test } from "node:test"; |
| 2 |
import assert from "node:assert/strict"; |
| 3 |
import { SseParser, validName, nameFromFolder, suggestAgentName, expandHome, shimArgs, mergeMcpConfig, projectForFolder, esc } from "../out/pure.mjs"; |
| 4 |
|
| 5 |
test("server-sent events are split into their data, across chunks", () => { |
| 6 |
const p = new SseParser(); |
| 7 |
assert.deepEqual(p.push(": subscribed\n\nda"), []); |
| 8 |
assert.deepEqual(p.push('ta: {"kind":"message.posted"}\n\ndata: a\r\ndata: b\n\n'), ['{"kind":"message.posted"}', "a\nb"]); |
| 9 |
}); |
| 10 |
|
| 11 |
test("names are Spectra's", () => { |
| 12 |
assert.ok(validName("claude-oxygen")); |
| 13 |
assert.ok(!validName("Claude")); |
| 14 |
assert.ok(!validName("-x")); |
| 15 |
assert.equal(nameFromFolder("/home/a/My Book/"), "my-book"); |
| 16 |
assert.equal(suggestAgentName("claude-code", "book", []), "claude-book"); |
| 17 |
assert.equal(suggestAgentName("antigravity", "book", ["agy-book"]), "agy-book-2"); |
| 18 |
}); |
| 19 |
|
| 20 |
test("homes and shim arguments", () => { |
| 21 |
assert.equal(expandHome("~/.spectra-agents/x", "/home/a"), "/home/a/.spectra-agents/x"); |
| 22 |
assert.equal(expandHome("/abs", "/home/a"), "/abs"); |
| 23 |
assert.deepEqual(shimArgs("claude-book", "/h"), ["mcp", "--agent", "claude-book", "--home", "/h"]); |
| 24 |
}); |
| 25 |
|
| 26 |
test("Antigravity's config keeps its other servers", () => { |
| 27 |
const before = JSON.stringify({ mcpServers: { other: { command: "x" } }, theme: "dark" }); |
| 28 |
const after = JSON.parse(mergeMcpConfig(before, "/bin/spectra", ["mcp", "--agent", "agy-book"])); |
| 29 |
assert.deepEqual(after.mcpServers.other, { command: "x" }); |
| 30 |
assert.deepEqual(after.mcpServers.spectra, { command: "/bin/spectra", args: ["mcp", "--agent", "agy-book"] }); |
| 31 |
assert.equal(after.theme, "dark"); |
| 32 |
assert.deepEqual(JSON.parse(mergeMcpConfig("", "s", [])).mcpServers.spectra, { command: "s", args: [] }); |
| 33 |
}); |
| 34 |
|
| 35 |
test("a folder belongs to the deepest project that holds it", () => { |
| 36 |
const ps = [{ name: "dev", path: "/home/a/dev" }, { name: "book", path: "/home/a/dev/book" }, { name: "idea", path: null }]; |
| 37 |
assert.equal(projectForFolder(ps, "/home/a/dev/book"), "book"); |
| 38 |
assert.equal(projectForFolder(ps, "/home/a/dev/book/ch3"), "book"); |
| 39 |
assert.equal(projectForFolder(ps, "/home/a/dev/other"), "dev"); |
| 40 |
assert.equal(projectForFolder(ps, "/home/a/devx"), undefined); |
| 41 |
}); |
| 42 |
|
| 43 |
test("HTML is escaped", () => { |
| 44 |
assert.equal(esc(`<b a="1">'&`), "<b a="1">'&"); |
| 45 |
}); |