From 4ec3130bcc091a81087fb993db95f5d130c81322 Mon Sep 17 00:00:00 2001 From: Leonardo Bazico Date: Wed, 12 May 2021 17:01:28 -0300 Subject: [PATCH] test(fixRequestBody): add unit test --- test/unit/fix-request-body.spec.ts | 66 ++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 test/unit/fix-request-body.spec.ts diff --git a/test/unit/fix-request-body.spec.ts b/test/unit/fix-request-body.spec.ts new file mode 100644 index 00000000..6ea56ba0 --- /dev/null +++ b/test/unit/fix-request-body.spec.ts @@ -0,0 +1,66 @@ +import { ClientRequest } from 'http'; +import * as querystring from 'querystring'; + +import { fixRequestBody } from '../../src/handlers/fix-request-body'; +import type { Request } from '../../src/types'; + +const fakeProxyRequest = () => { + const proxyRequest = new ClientRequest('http://some-host'); + proxyRequest.emit = jest.fn(); + + return proxyRequest; +}; + +describe('fixRequestBody', () => { + it('should not write when body is undefined', () => { + const proxyRequest = fakeProxyRequest(); + + jest.spyOn(proxyRequest, 'setHeader'); + jest.spyOn(proxyRequest, 'write'); + + fixRequestBody(proxyRequest, { body: undefined } as Request); + + expect(proxyRequest.setHeader).not.toHaveBeenCalled(); + expect(proxyRequest.write).not.toHaveBeenCalled(); + }); + + it('should not write when body is empty', () => { + const proxyRequest = fakeProxyRequest(); + + jest.spyOn(proxyRequest, 'setHeader'); + jest.spyOn(proxyRequest, 'write'); + + fixRequestBody(proxyRequest, { body: {} } as Request); + + expect(proxyRequest.setHeader).not.toHaveBeenCalled(); + expect(proxyRequest.write).not.toHaveBeenCalled(); + }); + + it('should write when body is not empty and Content-Type is application/json', () => { + const proxyRequest = fakeProxyRequest(); + proxyRequest.setHeader('content-type', 'application/json; charset=utf-8'); + + jest.spyOn(proxyRequest, 'setHeader'); + jest.spyOn(proxyRequest, 'write'); + + fixRequestBody(proxyRequest, { body: { someField: 'some value' } } as Request); + + const expectedBody = JSON.stringify({ someField: 'some value' }); + expect(proxyRequest.setHeader).toHaveBeenCalledWith('Content-Length', expectedBody.length); + expect(proxyRequest.write).toHaveBeenCalledWith(expectedBody); + }); + + it('should write when body is not empty and Content-Type is application/x-www-form-urlencoded', () => { + const proxyRequest = fakeProxyRequest(); + proxyRequest.setHeader('content-type', 'application/x-www-form-urlencoded'); + + jest.spyOn(proxyRequest, 'setHeader'); + jest.spyOn(proxyRequest, 'write'); + + fixRequestBody(proxyRequest, { body: { someField: 'some value' } } as Request); + + const expectedBody = querystring.stringify({ someField: 'some value' }); + expect(proxyRequest.setHeader).toHaveBeenCalledWith('Content-Length', expectedBody.length); + expect(proxyRequest.write).toHaveBeenCalledWith(expectedBody); + }); +});