From 2f1fd792d29dcb97d986cb231fce8a7572301b17 Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 26 Aug 2021 20:51:48 +0100 Subject: [PATCH 1/5] Test: add support for Express res.cookie() Part of #149 Extends ExpressJS API support. --- src/test-modules/express.js | 1 + src/test-modules/express.test.js | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/src/test-modules/express.js b/src/test-modules/express.js index 285fcf9..e843a54 100644 --- a/src/test-modules/express.js +++ b/src/test-modules/express.js @@ -16,6 +16,7 @@ export const expectMiddleware = (middleware, req, expectResponse = false) => new let response = {status: 200}; const res = {}; + res.cookie = (name, value, options) => (response.cookies = [...(response.cookies || []), {name, value, options}], res); res.status = (code) => (response.status = code, res); res.json = (body) => (response.body = body, resolveResponse(response)); res.send = () => resolveResponse(response); diff --git a/src/test-modules/express.test.js b/src/test-modules/express.test.js index 142e986..2efd7e3 100644 --- a/src/test-modules/express.test.js +++ b/src/test-modules/express.test.js @@ -28,6 +28,28 @@ describe('expectMiddleware', () => { message: 'Unexpected call to next()', }); }); + + test('should record cookies set on response', async () => { + const middleware = (req, res) => res.cookie('cookie1', 'value1', {secure: true}) + .cookie('cookie2', 'value2', {httpOnly: true}) + .send(); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 200, + cookies: [ + { + name: 'cookie1', + value: 'value1', + options: {secure: true}, + }, + { + name: 'cookie2', + value: 'value2', + options: {httpOnly: true}, + }, + ], + }); + }); }); describe('givenMiddleware', () => { From 6d184512735695a30bed91dde49ee92099ab2630 Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 26 Aug 2021 20:55:49 +0100 Subject: [PATCH 2/5] Test: add support for Express res.clearCookie() Part of #149 Extends ExpressJS API support. --- src/test-modules/express.js | 1 + src/test-modules/express.test.js | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/test-modules/express.js b/src/test-modules/express.js index e843a54..b7a6917 100644 --- a/src/test-modules/express.js +++ b/src/test-modules/express.js @@ -17,6 +17,7 @@ export const expectMiddleware = (middleware, req, expectResponse = false) => new const res = {}; res.cookie = (name, value, options) => (response.cookies = [...(response.cookies || []), {name, value, options}], res); + res.clearCookie = (name, options) => (response.clearCookies = [...(response.clearCookies || []), {name, options}], res); res.status = (code) => (response.status = code, res); res.json = (body) => (response.body = body, resolveResponse(response)); res.send = () => resolveResponse(response); diff --git a/src/test-modules/express.test.js b/src/test-modules/express.test.js index 2efd7e3..3cf6d9b 100644 --- a/src/test-modules/express.test.js +++ b/src/test-modules/express.test.js @@ -50,6 +50,27 @@ describe('expectMiddleware', () => { ], }); }); + + test('should record cookies cleared on response', async () => { + const middleware = (req, res) => res.clearCookie('cookie1') + .clearCookie('cookie2', {httpOnly: true}) + .send(); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 200, + clearCookies: [ + { + name: 'cookie1', + options: undefined, + }, + { + name: 'cookie2', + options: {httpOnly: true}, + }, + ], + }); + }); + }); describe('givenMiddleware', () => { From af78c48d456494bb6e734b9ad5f088c98b425396 Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 26 Aug 2021 21:06:02 +0100 Subject: [PATCH 3/5] Test: add support for Express res.redirect() Part of #149 Extends ExpressJS API support. --- src/test-modules/express.js | 1 + src/test-modules/express.test.js | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/test-modules/express.js b/src/test-modules/express.js index b7a6917..1805be9 100644 --- a/src/test-modules/express.js +++ b/src/test-modules/express.js @@ -20,6 +20,7 @@ export const expectMiddleware = (middleware, req, expectResponse = false) => new res.clearCookie = (name, options) => (response.clearCookies = [...(response.clearCookies || []), {name, options}], res); res.status = (code) => (response.status = code, res); res.json = (body) => (response.body = body, resolveResponse(response)); + res.redirect = (statusOrPath, path) => (Object.assign(response, path ? {status: statusOrPath, redirect: path} : {status: 302, redirect: statusOrPath}), resolveResponse(response)); res.send = () => resolveResponse(response); middleware(req, res, next); diff --git a/src/test-modules/express.test.js b/src/test-modules/express.test.js index 3cf6d9b..3883029 100644 --- a/src/test-modules/express.test.js +++ b/src/test-modules/express.test.js @@ -70,7 +70,24 @@ describe('expectMiddleware', () => { ], }); }); - + + test('should resolve with redirection and default status', async () => { + const middleware = (req, res) => res.redirect('/foo/bar'); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 302, + redirect: '/foo/bar', + }); + }); + + test('should resolve with redirection and custom status', async () => { + const middleware = (req, res) => res.redirect(301, '/foo/bar'); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 301, + redirect: '/foo/bar', + }); + }); }); describe('givenMiddleware', () => { From 7a687235da3176028b2ec4fca18aa2fedbafcc8d Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 26 Aug 2021 21:10:24 +0100 Subject: [PATCH 4/5] Test: Fix use of Express res.send() Send can accept an optional body. --- src/test-modules/express.js | 2 +- src/test-modules/express.test.js | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test-modules/express.js b/src/test-modules/express.js index 1805be9..ee47495 100644 --- a/src/test-modules/express.js +++ b/src/test-modules/express.js @@ -21,7 +21,7 @@ export const expectMiddleware = (middleware, req, expectResponse = false) => new res.status = (code) => (response.status = code, res); res.json = (body) => (response.body = body, resolveResponse(response)); res.redirect = (statusOrPath, path) => (Object.assign(response, path ? {status: statusOrPath, redirect: path} : {status: 302, redirect: statusOrPath}), resolveResponse(response)); - res.send = () => resolveResponse(response); + res.send = res.json; middleware(req, res, next); }); diff --git a/src/test-modules/express.test.js b/src/test-modules/express.test.js index 3883029..516f17c 100644 --- a/src/test-modules/express.test.js +++ b/src/test-modules/express.test.js @@ -88,6 +88,15 @@ describe('expectMiddleware', () => { redirect: '/foo/bar', }); }); + + test('should resolve with send', async () => { + const middleware = (req, res) => res.send('some body'); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 200, + body: 'some body', + }); + }); }); describe('givenMiddleware', () => { From fe49825eb6156686d35dfd802ffe862e2d678d01 Mon Sep 17 00:00:00 2001 From: Valentin Laurin Date: Thu, 26 Aug 2021 21:16:38 +0100 Subject: [PATCH 5/5] Test: add support for Express res.end() Part of #149 --- src/test-modules/express.js | 1 + src/test-modules/express.test.js | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/test-modules/express.js b/src/test-modules/express.js index ee47495..8c65784 100644 --- a/src/test-modules/express.js +++ b/src/test-modules/express.js @@ -22,6 +22,7 @@ export const expectMiddleware = (middleware, req, expectResponse = false) => new res.json = (body) => (response.body = body, resolveResponse(response)); res.redirect = (statusOrPath, path) => (Object.assign(response, path ? {status: statusOrPath, redirect: path} : {status: 302, redirect: statusOrPath}), resolveResponse(response)); res.send = res.json; + res.end = () => resolveResponse(response); middleware(req, res, next); }); diff --git a/src/test-modules/express.test.js b/src/test-modules/express.test.js index 516f17c..04f6bc3 100644 --- a/src/test-modules/express.test.js +++ b/src/test-modules/express.test.js @@ -97,6 +97,14 @@ describe('expectMiddleware', () => { body: 'some body', }); }); + + test('should resolve with send', async () => { + const middleware = (req, res) => res.end(); + const res = await expectMiddleware(middleware, {}, true); + expect(res).toEqual({ + status: 200, + }); + }); }); describe('givenMiddleware', () => {