UNPKG

@apistudio/apim-cli

Version:

CLI for API Management Products

72 lines (65 loc) 2.1 kB
/** * Copyright IBM Corp. 2024, 2025 */ import axios from 'axios'; import { AxiosClient } from '../../../src/engine/protocol/axios-client.js'; import { HttpClientOpt } from '../../../src/engine/protocol/http-client.js'; jest.mock('axios'); const mockedAxios = axios as any as jest.Mock; describe('HttpClient Interface Compliance', () => { let client: AxiosClient; beforeEach(() => { client = new AxiosClient(); mockedAxios.mockReset(); }); it('should support all required HttpClientOpt options', async () => { mockedAxios.mockResolvedValueOnce({ data: { success: true } }); const options: HttpClientOpt = { method: 'POST', url: 'https://example.com', headers: { 'X-Test': '1' }, data: { test: 'value' }, params: { q: 1 }, auth: { username: 'u', password: 'p' }, timeout: 5000, proxy: { host: '127.0.0.1', port: 9000, protocol: 'http', auth: { username: 'proxyUser', password: 'proxyPass' }, }, }; const isFormDataAvailable: boolean = false; await expect( client.request(options, isFormDataAvailable), ).resolves.not.toThrow(); }); it('should retry on error with proxy config', async () => { mockedAxios.mockResolvedValueOnce({ data: { success: true } }); const options: HttpClientOpt = { method: 'POST', url: 'https://example.com', headers: { 'X-Test': '1' }, data: { test: 'value' }, params: { q: 1 }, auth: { username: 'u', password: 'p' }, timeout: 500, proxy: { host: '127.0.0.1', port: 9000, protocol: 'http', auth: { username: 'proxyUser', password: 'proxyPass' }, }, }; const isFormDataAvailable: boolean = false; await expect( client.request(options, isFormDataAvailable), ).resolves.not.toThrow(); expect(mockedAxios).toHaveBeenCalledTimes(1); mockedAxios.mock.calls.forEach(([config]) => { expect(config.proxy).toEqual( expect.objectContaining({ host: '127.0.0.1', port: 9000 }), ); }); }); });