| | import axios from 'axios'; |
| | import { createAxiosInstance } from './axios'; |
| |
|
| | jest.mock('axios', () => ({ |
| | interceptors: { |
| | request: { use: jest.fn(), eject: jest.fn() }, |
| | response: { use: jest.fn(), eject: jest.fn() }, |
| | }, |
| | create: jest.fn().mockReturnValue({ |
| | defaults: { |
| | proxy: null, |
| | }, |
| | get: jest.fn().mockResolvedValue({ data: {} }), |
| | post: jest.fn().mockResolvedValue({ data: {} }), |
| | put: jest.fn().mockResolvedValue({ data: {} }), |
| | delete: jest.fn().mockResolvedValue({ data: {} }), |
| | }), |
| | get: jest.fn().mockResolvedValue({ data: {} }), |
| | post: jest.fn().mockResolvedValue({ data: {} }), |
| | put: jest.fn().mockResolvedValue({ data: {} }), |
| | delete: jest.fn().mockResolvedValue({ data: {} }), |
| | reset: jest.fn().mockImplementation(function (this: { |
| | get: jest.Mock; |
| | post: jest.Mock; |
| | put: jest.Mock; |
| | delete: jest.Mock; |
| | create: jest.Mock; |
| | }) { |
| | this.get.mockClear(); |
| | this.post.mockClear(); |
| | this.put.mockClear(); |
| | this.delete.mockClear(); |
| | this.create.mockClear(); |
| | }), |
| | })); |
| |
|
| | describe('createAxiosInstance', () => { |
| | const originalEnv = process.env; |
| |
|
| | beforeEach(() => { |
| | |
| | jest.clearAllMocks(); |
| | |
| | process.env = { ...originalEnv }; |
| | |
| | delete process.env.proxy; |
| | }); |
| |
|
| | afterAll(() => { |
| | |
| | process.env = originalEnv; |
| | }); |
| |
|
| | test('creates an axios instance without proxy when no proxy env is set', () => { |
| | const instance = createAxiosInstance(); |
| |
|
| | expect(axios.create).toHaveBeenCalledTimes(1); |
| | expect(instance.defaults.proxy).toBeNull(); |
| | }); |
| |
|
| | test('configures proxy correctly with hostname and protocol', () => { |
| | process.env.proxy = 'http://example.com'; |
| |
|
| | const instance = createAxiosInstance(); |
| |
|
| | expect(axios.create).toHaveBeenCalledTimes(1); |
| | expect(instance.defaults.proxy).toEqual({ |
| | host: 'example.com', |
| | protocol: 'http', |
| | }); |
| | }); |
| |
|
| | test('configures proxy correctly with hostname, protocol and port', () => { |
| | process.env.proxy = 'https://proxy.example.com:8080'; |
| |
|
| | const instance = createAxiosInstance(); |
| |
|
| | expect(axios.create).toHaveBeenCalledTimes(1); |
| | expect(instance.defaults.proxy).toEqual({ |
| | host: 'proxy.example.com', |
| | protocol: 'https', |
| | port: 8080, |
| | }); |
| | }); |
| |
|
| | test('handles proxy URLs with authentication', () => { |
| | process.env.proxy = 'http://user:pass@proxy.example.com:3128'; |
| |
|
| | const instance = createAxiosInstance(); |
| |
|
| | expect(axios.create).toHaveBeenCalledTimes(1); |
| | expect(instance.defaults.proxy).toEqual({ |
| | host: 'proxy.example.com', |
| | protocol: 'http', |
| | port: 3128, |
| | |
| | }); |
| | }); |
| |
|
| | test('throws error when proxy URL is invalid', () => { |
| | process.env.proxy = 'invalid-url'; |
| |
|
| | expect(() => createAxiosInstance()).toThrow('Invalid proxy URL'); |
| | expect(axios.create).toHaveBeenCalledTimes(1); |
| | }); |
| |
|
| | |
| | test('handles edge case proxy URLs correctly', () => { |
| | |
| | process.env.proxy = 'http://[::1]:8080'; |
| |
|
| | let instance = createAxiosInstance(); |
| |
|
| | expect(instance.defaults.proxy).toEqual({ |
| | host: '::1', |
| | protocol: 'http', |
| | port: 8080, |
| | }); |
| |
|
| | |
| | process.env.proxy = 'http://proxy.example.com:8080/some/path'; |
| |
|
| | instance = createAxiosInstance(); |
| |
|
| | expect(instance.defaults.proxy).toEqual({ |
| | host: 'proxy.example.com', |
| | protocol: 'http', |
| | port: 8080, |
| | }); |
| | }); |
| | }); |
| |
|