From e24b5f257897aa24fb392b23230b5dcbb4e706e5 Mon Sep 17 00:00:00 2001 From: Markus Tacker Date: Mon, 6 Apr 2020 10:25:08 +0200 Subject: [PATCH] test: that it sends the right headers --- package-lock.json | 18 ------------------ package.json | 1 - src/createClient.spec.ts | 40 +++++++++++++++++++++++++++++++++++++--- src/createClient.ts | 11 +++++++++-- 4 files changed, 46 insertions(+), 24 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2068cf9..8fc9ccb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6954,18 +6954,6 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, - "nock": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/nock/-/nock-12.0.3.tgz", - "integrity": "sha512-QNb/j8kbFnKCiyqi9C5DD0jH/FubFGj5rt9NQFONXwQm3IPB0CULECg/eS3AU1KgZb/6SwUa4/DTRKhVxkGABw==", - "dev": true, - "requires": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.13", - "propagate": "^2.0.0" - } - }, "node-emoji": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", @@ -11066,12 +11054,6 @@ "sisteransi": "^1.0.4" } }, - "propagate": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/propagate/-/propagate-2.0.1.tgz", - "integrity": "sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==", - "dev": true - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", diff --git a/package.json b/package.json index a868ac9..669b36d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "@types/jest": "^25.2.1", "husky": "^4.2.3", "jest": "^25.2.7", - "nock": "^12.0.3", "semantic-release": "^17.0.4", "ts-jest": "^25.3.1", "ts-loader": "^6.2.2", diff --git a/src/createClient.spec.ts b/src/createClient.spec.ts index 1dbd9c0..cac25b8 100644 --- a/src/createClient.spec.ts +++ b/src/createClient.spec.ts @@ -1,9 +1,43 @@ -import { createClient, Client } from './createClient' +import { createClient } from './createClient' describe('API Client', () => { - let client: Client it('can be instantiated', () => { - client = createClient({ apiKey: 'some-api-key' }) + const client = createClient({ apiKey: 'some-api-key' }) expect(client).toBeDefined() }) + it('sends the right headers', async () => { + const fetchMock = jest.fn(() => ({ + status: 200, + json: async () => ({ + _object: '/api/response', + self: + 'https://api.flexport.com/shipments?page=1&per=20&sort=id&direction=desc', + version: 2, + data: { + _object: '/api/collections/paginated', + prev: null, + next: null, + data: null, + }, + error: null, + }), + })) + const client = createClient({ + apiKey: 'some-api-key', + fetchImplementation: fetchMock, + }) + + await client.listAllShipments() + expect(fetchMock).toHaveBeenCalledWith( + 'https://api.flexport.com/shipments', + { + method: 'GET', + headers: { + Authorization: 'Bearer some-api-key', + 'Content-Type': 'application/json', + 'Flexport-Version': 2, + }, + }, + ) + }) }) diff --git a/src/createClient.ts b/src/createClient.ts index ff77fd3..9e440de 100644 --- a/src/createClient.ts +++ b/src/createClient.ts @@ -29,12 +29,14 @@ const handleResponse = async ( const get = ({ endpoint, headers, + fetchImplementation, }: { endpoint: string headers: object + fetchImplementation?: any }) => async (resource: string): Promise => handleResponse( - fetch(`${endpoint}/api/${resource}`, { + (fetchImplementation || fetch)(`${endpoint}/${resource}`, { method: 'GET', headers, }), @@ -43,14 +45,19 @@ const get = ({ export const createClient = ({ apiKey, endpoint, + fetchImplementation, }: { apiKey: string endpoint?: string + fetchImplementation?: any }): Client => { - const authorizedGet = (resource: string) => () => + const authorizedGet = ( + resource: string, + ) => async () => get({ headers: headers({ apiKey }), endpoint: endpoint?.replace(/\/$/, '') || 'https://api.flexport.com', + fetchImplementation, })(resource) return { listAllShipments: authorizedGet>('shipments'),