@apistudio/apim-cli
Version:
CLI for API Management Products
72 lines (65 loc) • 2.1 kB
text/typescript
/**
* 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 }),
);
});
});
});