| import { getCurrentCell, setCurrentCell } from 'node-network-devtools'; | |
| import undici from 'undici'; | |
| import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest'; | |
| import { useCustomHeader } from './fetch'; | |
| const getInitRequest = () => | |
| ({ | |
| requestHeaders: {} as Record<string, string>, | |
| id: '', | |
| loadCallFrames: () => {}, | |
| cookies: '', | |
| requestData: '', | |
| responseData: '', | |
| responseHeaders: {}, | |
| responseInfo: {}, | |
| }) satisfies NonNullable<ReturnType<typeof getCurrentCell>>['request']; | |
| enum Env { | |
| dev = 'dev', | |
| production = 'production', | |
| test = 'test', | |
| } | |
| describe('useCustomHeader', () => { | |
| let originalEnv: string; | |
| beforeEach(() => { | |
| originalEnv = process.env.NODE_ENV || Env.test; | |
| process.env.ENABLE_REMOTE_DEBUGGING = 'true'; | |
| }); | |
| afterEach(() => { | |
| process.env.NODE_ENV = originalEnv; | |
| }); | |
| test('should register request with custom headers in dev environment', () => { | |
| process.env.NODE_ENV = Env.dev; | |
| const headers = new Headers(); | |
| const headerText = 'authorization'; | |
| const headerValue = 'Bearer token'; | |
| headers.set(headerText, headerValue); | |
| const req = getInitRequest(); | |
| setCurrentCell({ | |
| request: req, | |
| pipes: [], | |
| isAborted: false, | |
| }); | |
| useCustomHeader(headers); | |
| const cell = getCurrentCell(); | |
| expect(cell).toBeDefined(); | |
| let request = req; | |
| if (cell) { | |
| for (const { pipe } of cell.pipes) { | |
| request = pipe(request); | |
| } | |
| } | |
| expect(request.requestHeaders[headerText]).toEqual(headerValue); | |
| }); | |
| test('should not register request in non-dev environment', () => { | |
| process.env.NODE_ENV = Env.production; | |
| const headers = new Headers(); | |
| const headerText = 'content-type'; | |
| const headerValue = 'application/json'; | |
| headers.set(headerText, headerValue); | |
| const req = getInitRequest(); | |
| setCurrentCell({ | |
| request: req, | |
| pipes: [], | |
| isAborted: false, | |
| }); | |
| useCustomHeader(headers); | |
| const cell = getCurrentCell(); | |
| expect(cell).toBeDefined(); | |
| let request = req; | |
| if (cell) { | |
| for (const { pipe } of cell.pipes) { | |
| request = pipe(request); | |
| } | |
| } | |
| expect(req.requestHeaders[headerText]).toBeUndefined(); | |
| }); | |
| }); | |
| describe('wrappedFetch', () => { | |
| test('throws when fetch fails without proxy retry', async () => { | |
| const fetchSpy = vi.spyOn(undici, 'fetch').mockRejectedValueOnce(new Error('boom')); | |
| const { default: wrappedFetch } = await import('./fetch'); | |
| await expect(wrappedFetch('http://example.com')).rejects.toThrow('boom'); | |
| fetchSpy.mockRestore(); | |
| }); | |
| }); | |