From 1fc9627a1b4e776dc80450812b41321b1c568364 Mon Sep 17 00:00:00 2001 From: bobalong79 Date: Mon, 1 Mar 2021 18:18:10 +0000 Subject: [PATCH] Update tests after moving header processing from `onProxyReq` to `filter` --- .../proxy-backend/src/service/router.test.ts | 145 ++++++++++-------- 1 file changed, 78 insertions(+), 67 deletions(-) diff --git a/plugins/proxy-backend/src/service/router.test.ts b/plugins/proxy-backend/src/service/router.test.ts index d0eca55ee0..7f7fa07391 100644 --- a/plugins/proxy-backend/src/service/router.test.ts +++ b/plugins/proxy-backend/src/service/router.test.ts @@ -68,11 +68,11 @@ describe('buildMiddleware', () => { (pathname: string, req: Partial) => boolean, ProxyMiddlewareConfig, ]; - expect(filter('', { method: 'GET' })).toBe(true); - expect(filter('', { method: 'POST' })).toBe(true); - expect(filter('', { method: 'PUT' })).toBe(true); - expect(filter('', { method: 'PATCH' })).toBe(true); - expect(filter('', { method: 'DELETE' })).toBe(true); + expect(filter('', { method: 'GET', headers: {} })).toBe(true); + expect(filter('', { method: 'POST', headers: {} })).toBe(true); + expect(filter('', { method: 'PUT', headers: {} })).toBe(true); + expect(filter('', { method: 'PATCH', headers: {} })).toBe(true); + expect(filter('', { method: 'DELETE', headers: {} })).toBe(true); expect(fullConfig.pathRewrite).toEqual({ '^/api/test/': '/' }); expect(fullConfig.changeOrigin).toBe(true); @@ -91,11 +91,11 @@ describe('buildMiddleware', () => { (pathname: string, req: Partial) => boolean, ProxyMiddlewareConfig, ]; - expect(filter('', { method: 'GET' })).toBe(true); - expect(filter('', { method: 'POST' })).toBe(false); - expect(filter('', { method: 'PUT' })).toBe(false); - expect(filter('', { method: 'PATCH' })).toBe(false); - expect(filter('', { method: 'DELETE' })).toBe(true); + expect(filter('', { method: 'GET', headers: {} })).toBe(true); + expect(filter('', { method: 'POST', headers: {} })).toBe(false); + expect(filter('', { method: 'PUT', headers: {} })).toBe(false); + expect(filter('', { method: 'PATCH', headers: {} })).toBe(false); + expect(filter('', { method: 'DELETE', headers: {} })).toBe(true); expect(fullConfig.pathRewrite).toEqual({ '^/api/test/': '/' }); expect(fullConfig.changeOrigin).toBe(true); @@ -109,38 +109,37 @@ describe('buildMiddleware', () => { expect(createProxyMiddleware).toHaveBeenCalledTimes(1); - const config = mockCreateProxyMiddleware.mock - .calls[0][1] as ProxyMiddlewareConfig; + const [filter] = mockCreateProxyMiddleware.mock.calls[0] as [ + (pathname: string, req: Partial) => boolean, + ]; - const testClientRequest = { - getHeaderNames: () => [ - 'cache-control', - 'content-language', - 'content-length', - 'content-type', - 'expires', - 'last-modified', - 'pragma', - 'host', - 'accept', - 'accept-language', - 'user-agent', - 'cookie', - ], - removeHeader: jest.fn(), - } as Partial; + const testHeaders = { + 'cache-control': 'mocked', + 'content-language': 'mocked', + 'content-length': 'mocked', + 'content-type': 'mocked', + expires: 'mocked', + 'last-modified': 'mocked', + pragma: 'mocked', + host: 'mocked', + accept: 'mocked', + 'accept-language': 'mocked', + 'user-agent': 'mocked', + cookie: 'mocked', + } as Partial; + const expectedHeaders = { ...testHeaders } as Partial< + http.IncomingHttpHeaders + >; + delete expectedHeaders.cookie; - expect(config).toBeDefined(); - expect(config.onProxyReq).toBeDefined(); + expect(testHeaders).toBeDefined(); + expect(expectedHeaders).toBeDefined(); + expect(testHeaders).not.toEqual(expectedHeaders); + expect(filter).toBeDefined(); - config.onProxyReq!( - testClientRequest as http.ClientRequest, - {} as http.IncomingMessage, - {} as http.ServerResponse, - ); + filter!('', { method: 'GET', headers: testHeaders }); - expect(testClientRequest.removeHeader).toHaveBeenCalledTimes(1); - expect(testClientRequest.removeHeader).toHaveBeenCalledWith('cookie'); + expect(testHeaders).toEqual(expectedHeaders); }); it('permits default and configured headers', async () => { @@ -153,22 +152,27 @@ describe('buildMiddleware', () => { expect(createProxyMiddleware).toHaveBeenCalledTimes(1); - const config = mockCreateProxyMiddleware.mock - .calls[0][1] as ProxyMiddlewareConfig; + const [filter] = mockCreateProxyMiddleware.mock.calls[0] as [ + (pathname: string, req: Partial) => boolean, + ]; - const testClientRequest = { - getHeaderNames: () => ['authorization', 'Cookie'], - removeHeader: jest.fn(), - } as Partial; + const testHeaders = { + authorization: 'mocked', + cookie: 'mocked', + } as Partial; + const expectedHeaders = { ...testHeaders } as Partial< + http.IncomingHttpHeaders + >; + delete expectedHeaders.cookie; - config.onProxyReq!( - testClientRequest as http.ClientRequest, - {} as http.IncomingMessage, - {} as http.ServerResponse, - ); + expect(testHeaders).toBeDefined(); + expect(expectedHeaders).toBeDefined(); + expect(testHeaders).not.toEqual(expectedHeaders); + expect(filter).toBeDefined(); - expect(testClientRequest.removeHeader).toHaveBeenCalledTimes(1); - expect(testClientRequest.removeHeader).toHaveBeenCalledWith('Cookie'); + filter!('', { method: 'GET', headers: testHeaders }); + + expect(testHeaders).toEqual(expectedHeaders); }); it('permits configured headers', async () => { @@ -179,24 +183,28 @@ describe('buildMiddleware', () => { expect(createProxyMiddleware).toHaveBeenCalledTimes(1); - const config = mockCreateProxyMiddleware.mock - .calls[0][1] as ProxyMiddlewareConfig; + const [filter] = mockCreateProxyMiddleware.mock.calls[0] as [ + (pathname: string, req: Partial) => boolean, + ]; - const testClientRequest = { - getHeaderNames: () => ['authorization', 'Cookie', 'X-Auth-Request-User'], - removeHeader: jest.fn(), - } as Partial; + const testHeaders = { + authorization: 'mocked', + cookie: 'mocked', + 'x-auth-request-user': 'mocked', + } as Partial; + const expectedHeaders = { ...testHeaders } as Partial< + http.IncomingHttpHeaders + >; + delete expectedHeaders['x-auth-request-user']; - config.onProxyReq!( - testClientRequest as http.ClientRequest, - {} as http.IncomingMessage, - {} as http.ServerResponse, - ); + expect(testHeaders).toBeDefined(); + expect(expectedHeaders).toBeDefined(); + expect(testHeaders).not.toEqual(expectedHeaders); + expect(filter).toBeDefined(); - expect(testClientRequest.removeHeader).toHaveBeenCalledTimes(1); - expect(testClientRequest.removeHeader).toHaveBeenCalledWith( - 'X-Auth-Request-User', - ); + filter!('', { method: 'GET', headers: testHeaders }); + + expect(testHeaders).toEqual(expectedHeaders); }); it('responds default headers', async () => { @@ -223,7 +231,7 @@ describe('buildMiddleware', () => { } as Partial; expect(config).toBeDefined(); - expect(config.onProxyReq).toBeDefined(); + expect(config.onProxyRes).toBeDefined(); config.onProxyRes!( testClientResponse as http.IncomingMessage, @@ -260,6 +268,9 @@ describe('buildMiddleware', () => { }, } as Partial; + expect(config).toBeDefined(); + expect(config.onProxyRes).toBeDefined(); + config.onProxyRes!( testClientResponse as http.IncomingMessage, {} as http.IncomingMessage,