UNPKG

@sinch/mcp

Version:

Sinch MCP server

112 lines 5.32 kB
"use strict"; 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