serverless/tests/integration-package/cloudformation.tests.js
2019-06-28 10:18:49 +02:00

129 lines
4.3 KiB
JavaScript

'use strict';
const fs = require('fs');
const path = require('path');
const fse = require('fs-extra');
const { execSync } = require('../utils/child-process');
const { serverlessExec } = require('../utils/misc');
const { getTmpDirPath } = require('../utils/fs');
const fixturePaths = {
regular: path.join(__dirname, 'fixtures/regular'),
individually: path.join(__dirname, 'fixtures/individually'),
artifact: path.join(__dirname, 'fixtures/artifact'),
};
describe('Integration test - Packaging', () => {
let cwd;
beforeEach(() => {
cwd = getTmpDirPath();
});
it('package artifact directive works', () => {
fse.copySync(fixturePaths.artifact, cwd);
execSync(`${serverlessExec} package`, { cwd });
const cfnTemplate = JSON.parse(
fs.readFileSync(path.join(cwd, '.serverless/cloudformation-template-update-stack.json'))
);
expect(cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key).toMatch(
/serverless\/aws-nodejs\/dev\/[^]*\/artifact.zip/
);
delete cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key;
expect(cfnTemplate.Resources.HelloLambdaFunction).toEqual({
Type: 'AWS::Lambda::Function',
Properties: {
Code: {
S3Bucket: {
Ref: 'ServerlessDeploymentBucket',
},
},
FunctionName: 'aws-nodejs-dev-hello',
Handler: 'handler.hello',
MemorySize: 1024,
Role: {
'Fn::GetAtt': ['IamRoleLambdaExecution', 'Arn'],
},
Runtime: 'nodejs10.x',
Timeout: 6,
},
DependsOn: ['HelloLogGroup', 'IamRoleLambdaExecution'],
});
});
it('creates the correct default function resource in cfn template', () => {
fse.copySync(fixturePaths.regular, cwd);
execSync(`${serverlessExec} package`, { cwd });
const cfnTemplate = JSON.parse(
fs.readFileSync(path.join(cwd, '.serverless/cloudformation-template-update-stack.json'))
);
expect(cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key).toMatch(
/serverless\/aws-nodejs\/dev\/[^]*\/aws-nodejs.zip/
);
delete cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key;
expect(cfnTemplate.Resources.HelloLambdaFunction).toEqual({
Type: 'AWS::Lambda::Function',
Properties: {
Code: {
S3Bucket: {
Ref: 'ServerlessDeploymentBucket',
},
},
FunctionName: 'aws-nodejs-dev-hello',
Handler: 'handler.hello',
MemorySize: 1024,
Role: {
'Fn::GetAtt': ['IamRoleLambdaExecution', 'Arn'],
},
Runtime: 'nodejs10.x',
Timeout: 6,
},
DependsOn: ['HelloLogGroup', 'IamRoleLambdaExecution'],
});
});
it('handles package individually with include/excludes correctly', () => {
fse.copySync(fixturePaths.individually, cwd);
execSync(`${serverlessExec} package`, { cwd });
const cfnTemplate = JSON.parse(
fs.readFileSync(path.join(cwd, '.serverless/cloudformation-template-update-stack.json'))
);
expect(cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key).toMatch(
/serverless\/aws-nodejs\/dev\/[^]*\/hello.zip/
);
expect(cfnTemplate.Resources.Hello2LambdaFunction.Properties.Code.S3Key).toMatch(
/serverless\/aws-nodejs\/dev\/[^]*\/hello2.zip/
);
delete cfnTemplate.Resources.HelloLambdaFunction.Properties.Code.S3Key;
expect(cfnTemplate.Resources.HelloLambdaFunction).toEqual({
Type: 'AWS::Lambda::Function',
Properties: {
Code: {
S3Bucket: {
Ref: 'ServerlessDeploymentBucket',
},
},
FunctionName: 'aws-nodejs-dev-hello',
Handler: 'handler.hello',
MemorySize: 1024,
Role: {
'Fn::GetAtt': ['IamRoleLambdaExecution', 'Arn'],
},
Runtime: 'nodejs10.x',
Timeout: 6,
},
DependsOn: ['HelloLogGroup', 'IamRoleLambdaExecution'],
});
});
it('resolves self.provider.region', () => {
fse.copySync(fixturePaths.regular, cwd);
execSync(`${serverlessExec} package`, { cwd });
const cfnTemplate = JSON.parse(
fs.readFileSync(path.join(cwd, '.serverless/cloudformation-template-update-stack.json'))
);
expect(cfnTemplate.Resources.CustomDashnameLambdaFunction.Properties.FunctionName).toEqual(
'aws-nodejs-us-east-1-custom-name'
);
});
});