serverless-step-functions
Version:
The module is AWS Step Functions plugin for Serverless Framework
167 lines (148 loc) • 6.02 kB
JavaScript
const expect = require('chai').expect;
const Serverless = require('serverless/lib/Serverless');
const AwsProvider = require('serverless/lib/plugins/aws/provider');
const ServerlessStepFunctions = require('./../../../index');
describe('#compileUsagePlan()', () => {
let serverless;
let serverlessStepFunctions;
beforeEach(() => {
serverless = new Serverless();
const options = {
stage: 'dev',
region: 'us-east-1',
};
serverless.service.service = 'first-service';
serverless.setProvider('aws', new AwsProvider(serverless));
if (!serverless.service.provider.apiGateway) serverless.service.provider.apiGateway = {};
serverless.service.provider.apiGateway.apiKeys = ['1234567890'];
serverless.service.provider.compiledCloudFormationTemplate = {
Resources: {},
};
serverless.configSchemaHandler = {
// eslint-disable-next-line no-unused-vars
defineTopLevelProperty: (propertyName, propertySchema) => {},
};
serverlessStepFunctions = new ServerlessStepFunctions(serverless, options);
serverlessStepFunctions.serverless.service.stepFunctions = {
stateMachines: {
first: {},
},
};
serverlessStepFunctions.apiGatewayDeploymentLogicalId = 'ApiGatewayDeploymentTest';
serverlessStepFunctions.apiGatewayRestApiLogicalId = 'ApiGatewayRestApi';
});
it('should compile default usage plan resource', () => {
serverless.service.provider.apiGateway.apiKeys = ['1234567890'];
return serverlessStepFunctions.compileUsagePlan().then(() => {
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Type,
).to.equal('AWS::ApiGateway::UsagePlan');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].DependsOn,
).to.equal('ApiGatewayDeploymentTest');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.ApiStages[0].ApiId.Ref,
).to.equal('ApiGatewayRestApi');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.ApiStages[0].Stage,
).to.equal('dev');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.Description,
).to.equal('Usage plan for first-service dev stage');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.UsagePlanName,
).to.equal('first-service-dev');
});
});
it('should compile custom usage plan resource', () => {
serverless.service.provider.apiGateway = {
usagePlan: {
quota: {
limit: 500,
offset: 10,
period: 'MONTH',
},
throttle: {
burstLimit: 200,
rateLimit: 100,
},
},
};
return serverlessStepFunctions.compileUsagePlan().then(() => {
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Type,
).to.equal('AWS::ApiGateway::UsagePlan');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].DependsOn,
).to.equal('ApiGatewayDeploymentTest');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.ApiStages[0].ApiId.Ref,
).to.equal('ApiGatewayRestApi');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.ApiStages[0].Stage,
).to.equal('dev');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.Description,
).to.equal('Usage plan for first-service dev stage');
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.Quota,
).to.deep.equal({
Limit: 500,
Offset: 10,
Period: 'MONTH',
});
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.Throttle,
).to.deep.equal({
BurstLimit: 200,
RateLimit: 100,
});
expect(
serverlessStepFunctions.serverless.service.provider.compiledCloudFormationTemplate
.Resources[
serverlessStepFunctions.provider.naming.getUsagePlanLogicalId()
].Properties.UsagePlanName,
).to.equal('first-service-dev');
});
});
});
;