UNPKG

@redocly/cli

Version:

[@Redocly](https://redocly.com) CLI is your all-in-one OpenAPI utility. It builds, manages, improves, and quality-checks your OpenAPI descriptions, all of which comes in handy for various phases of the API Lifecycle. Create your own rulesets to make API g

82 lines (67 loc) 2.29 kB
import AbortController from 'abort-controller'; import fetchWithTimeout from '../utils/fetch-with-timeout'; import { getProxyAgent } from '@redocly/openapi-core'; import { HttpsProxyAgent } from 'https-proxy-agent'; jest.mock('@redocly/openapi-core'); const signalInstance = new AbortController().signal; const mockFetch = jest.fn(() => Promise.resolve({ ok: true, status: 200, json: () => Promise.resolve({}), headers: new Headers(), statusText: 'OK', redirected: false, type: 'default', url: '', clone: () => ({} as Response), body: null, bodyUsed: false, arrayBuffer: async () => new ArrayBuffer(0), blob: async () => new Blob(), formData: async () => new FormData(), text: async () => '', signal: signalInstance, dispatcher: undefined, } as Response) ); const originalFetch = global.fetch; global.fetch = mockFetch; describe('fetchWithTimeout', () => { beforeAll(() => { // @ts-ignore global.setTimeout = jest.fn(); global.clearTimeout = jest.fn(); }); beforeEach(() => { (getProxyAgent as jest.Mock).mockReturnValueOnce(undefined); }); afterAll(() => { global.fetch = originalFetch; }); it('should call fetch with signal', async () => { await fetchWithTimeout('url', { timeout: 1000 }); expect(global.setTimeout).toHaveBeenCalledTimes(1); expect(global.fetch).toHaveBeenCalledWith( 'url', expect.objectContaining({ signal: expect.any(AbortSignal), dispatcher: undefined, }) ); expect(global.clearTimeout).toHaveBeenCalledTimes(1); }); it('should call fetch with proxy agent', async () => { (getProxyAgent as jest.Mock).mockRestore(); const proxyAgent = new HttpsProxyAgent('http://localhost'); (getProxyAgent as jest.Mock).mockReturnValueOnce(proxyAgent); await fetchWithTimeout('url'); expect(global.fetch).toHaveBeenCalledWith('url', { dispatcher: proxyAgent }); }); it('should call fetch without signal when timeout is not passed', async () => { await fetchWithTimeout('url'); expect(global.setTimeout).not.toHaveBeenCalled(); expect(global.fetch).toHaveBeenCalledWith('url', { agent: undefined }); expect(global.clearTimeout).not.toHaveBeenCalled(); }); });