Add compileMethods functionality

This commit is contained in:
Philipp Muens 2016-06-14 14:31:04 +02:00
parent d69a4ba711
commit fe5edf1a2b
5 changed files with 137 additions and 13 deletions

View File

@ -7,7 +7,7 @@ const compileRestApi = require('./lib/compileRestApi');
const compileDeployment = require('./lib/compileDeployment');
const compileStage = require('./lib/compileStage');
const compileResources = require('./lib/compileResources');
const compileMethod = require('./lib/compileMethod');
const compileMethods = require('./lib/compileMethods');
const compilePermission = require('./lib/compilePermission');
class AwsCompileApigEvents {
@ -22,7 +22,7 @@ class AwsCompileApigEvents {
compileDeployment,
compileStage,
compileResources,
compileMethod,
compileMethods,
compilePermission
);
@ -33,7 +33,7 @@ class AwsCompileApigEvents {
.then(this.compileDeployment)
.then(this.compileStage)
.then(this.compileResources)
.then(this.compileMethod)
.then(this.compileMethods)
.then(this.compilePermission),
};
}

View File

@ -1,10 +0,0 @@
'use strict';
const BbPromise = require('bluebird');
module.exports = {
compileMethod() {
return BbPromise.resolve();
},
};

View File

@ -0,0 +1,48 @@
'use strict';
const BbPromise = require('bluebird');
const forEach = require('lodash').forEach;
const merge = require('lodash').merge;
module.exports = {
compileMethods() {
let methodIndex = 0;
forEach(this.serverless.service.functions, (functionObject, functionName) => {
forEach(functionObject.events.aws.http_endpoints, (path, method) => {
const resourceId = this.resourceLogicalIds[path];
const methodTemplate = `
{
"Type" : "AWS::ApiGateway::Method",
"Properties" : {
"AuthorizationType" : "NONE",
"HttpMethod" : "${method.toUpperCase()}",
"MethodResponses" : [
{
"ResponseModels" : {},
"ResponseParameters" : {},
"StatusCode" : "200"
}
],
"RequestParameters" : {},
"ResourceId" : { "Ref": "${resourceId}" },
"RestApiId" : { "Ref": "RestApiApigEvent" }
}
}
`;
const methodObject = {
[`${functionName}Method${methodIndex}ApigEvent`]: JSON.parse(methodTemplate),
};
merge(this.serverless.service.resources.aws.Resources,
methodObject);
methodIndex += 1;
});
});
return BbPromise.resolve();
},
};

View File

@ -5,3 +5,4 @@ require('./compileRestApi');
require('./compileDeployment');
require('./compileStage');
require('./compileResources');
require('./compileMethods');

View File

@ -0,0 +1,85 @@
'use strict';
const expect = require('chai').expect;
const AwsCompileApigEvents = require('../awsCompileApigEvents');
const Serverless = require('../../../Serverless');
describe('#compileMethods()', () => {
let serverless;
let awsCompileApigEvents;
const serviceResourcesAwsResourcesObjectMock = {
Resources: {
firstMethod0ApigEvent: {
Type: 'AWS::ApiGateway::Method',
Properties: {
AuthorizationType: 'NONE',
HttpMethod: 'POST',
MethodResponses: [
{
ResponseModels: {},
ResponseParameters: {},
StatusCode: '200',
},
],
RequestParameters: {},
ResourceId: { Ref: 'firstResource0ApigEvent' },
RestApiId: { Ref: 'RestApiApigEvent' },
},
},
firstMethod1ApigEvent: {
Type: 'AWS::ApiGateway::Method',
Properties: {
AuthorizationType: 'NONE',
HttpMethod: 'GET',
MethodResponses: [
{
ResponseModels: {},
ResponseParameters: {},
StatusCode: '200',
},
],
RequestParameters: {},
ResourceId: { Ref: 'firstResource1ApigEvent' },
RestApiId: { Ref: 'RestApiApigEvent' },
},
},
},
};
beforeEach(() => {
serverless = new Serverless();
serverless.init();
serverless.service = {
functions: {
first: {
events: {
aws: {
http_endpoints: {
post: 'users/create',
get: 'users/create/list',
},
},
},
},
},
resources: {
aws: {
Resources: {},
},
},
};
awsCompileApigEvents = new AwsCompileApigEvents(serverless);
awsCompileApigEvents.resourceLogicalIds = {
'users/create': 'firstResource0ApigEvent',
'users/create/list': 'firstResource1ApigEvent',
};
});
it('should create method resources', () => {
awsCompileApigEvents.compileMethods().then(() => {
expect(JSON.stringify(serviceResourcesAwsResourcesObjectMock.Resources))
.to.equal(JSON.stringify(awsCompileApigEvents.serverless.service.resources.aws.Resources));
});
});
});