import axios from 'axios';
|
import MockAdapter from 'axios-mock-adapter';
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
import { RequestClient } from './request-client';
|
|
describe('requestClient', () => {
|
let mock: MockAdapter;
|
let requestClient: RequestClient;
|
|
beforeEach(() => {
|
mock = new MockAdapter(axios);
|
requestClient = new RequestClient();
|
});
|
|
afterEach(() => {
|
mock.reset();
|
});
|
|
it('should successfully make a GET request', async () => {
|
mock.onGet('test/url').reply(200, { data: 'response' });
|
|
const response = await requestClient.get('test/url');
|
|
expect(response.data).toEqual({ data: 'response' });
|
});
|
|
it('should successfully make a POST request', async () => {
|
const postData = { key: 'value' };
|
const mockData = { data: 'response' };
|
mock.onPost('/test/post', postData).reply(200, mockData);
|
const response = await requestClient.post('/test/post', postData);
|
expect(response.data).toEqual(mockData);
|
});
|
|
it('should successfully make a PUT request', async () => {
|
const putData = { key: 'updatedValue' };
|
const mockData = { data: 'updated response' };
|
mock.onPut('/test/put', putData).reply(200, mockData);
|
const response = await requestClient.put('/test/put', putData);
|
expect(response.data).toEqual(mockData);
|
});
|
|
it('should successfully make a DELETE request', async () => {
|
const mockData = { data: 'delete response' };
|
mock.onDelete('/test/delete').reply(200, mockData);
|
const response = await requestClient.delete('/test/delete');
|
expect(response.data).toEqual(mockData);
|
});
|
|
it('should handle network errors', async () => {
|
mock.onGet('/test/error').networkError();
|
try {
|
await requestClient.get('/test/error');
|
expect(true).toBe(false);
|
} catch (error: any) {
|
expect(error.isAxiosError).toBe(true);
|
expect(error.message).toBe('Network Error');
|
}
|
});
|
|
it('should handle timeout', async () => {
|
mock.onGet('/test/timeout').timeout();
|
try {
|
await requestClient.get('/test/timeout');
|
expect(true).toBe(false);
|
} catch (error: any) {
|
expect(error.isAxiosError).toBe(true);
|
expect(error.code).toBe('ECONNABORTED');
|
}
|
});
|
|
it('should successfully upload a file', async () => {
|
const fileData = new Blob(['file contents'], { type: 'text/plain' });
|
|
mock.onPost('/test/upload').reply((config) => {
|
return config.data instanceof FormData && config.data.has('file')
|
? [200, { data: 'file uploaded' }]
|
: [400, { error: 'Bad Request' }];
|
});
|
|
const response = await requestClient.upload('/test/upload', {
|
file: fileData,
|
});
|
expect(response.data).toEqual({ data: 'file uploaded' });
|
});
|
|
it('should successfully download a file as a blob', async () => {
|
const mockFileContent = new Blob(['mock file content'], {
|
type: 'text/plain',
|
});
|
|
mock.onGet('/test/download').reply(200, mockFileContent);
|
|
const res = await requestClient.download('/test/download');
|
|
expect(res.data).toBeInstanceOf(Blob);
|
});
|
});
|