n8n-nodes-mcp
Version:
MCP nodes for n8n
127 lines • 5.45 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../utils");
describe('MCP Client Utils', () => {
describe('parseHeaders', () => {
it('should parse newline-separated NAME=VALUE headers', () => {
const input = 'Authorization=Bearer token123\nContent-Type=application/json';
const result = (0, utils_1.parseHeaders)(input);
expect(result).toEqual({
Authorization: 'Bearer token123',
'Content-Type': 'application/json',
});
});
it('should handle headers with equals signs in values', () => {
const input = 'Api-Key=abc=def=ghi';
const result = (0, utils_1.parseHeaders)(input);
expect(result).toEqual({
'Api-Key': 'abc=def=ghi',
});
});
it('should ignore empty lines and malformed entries', () => {
const input = 'Valid-Header=value\n\n=NoKey\nNoEquals\nAnother-Header=value2';
const result = (0, utils_1.parseHeaders)(input);
expect(result).toEqual({
'Valid-Header': 'value',
'Another-Header': 'value2',
});
});
it('should trim whitespace from keys and values', () => {
const input = ' Authorization = Bearer token \n Content-Type = application/json ';
const result = (0, utils_1.parseHeaders)(input);
expect(result).toEqual({
Authorization: 'Bearer token',
'Content-Type': 'application/json',
});
});
it('should handle empty string input', () => {
const result = (0, utils_1.parseHeaders)('');
expect(result).toEqual({});
});
it('should handle multiple headers with various formats', () => {
const input = 'X-Api-Key=secret123\nAuthorization=Bearer xyz\nX-Custom-Header=value=with=equals';
const result = (0, utils_1.parseHeaders)(input);
expect(result).toEqual({
'X-Api-Key': 'secret123',
Authorization: 'Bearer xyz',
'X-Custom-Header': 'value=with=equals',
});
});
});
describe('mergeHeaders', () => {
it('should merge credential and override headers', () => {
const credentialHeaders = {
'X-Api-Key': 'from-credentials',
'Content-Type': 'application/json',
};
const overrideHeaders = {
Authorization: 'Bearer override-token',
};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({
'X-Api-Key': 'from-credentials',
'Content-Type': 'application/json',
Authorization: 'Bearer override-token',
});
});
it('should allow override headers to take precedence over credential headers', () => {
const credentialHeaders = {
Authorization: 'Bearer credential-token',
'X-Custom': 'credential-value',
};
const overrideHeaders = {
Authorization: 'Bearer override-token',
};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({
Authorization: 'Bearer override-token',
'X-Custom': 'credential-value',
});
});
it('should handle empty override headers', () => {
const credentialHeaders = {
Authorization: 'Bearer token',
};
const overrideHeaders = {};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({
Authorization: 'Bearer token',
});
});
it('should handle empty credential headers', () => {
const credentialHeaders = {};
const overrideHeaders = {
Authorization: 'Bearer token',
};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({
Authorization: 'Bearer token',
});
});
it('should handle both empty headers objects', () => {
const credentialHeaders = {};
const overrideHeaders = {};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({});
});
it('should merge multiple headers correctly', () => {
const credentialHeaders = {
'X-Api-Key': 'cred-key',
'Content-Type': 'application/json',
Accept: 'application/json',
};
const overrideHeaders = {
Authorization: 'Bearer new-token',
'Content-Type': 'text/plain',
};
const result = (0, utils_1.mergeHeaders)(credentialHeaders, overrideHeaders);
expect(result).toEqual({
'X-Api-Key': 'cred-key',
'Content-Type': 'text/plain',
Accept: 'application/json',
Authorization: 'Bearer new-token',
});
});
});
});
//# sourceMappingURL=utils.test.js.map