From f9214bab1678f6a6289addce83c8c961d35dbf4f Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Thu, 21 Jan 2021 13:43:34 -0800 Subject: [PATCH 1/3] Show err response body for createJob API --- apis/testrunner.json | 10 ++++++++++ src/index.js | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apis/testrunner.json b/apis/testrunner.json index 6bf8538a..07bbef0f 100644 --- a/apis/testrunner.json +++ b/apis/testrunner.json @@ -168,6 +168,16 @@ } } } + }, + "422": { + "description": "invalid parameters", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } } } } diff --git a/src/index.js b/src/index.js index a661d069..1fee8e0d 100644 --- a/src/index.js +++ b/src/index.js @@ -196,9 +196,11 @@ export default class SauceLabs { ), responseType: 'json' }) - return response.body } catch (err) { + if (propName === 'createJob') { + throw new Error(`Failed calling ${propName}: ${err.message}, ${err.response.body}`) + } throw new Error(`Failed calling ${propName}: ${err.message}`) } } From ef69cb544d0f174b008c9b1da894ba10f96c0bdd Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Mon, 25 Jan 2021 19:06:25 -0800 Subject: [PATCH 2/3] add unit test --- src/index.js | 2 +- tests/__mocks__/got.js | 1 + tests/index.test.js | 12 ++++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 1fee8e0d..2c2dc836 100644 --- a/src/index.js +++ b/src/index.js @@ -199,7 +199,7 @@ export default class SauceLabs { return response.body } catch (err) { if (propName === 'createJob') { - throw new Error(`Failed calling ${propName}: ${err.message}, ${err.response.body}`) + throw new Error(`Failed calling ${propName}: ${err.message}, ${err.response && err.response.body}`) } throw new Error(`Failed calling ${propName}: ${err.message}`) } diff --git a/tests/__mocks__/got.js b/tests/__mocks__/got.js index ab33c8ad..b949687b 100644 --- a/tests/__mocks__/got.js +++ b/tests/__mocks__/got.js @@ -3,6 +3,7 @@ const gotMock = jest.fn() .mockImplementation(() => Promise.resolve({ statusCode: 200, headers })) gotMock.get = gotMock gotMock.put = gotMock +gotMock.post = gotMock gotMock.extend = jest.fn().mockReturnValue(gotMock) gotMock.setHeader = (header) => (headers = header) diff --git a/tests/index.test.js b/tests/index.test.js index b1d368a8..8bcc54fb 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -454,6 +454,18 @@ describe('startSauceConnect', () => { }) }) +test('should output failure msg for createJob API', async () => { + const response = new Error('Response code 422 (Unprocessable Entity)') + response.statusCode = 422 + response.response = {body: 'empty framework'} + got.post.mockReturnValue(Promise.reject(response)) + + const api = new SauceLabs({ user: 'foo', key: 'bar' }) + const error = await api.createJob({framework: ''}).catch((err) => err) + + expect(error.message).toBe('Failed calling createJob: Response code 422 (Unprocessable Entity), empty framework') +}) + afterEach(() => { fs.writeFileSync.mockClear() got.mockClear() From 5f20c03fe3aca6483db8d3394292eb925cba4a12 Mon Sep 17 00:00:00 2001 From: Tian Feng Date: Tue, 26 Jan 2021 14:21:40 -0800 Subject: [PATCH 3/3] update according to comments --- src/index.js | 5 +---- tests/index.test.js | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index 2c2dc836..9703cf2e 100644 --- a/src/index.js +++ b/src/index.js @@ -198,10 +198,7 @@ export default class SauceLabs { }) return response.body } catch (err) { - if (propName === 'createJob') { - throw new Error(`Failed calling ${propName}: ${err.message}, ${err.response && err.response.body}`) - } - throw new Error(`Failed calling ${propName}: ${err.message}`) + throw new Error(`Failed calling ${propName}: ${err.message}, ${err.response && err.response.body}`) } } } diff --git a/tests/index.test.js b/tests/index.test.js index 8bcc54fb..98c5f29e 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -214,7 +214,7 @@ test('should handle error case', async () => { limit: 123, full: true }).catch((err) => err) - expect(error.message).toBe('Failed calling listJobs: Not Found') + expect(error.message).toContain('Failed calling listJobs: Not Found') }) test('should be able to download assets', async () => {