From 25f95a8e219013f28f482d1080394ba26e51cad3 Mon Sep 17 00:00:00 2001 From: ozwi Date: Fri, 2 Oct 2020 11:06:55 +0300 Subject: [PATCH 1/4] make sure http request parameters have boolean value --- .../aws/package/compile/events/apiGateway/lib/method/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js index 2ff56e0e340..4adfc6138b4 100644 --- a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js +++ b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js @@ -14,7 +14,7 @@ module.exports = { const requestParameters = {}; if (event.http.request && event.http.request.parameters) { Object.entries(event.http.request.parameters).forEach(([key, value]) => { - requestParameters[key] = value.required === undefined ? value : value.required; + requestParameters[key] = _.isObject(value) ? value.required || false : value; }); } From b5ab04546e76ccdbaf1b8decad0c81c4bd98a184 Mon Sep 17 00:00:00 2001 From: ozwi Date: Sat, 3 Oct 2020 14:46:36 +0300 Subject: [PATCH 2/4] change default value to true and add test --- .../events/apiGateway/lib/method/index.js | 8 ++++- .../apiGateway/lib/method/index.test.js | 29 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js index 4adfc6138b4..469d4a94a81 100644 --- a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js +++ b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js @@ -14,7 +14,13 @@ module.exports = { const requestParameters = {}; if (event.http.request && event.http.request.parameters) { Object.entries(event.http.request.parameters).forEach(([key, value]) => { - requestParameters[key] = _.isObject(value) ? value.required || false : value; + /* eslint-disable no-nested-ternary */ + requestParameters[key] = _.isObject(value) + ? value.required != null + ? value.required + : true + : value; + /* eslint-enable no-nested-ternary */ }); } diff --git a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js index c1ab20a1c2e..9de54aba1e8 100644 --- a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js +++ b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js @@ -603,6 +603,35 @@ describe('#compileMethods()', () => { }); }); + it('should set required to true when omitted from mapped value', () => { + awsCompileApigEvents.validated.events = [ + { + functionName: 'First', + http: { + path: 'users/create', + method: 'post', + integration: 'HTTP_PROXY', + request: { + uri: 'https://example.com', + parameters: { + 'method.request.querystring.foo': { + mappedValue: 'fooValue', + }, + }, + }, + }, + }, + ]; + return awsCompileApigEvents.compileMethods().then(() => { + expect( + awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate.Resources + .ApiGatewayMethodUsersCreatePost.Properties.RequestParameters[ + 'method.request.querystring.foo' + ] + ).to.equal(true); + }); + }); + it('should set authorizer config for AWS_IAM', () => { awsCompileApigEvents.validated.events = [ { From 9ab486ce68bfc86f7f221b78e00e7eff3bfdd898 Mon Sep 17 00:00:00 2001 From: ozwi Date: Tue, 6 Oct 2020 11:24:02 +0300 Subject: [PATCH 3/4] replace nested ternary with IIFE --- .../compile/events/apiGateway/lib/method/index.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js index 469d4a94a81..f89cac963b0 100644 --- a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js +++ b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.js @@ -14,13 +14,10 @@ module.exports = { const requestParameters = {}; if (event.http.request && event.http.request.parameters) { Object.entries(event.http.request.parameters).forEach(([key, value]) => { - /* eslint-disable no-nested-ternary */ - requestParameters[key] = _.isObject(value) - ? value.required != null - ? value.required - : true - : value; - /* eslint-enable no-nested-ternary */ + requestParameters[key] = (() => { + if (!_.isObject(value)) return value; + return value.required != null ? value.required : true; + })(); }); } From 84b2cdf2dc9e67e51b04ed96f1de083e6544df84 Mon Sep 17 00:00:00 2001 From: ozwi Date: Tue, 6 Oct 2020 11:24:21 +0300 Subject: [PATCH 4/4] rewrite test with runServerless --- .../apiGateway/lib/method/index.test.js | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js index 9de54aba1e8..a1a681de78a 100644 --- a/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js +++ b/lib/plugins/aws/package/compile/events/apiGateway/lib/method/index.test.js @@ -4,6 +4,7 @@ const expect = require('chai').expect; const AwsCompileApigEvents = require('../../index'); const Serverless = require('../../../../../../../../Serverless'); const AwsProvider = require('../../../../../../provider/awsProvider'); +const runServerless = require('../../../../../../../../../test/utils/run-serverless'); describe('#compileMethods()', () => { let serverless; @@ -603,33 +604,41 @@ describe('#compileMethods()', () => { }); }); - it('should set required to true when omitted from mapped value', () => { - awsCompileApigEvents.validated.events = [ - { - functionName: 'First', - http: { - path: 'users/create', - method: 'post', - integration: 'HTTP_PROXY', - request: { - uri: 'https://example.com', - parameters: { - 'method.request.querystring.foo': { - mappedValue: 'fooValue', + it('should set required to true when omitted from mapped value', async () => { + const { cfTemplate } = await runServerless({ + cliArgs: ['package'], + fixture: 'function', + configExt: { + functions: { + foo: { + events: [ + { + http: { + path: 'users/create', + method: 'post', + integration: 'HTTP_PROXY', + request: { + uri: 'https://example.com', + parameters: { + querystrings: { + foo: { + mappedValue: 'bar', + }, + }, + }, + }, + }, }, - }, + ], }, }, }, - ]; - return awsCompileApigEvents.compileMethods().then(() => { - expect( - awsCompileApigEvents.serverless.service.provider.compiledCloudFormationTemplate.Resources - .ApiGatewayMethodUsersCreatePost.Properties.RequestParameters[ - 'method.request.querystring.foo' - ] - ).to.equal(true); }); + expect( + cfTemplate.Resources.ApiGatewayMethodUsersCreatePost.Properties.RequestParameters[ + 'method.request.querystring.foo' + ] + ).to.equal(true); }); it('should set authorizer config for AWS_IAM', () => {