MCP-Logic
by angrysky56
import { validateRequest } from "../validation";
import type { CreateMessageRequest } from "@modelcontextprotocol/sdk/types.js";
describe("validateRequest", () => {
const validRequest = {
method: "sampling/createMessage",
params: {
messages: [
{
role: "user",
content: {
type: "text",
text: "Hello world",
},
},
],
maxTokens: 100,
},
} as CreateMessageRequest;
it("should validate a correct request", () => {
expect(() => validateRequest(validRequest)).not.toThrow();
});
it("should throw error for missing method", () => {
const invalidRequest = {
params: validRequest.params,
};
expect(() => validateRequest(invalidRequest)).toThrow();
});
it("should throw error for missing params", () => {
const invalidRequest = {
method: "sampling/createMessage",
};
expect(() => validateRequest(invalidRequest)).toThrow(
"Request must have params"
);
});
it("should throw error for empty messages array", () => {
const invalidRequest = {
...validRequest,
params: {
...validRequest.params,
messages: [],
},
};
expect(() => validateRequest(invalidRequest)).toThrow(
"Request must have at least one message"
);
});
it("should throw error for invalid message role", () => {
const invalidRequest = {
...validRequest,
params: {
messages: [
{
role: "invalid",
content: {
type: "text",
text: "Hello",
},
},
],
},
};
expect(() => validateRequest(invalidRequest)).toThrow(
'Message role must be either "user" or "assistant"'
);
});
it("should throw error for invalid content type", () => {
const invalidRequest = {
...validRequest,
params: {
messages: [
{
role: "user",
content: {
type: "invalid",
text: "Hello",
},
},
],
},
};
expect(() => validateRequest(invalidRequest)).toThrow(
'Content type must be either "text" or "image"'
);
});
it("should validate image content correctly", () => {
const imageRequest = {
...validRequest,
params: {
messages: [
{
role: "user",
content: {
type: "image",
data: "base64data",
mimeType: "image/png",
},
},
],
},
};
expect(() => validateRequest(imageRequest)).not.toThrow();
});
});