MCP-Logic
by angrysky56
// Mock setup
jest.mock("../../server", () => ({
server: {
notification: jest.fn(),
},
}));
import {
updateUserMessageWithContent,
injectVariablesIntoText,
injectVariables,
} from "../message-handlers";
import { XML_TAGS } from "../../constants/message-handler";
import type { PromptMessage } from "@modelcontextprotocol/sdk/types.js";
describe("message-handlers", () => {
describe("updateUserMessageWithContent", () => {
it("should update user message with content", () => {
const messages: PromptMessage[] = [
{
role: "user",
content: {
type: "text",
text: `test message${XML_TAGS.REQUEST_PARAMS_CLOSE}`,
},
},
];
const blocks = { test: "data" };
updateUserMessageWithContent(messages, blocks);
expect(messages[0].content.type).toBe("text");
expect(messages[0].content.text).toContain(
JSON.stringify(blocks, null, 2)
);
});
it("should not modify messages if no user message exists", () => {
const messages: PromptMessage[] = [
{ role: "assistant", content: { type: "text", text: "test" } },
];
const originalMessages = [...messages];
updateUserMessageWithContent(messages, {});
expect(messages).toEqual(originalMessages);
});
});
describe("injectVariablesIntoText", () => {
it("should inject variables into text", () => {
const text = "Hello {{name}}, your age is {{age}}";
const variables = { name: "John", age: 30 };
const result = injectVariablesIntoText(text, variables);
expect(result).toBe("Hello John, your age is 30");
});
it("should handle missing variables", () => {
const text = "Hello {{name}}";
const variables = { name: "John" };
const result = injectVariablesIntoText(text, variables);
expect(result).toBe("Hello John");
});
it("should throw error for missing required variables", () => {
const text = "Hello {{name}}, your age is {{age}}";
const variables = { name: "John" };
expect(() => injectVariablesIntoText(text, variables)).toThrow(
"Missing required variables: age"
);
});
});
describe("injectVariables", () => {
it("should inject variables into text message", () => {
const message: PromptMessage = {
role: "user",
content: { type: "text", text: "Hello {{name}}" },
};
const variables = { name: "John" };
const result = injectVariables(message, variables);
expect(result.content.type).toBe("text");
expect(result.content.text).toBe("Hello John");
});
it("should return original message for non-text content", () => {
const message: PromptMessage = {
role: "user",
content: {
type: "image",
data: "base64data",
mimeType: "image/jpeg",
},
};
const variables = { name: "John" };
const result = injectVariables(message, variables);
expect(result).toEqual(message);
});
});
});