@sinch/mcp
Version:
Sinch MCP server
112 lines • 5.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const conversation_service_helper_1 = require("../../../../src/tools/conversation/utils/conversation-service-helper");
const types_1 = require("../../../../src/types");
const sdk_core_1 = require("@sinch/sdk-core");
const utils_1 = require("../../../../src/utils");
const mockApi = () => ({
setHostname: jest.fn(),
});
jest.mock('@sinch/sdk-core', () => {
const actual = jest.requireActual('@sinch/sdk-core');
return {
...actual,
SinchClient: jest.fn(() => ({
conversation: {
app: mockApi(),
contact: mockApi(),
conversation: mockApi(),
messages: mockApi(),
events: mockApi(),
capability: mockApi(),
transcoding: mockApi(),
webhooks: mockApi(),
templatesV2: mockApi(),
},
})),
};
});
describe('getConversationService / getConversationTemplateService', () => {
const OLD_ENV = process.env;
const PROJECT_ID = 'test-project';
const TOOL_NAME = 'dummy-tool';
beforeEach(() => {
jest.resetModules();
process.env = { ...OLD_ENV };
process.env.CONVERSATION_PROJECT_ID = PROJECT_ID;
process.env.CONVERSATION_KEY_ID = 'test-key-id';
process.env.CONVERSATION_KEY_SECRET = 'test-secret';
});
afterAll(() => {
process.env = OLD_ENV;
});
test('returns a configured SinchClient from getConversationService', async () => {
const client = (0, conversation_service_helper_1.getConversationClient)(TOOL_NAME);
expect(client).toHaveProperty('conversation');
const apis = client.conversation;
const expectedHostname = 'https://us.conversation.api.sinch.com';
for (const [key, api] of Object.entries(apis)) {
if (key !== 'templatesV2') {
expect(api.setHostname).toHaveBeenCalledWith(expectedHostname);
expect(api.client).toBeInstanceOf(sdk_core_1.ApiFetchClient);
const userAgentPlugin = api.client.apiClientOptions.requestPlugins?.find((plugin) => plugin.getName() === 'AdditionalHeadersRequest');
expect(userAgentPlugin).toBeDefined();
const expectedUserAgent = (0, utils_1.formatUserAgent)(TOOL_NAME, PROJECT_ID);
expect((await userAgentPlugin.additionalHeaders.headers)['User-Agent']).toBe(expectedUserAgent);
}
}
});
test('returns a configured SinchClient from getConversationTemplateService', async () => {
const client = (0, conversation_service_helper_1.getConversationTemplateClient)(TOOL_NAME);
expect(client).toHaveProperty('conversation');
const api = client.conversation.templatesV2;
const expectedHostname = 'https://us.template.api.sinch.com';
expect(api.setHostname).toHaveBeenCalledWith(expectedHostname);
expect(api.client).toBeInstanceOf(sdk_core_1.ApiFetchClient);
expect(api.client.apiClientOptions.requestPlugins?.length).toBe(2);
const userAgentPlugin = api.client.apiClientOptions.requestPlugins?.find((plugin) => plugin.getName() === 'AdditionalHeadersRequest');
expect(userAgentPlugin).toBeDefined();
const expectedUserAgent = (0, utils_1.formatUserAgent)(TOOL_NAME, PROJECT_ID);
expect((await userAgentPlugin.additionalHeaders.headers)['User-Agent']).toBe(expectedUserAgent);
});
test('returns PromptResponse when env vars are missing', () => {
delete process.env.CONVERSATION_PROJECT_ID;
const result = (0, conversation_service_helper_1.getConversationClient)(TOOL_NAME);
expect(result).toBeInstanceOf(types_1.PromptResponse);
expect(result.promptResponse).toStrictEqual({
role: 'assistant',
content: [
{
type: 'text',
text: 'Missing env vars: CONVERSATION_PROJECT_ID, CONVERSATION_KEY_ID, CONVERSATION_KEY_SECRET.',
}
]
});
});
});
describe('getConversationAppId', () => {
test('returns appId when passed explicitly', () => {
const result = (0, conversation_service_helper_1.getConversationAppId)('explicit-id');
expect(result).toBe('explicit-id');
});
test('returns appId from env when not passed', () => {
process.env.CONVERSATION_APP_ID = 'env-id';
const result = (0, conversation_service_helper_1.getConversationAppId)(undefined);
expect(result).toBe('env-id');
});
test('returns PromptResponse when no appId is provided or in env', () => {
delete process.env.CONVERSATION_APP_ID;
const result = (0, conversation_service_helper_1.getConversationAppId)(undefined);
expect(result).toBeInstanceOf(types_1.PromptResponse);
expect(result.promptResponse).toStrictEqual({
role: 'assistant',
content: [
{
type: 'text',
text: 'The "CONVERSATION_APP_ID" is not set in the environment variables and the "appId" property is not provided.',
}
]
});
});
});
//# sourceMappingURL=conversation-service-helper.test.js.map