UNPKG

zapier-platform-cli

Version:

The CLI for managing integrations in Zapier Developer Platform.

151 lines (127 loc) 3.89 kB
/* globals describe, it, expect */ /* eslint-disable no-undef */ const chatCompletion = require('../creates/chat_completion'); const { DEFAULT_MODEL } = require('../constants'); describe('chat_completion', () => { beforeEach(() => { jest.clearAllMocks(); }); it('creates a basic chat completion', async () => { const bundle = { inputData: { user_message: 'Hello, how are you?', model: DEFAULT_MODEL, }, }; const mockResponse = { data: { id: 'chatcmpl-123', model: DEFAULT_MODEL, usage: { prompt_tokens: 20, completion_tokens: 15, total_tokens: 35, }, choices: [ { message: { content: 'I am doing well, thank you for asking!', }, }, ], }, }; const mockRequest = jest.fn().mockResolvedValue(mockResponse); const z = { request: mockRequest }; const result = await chatCompletion.operation.perform(z, bundle); expect(mockRequest).toHaveBeenCalledTimes(1); expect(mockRequest).toHaveBeenCalledWith({ url: expect.stringContaining('/chat/completions'), method: 'POST', body: expect.stringContaining(bundle.inputData.user_message), }); expect(result).toEqual(mockResponse.data); }); it('creates a chat completion with advanced options', async () => { const bundle = { inputData: { user_message: 'Write a story', model: DEFAULT_MODEL, developer_message: 'You are a creative writer', temperature: 0.9, max_completion_tokens: 100, }, }; const mockResponse = { data: { id: 'chatcmpl-456', model: DEFAULT_MODEL, usage: { prompt_tokens: 25, completion_tokens: 50, total_tokens: 75, }, }, }; const mockRequest = jest.fn().mockResolvedValue(mockResponse); const z = { request: mockRequest }; const result = await chatCompletion.operation.perform(z, bundle); expect(mockRequest).toHaveBeenCalledTimes(1); expect(mockRequest).toHaveBeenCalledWith({ url: expect.stringContaining('/chat/completions'), method: 'POST', body: expect.stringMatching(/temperature.*0.9/), }); expect(result).toEqual(mockResponse.data); }); it('creates a chat completion with image', async () => { const bundle = { inputData: { user_message: 'Describe this image', model: DEFAULT_MODEL, files: ['https://example.com/image.jpg'], }, }; const mockResponse = { data: { id: 'chatcmpl-789', model: DEFAULT_MODEL, usage: { prompt_tokens: 30, completion_tokens: 20, total_tokens: 50, }, }, }; const mockRequest = jest.fn().mockResolvedValue(mockResponse); const z = { request: mockRequest }; const result = await chatCompletion.operation.perform(z, bundle); expect(mockRequest).toHaveBeenCalledTimes(1); expect(mockRequest).toHaveBeenCalledWith({ url: expect.stringContaining('/chat/completions'), method: 'POST', body: expect.stringMatching(/image_url.*example.com/), }); expect(result).toEqual(mockResponse.data); }); it('handles API errors', async () => { const bundle = { inputData: { user_message: 'Hello', model: DEFAULT_MODEL, }, }; const mockRequest = jest .fn() .mockRejectedValue(new Error('Invalid request')); const z = { request: mockRequest }; try { await chatCompletion.operation.perform(z, bundle); } catch (error) { expect(mockRequest).toHaveBeenCalledTimes(1); expect(error.message).toContain('Invalid request'); return; } throw new Error('Should have thrown an error'); }); });