From 1b3090d6de20925b388847791552af833fd9ec63 Mon Sep 17 00:00:00 2001 From: Jon Ursenbach Date: Sun, 12 Jul 2020 17:36:16 -0700 Subject: [PATCH] feat: automatically reject the sdk promise for error statuses --- package.json | 1 + packages/api/__tests__/index.test.js | 20 ++++++++++++++++++++ packages/api/src/index.js | 8 +++++++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 18866ab0..9d0d827b 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "bootstrap": "lerna bootstrap", "clean": "lerna clean", "lint": "lerna run lint --stream", + "postinstall": "npm run bootstrap", "publish": "lerna publish", "test": "lerna run test --stream", "version": "conventional-changelog --pkg lerna.json -i CHANGELOG.md -s && git add CHANGELOG.md" diff --git a/packages/api/__tests__/index.test.js b/packages/api/__tests__/index.test.js index ab6ac56b..8e20bb45 100644 --- a/packages/api/__tests__/index.test.js +++ b/packages/api/__tests__/index.test.js @@ -147,6 +147,26 @@ describe('#accessors', () => { describe('#fetch', () => { const petId = 123; + it('should reject for error-level status codes', () => { + expect.assertions(2); + + const response = { + error: 'ENDPOINT_NOTFOUND', + message: `The endpoint you called (GET /pets/${petId}) doesn't exist`, + }; + + const mock = nock(petstoreServerUrl).delete(`/pets/${petId}`).reply(404, response); + + return petstoreSdk.deletePet({ id: petId }).catch(async err => { + expect(err.status).toBe(404); + + const json = await err.json(); + expect(json).toStrictEqual(response); + + mock.done(); + }); + }); + describe('operationId', () => { it('should pass through parameters for operationId', () => { const response = { diff --git a/packages/api/src/index.js b/packages/api/src/index.js index e7fd2857..2f1601bd 100644 --- a/packages/api/src/index.js +++ b/packages/api/src/index.js @@ -36,7 +36,13 @@ class Sdk { function fetchOperation(spec, operation, body, metadata) { const har = oasToHar(spec, operation, prepareParams(operation, body, metadata), prepareAuth(authKeys, operation)); - return fetchHar(har); + return fetchHar(har).then(res => { + if (res.status >= 400 && res.status <= 599) { + throw res; + } + + return res; + }); } function loadMethods(spec) {