From 0dc4a394dbac02287ef1fe350f734ecff40fdbf0 Mon Sep 17 00:00:00 2001 From: Alexander Noack Date: Thu, 27 May 2021 15:34:30 +0200 Subject: [PATCH] feat: add respondWithRequestBody option for POST endpoints --- examples/mock-api/v2/book.post.json | 8 ++++++++ src/serve-mocks.js | 6 +++++- src/serve-mocks.spec.js | 18 +++++++++++++++++- 3 files changed, 30 insertions(+), 2 deletions(-) create mode 100644 examples/mock-api/v2/book.post.json diff --git a/examples/mock-api/v2/book.post.json b/examples/mock-api/v2/book.post.json new file mode 100644 index 0000000..01fff61 --- /dev/null +++ b/examples/mock-api/v2/book.post.json @@ -0,0 +1,8 @@ +{ + "requestOptions": {}, + "responseOptions": { + "delay_ms": 100, + "statusCode": 201, + "respondWithRequestBody": true + } +} \ No newline at end of file diff --git a/src/serve-mocks.js b/src/serve-mocks.js index d49bf30..efb9d6f 100644 --- a/src/serve-mocks.js +++ b/src/serve-mocks.js @@ -110,7 +110,7 @@ function serveMocks (mockDirectory, port, hostname) { const requestValidation = requestOptions.validation ? requestOptions.validation : {} const responseDelay = responseOptions.delay_ms ? responseOptions.delay_ms : 2000 const statusCode = responseOptions.statusCode ? responseOptions.statusCode : 200 - const response = endpointParams.response ? endpointParams.response : { success: true } + let response = endpointParams.response ? endpointParams.response : { success: true } console.log(`receiving POST request on ${apiPath} with body:`, req.body) setTimeout(() => { @@ -128,6 +128,10 @@ function serveMocks (mockDirectory, port, hostname) { } } + if (responseOptions.respondWithRequestBody === true) { + response = req.body + } + res.status(statusCode).send(response) }, responseDelay) }) diff --git a/src/serve-mocks.spec.js b/src/serve-mocks.spec.js index b8b6305..abc48c6 100644 --- a/src/serve-mocks.spec.js +++ b/src/serve-mocks.spec.js @@ -60,6 +60,22 @@ describe('serve-mocks', () => { expect(response.body).toEqual(expectedResponse) }) + it('should respond with request body if option is set', async () => { + expect.assertions(3) // number of expect calls in this test + + const randomId = Math.floor(Math.random() * 100) + const requestBody = { + id: randomId, + author: 'Lorem Ipsum' + } + + const response = await request.post('/v2/book').send(requestBody) + + expect(response.status).toBe(201) + expect(response.headers['content-type']).toBe('application/json; charset=utf-8') + expect(response.body).toEqual(requestBody) + }) + it('should respond with 422 unprocessable entity when posting invalid user', async () => { expect.assertions(1) // number of expect calls in this test @@ -109,4 +125,4 @@ describe('serve-mocks', () => { expect(response.status).toBe(200) expect(response.headers['content-type']).toBe('image/png') }) -}) \ No newline at end of file +})