62 lines
2.0 KiB
JavaScript
62 lines
2.0 KiB
JavaScript
|
|
const test = require("node:test");
|
||
|
|
const assert = require("node:assert/strict");
|
||
|
|
const { buildInjectedMcpServers } = require("./injectMcp.cjs");
|
||
|
|
|
||
|
|
function fakeMcpBridge() {
|
||
|
|
let hostStartCount = 0;
|
||
|
|
return {
|
||
|
|
get hostStartCount() { return hostStartCount; },
|
||
|
|
getOrCreateHost: async () => {
|
||
|
|
hostStartCount += 1;
|
||
|
|
return 54321;
|
||
|
|
},
|
||
|
|
getScopedSessionIds: (chatId) => (chatId === "chat-1" ? ["s1", "s2"] : []),
|
||
|
|
buildMcpServerConfig: (port, ids, chatId) => ({
|
||
|
|
name: "netcatty-remote-hosts",
|
||
|
|
type: "stdio",
|
||
|
|
command: "/path/electron",
|
||
|
|
args: ["/path/netcatty-mcp-server.cjs"],
|
||
|
|
env: [
|
||
|
|
{ name: "NETCATTY_MCP_PORT", value: String(port) },
|
||
|
|
{ name: "NETCATTY_MCP_CHAT_SESSION_ID", value: chatId },
|
||
|
|
],
|
||
|
|
}),
|
||
|
|
};
|
||
|
|
}
|
||
|
|
|
||
|
|
test("mcp mode returns netcatty MCP stdio config", async () => {
|
||
|
|
const res = await buildInjectedMcpServers({
|
||
|
|
mcpServerBridge: fakeMcpBridge(),
|
||
|
|
chatSessionId: "chat-1",
|
||
|
|
toolIntegrationMode: "mcp",
|
||
|
|
});
|
||
|
|
assert.equal(res.length, 1);
|
||
|
|
assert.equal(res[0].name, "netcatty-remote-hosts");
|
||
|
|
assert.equal(res[0].type, "stdio");
|
||
|
|
assert.equal(res[0].command, "/path/electron");
|
||
|
|
const portPair = res[0].env.find((p) => p.name === "NETCATTY_MCP_PORT");
|
||
|
|
assert.equal(portPair.value, "54321");
|
||
|
|
});
|
||
|
|
|
||
|
|
test("skills mode starts the CLI host and returns no injected MCP config", async () => {
|
||
|
|
const bridge = fakeMcpBridge();
|
||
|
|
const res = await buildInjectedMcpServers({
|
||
|
|
mcpServerBridge: bridge,
|
||
|
|
chatSessionId: "chat-1",
|
||
|
|
toolIntegrationMode: "skills",
|
||
|
|
});
|
||
|
|
assert.deepEqual(res, []);
|
||
|
|
assert.equal(bridge.hostStartCount, 1);
|
||
|
|
});
|
||
|
|
|
||
|
|
test("getOrCreateHost failure degrades to empty, not throw", async () => {
|
||
|
|
const bridge = fakeMcpBridge();
|
||
|
|
bridge.getOrCreateHost = async () => { throw new Error("port boom"); };
|
||
|
|
const res = await buildInjectedMcpServers({
|
||
|
|
mcpServerBridge: bridge,
|
||
|
|
chatSessionId: "chat-1",
|
||
|
|
toolIntegrationMode: "mcp",
|
||
|
|
});
|
||
|
|
assert.deepEqual(res, []);
|
||
|
|
});
|