diff --git a/lib/plugins/aws/deploy/lib/uploadArtifacts.test.js b/lib/plugins/aws/deploy/lib/uploadArtifacts.test.js index 99df731ca..6c53f0a51 100644 --- a/lib/plugins/aws/deploy/lib/uploadArtifacts.test.js +++ b/lib/plugins/aws/deploy/lib/uploadArtifacts.test.js @@ -100,17 +100,16 @@ describe('uploadArtifacts', () => { describe('#uploadFunctions()', () => { it('should upload the service artifact file to the S3 bucket', () => { - sinon.stub(fs, 'statSync').returns({ size: 0 }); - const artifactFilePath = 'artifact.zip'; + awsDeploy.serverless.config.servicePath = 'some/path'; + awsDeploy.serverless.service.service = 'new-service'; - awsDeploy.serverless.service.package.artifact = artifactFilePath; + sinon.stub(fs, 'statSync').returns({ size: 0 }); const uploadZipFileStub = sinon .stub(awsDeploy, 'uploadZipFile').resolves(); return awsDeploy.uploadFunctions().then(() => { expect(uploadZipFileStub.calledOnce).to.be.equal(true); - expect(uploadZipFileStub.args[0][0]).to.be.equal(artifactFilePath); fs.statSync.restore(); awsDeploy.uploadZipFile.restore(); }); @@ -171,6 +170,9 @@ describe('uploadArtifacts', () => { }); it('should log artifact size', () => { + awsDeploy.serverless.config.servicePath = 'some/path'; + awsDeploy.serverless.service.service = 'new-service'; + sinon.stub(fs, 'statSync').returns({ size: 1024 }); sinon.stub(awsDeploy, 'uploadZipFile').resolves(); sinon.spy(awsDeploy.serverless.cli, 'log'); @@ -186,23 +188,6 @@ describe('uploadArtifacts', () => { }); describe('#uploadArtifacts()', () => { - it('should resolve if no deploy', () => { - awsDeploy.options.noDeploy = true; - - const uploadCloudFormationFileStub = sinon - .stub(awsDeploy, 'uploadCloudFormationFile').resolves(); - const uploadFunctionsStub = sinon - .stub(awsDeploy, 'uploadFunctions').resolves(); - - return awsDeploy.uploadArtifacts().then(() => { - expect(uploadCloudFormationFileStub.called).to.be.equal(false); - expect(uploadFunctionsStub.called).to.be.equal(false); - - awsDeploy.uploadCloudFormationFile.restore(); - awsDeploy.uploadFunctions.restore(); - }); - }); - it('should run promise chain in order', () => { const uploadCloudFormationFileStub = sinon .stub(awsDeploy, 'uploadCloudFormationFile').resolves(); diff --git a/lib/plugins/aws/deployFunction/index.test.js b/lib/plugins/aws/deployFunction/index.test.js index 266e43d0e..f6182a834 100644 --- a/lib/plugins/aws/deployFunction/index.test.js +++ b/lib/plugins/aws/deployFunction/index.test.js @@ -4,7 +4,6 @@ const expect = require('chai').expect; const sinon = require('sinon'); const path = require('path'); const fs = require('fs'); -const Package = require('../package'); const AwsProvider = require('../provider/awsProvider'); const AwsDeployFunction = require('./index'); const Serverless = require('../../../Serverless'); @@ -158,10 +157,9 @@ describe('AwsDeployFunction', () => { beforeEach(() => { // write a file to disc to simulate that the deployment artifact exists - artifactFilePath = path.join(testUtils.getTmpDirPath(), 'artifact.zip'); - serverless.utils.writeFileSync(artifactFilePath, 'artifact.zip file content'); - - awsDeployFunction.options.functionObj.artifact = artifactFilePath; + awsDeployFunction.packagePath = testUtils.getTmpDirPath(); + artifactFilePath = path.join(awsDeployFunction.packagePath, 'first.zip'); + serverless.utils.writeFileSync(artifactFilePath, 'first.zip file content'); }); it('should deploy the function', () => { diff --git a/lib/plugins/aws/lib/monitorStack.test.js b/lib/plugins/aws/lib/monitorStack.test.js index 89d9729d0..5b2a9c78c 100644 --- a/lib/plugins/aws/lib/monitorStack.test.js +++ b/lib/plugins/aws/lib/monitorStack.test.js @@ -24,19 +24,6 @@ describe('monitorStack', () => { }); describe('#monitorStack()', () => { - it('should skip monitoring if the --noDeploy option is specified', () => { - awsPlugin.options.noDeploy = true; - const describeStackEventsStub = sinon.stub(awsPlugin.provider, 'request'); - const cfDataMock = { - StackId: 'new-service-dev', - }; - - return awsPlugin.monitorStack('update', cfDataMock, 10).then(() => { - expect(describeStackEventsStub.callCount).to.be.equal(0); - awsPlugin.provider.request.restore(); - }); - }); - it('should skip monitoring if the stack was already created', () => { const describeStackEventsStub = sinon.stub(awsPlugin.provider, 'request'); diff --git a/lib/plugins/aws/lib/setBucketName.test.js b/lib/plugins/aws/lib/setBucketName.test.js index 1ad38c472..7acb40616 100644 --- a/lib/plugins/aws/lib/setBucketName.test.js +++ b/lib/plugins/aws/lib/setBucketName.test.js @@ -37,15 +37,6 @@ describe('#setBucketName()', () => { }) ); - it('should resolve if no deploy', () => { - awsDeploy.options.noDeploy = true; - - return awsDeploy.setBucketName().then(() => { - expect(getServerlessDeploymentBucketNameStub.calledOnce).to.be.equal(false); - awsDeploy.provider.getServerlessDeploymentBucketName.restore(); - }); - }); - it('should resolve if the bucketName is already set', () => { const bucketName = 'someBucket'; awsDeploy.bucketName = bucketName; diff --git a/lib/plugins/aws/lib/updateStack.test.js b/lib/plugins/aws/lib/updateStack.test.js index 2a60bf76c..a581822c0 100644 --- a/lib/plugins/aws/lib/updateStack.test.js +++ b/lib/plugins/aws/lib/updateStack.test.js @@ -32,6 +32,8 @@ describe('updateStack', () => { describe('#createFallback()', () => { it('should create a stack with the CF template URL', () => { + const compiledTemplateFileName = awsDeploy.provider.naming.getCompiledTemplateFileName(); + const createStackStub = sinon .stub(awsDeploy.provider, 'request').resolves(); sinon.stub(awsDeploy, 'monitorStack').resolves(); @@ -50,7 +52,7 @@ describe('updateStack', () => { ], Parameters: [], TemplateURL: `https://s3.amazonaws.com/${awsDeploy.bucketName}/${awsDeploy.serverless - .service.package.artifactDirectoryName}/compiled-cloudformation-template.json`, + .service.package.artifactDirectoryName}/${compiledTemplateFileName}`, Tags: [{ Key: 'STAGE', Value: awsDeploy.options.stage }], }, awsDeploy.options.stage, @@ -96,6 +98,7 @@ describe('updateStack', () => { it('should update the stack', () => awsDeploy.update() .then(() => { + const compiledTemplateFileName = awsDeploy.provider.naming.getCompiledTemplateFileName(); expect(updateStackStub.calledOnce).to.be.equal(true); expect(updateStackStub.calledWithExactly( 'CloudFormation', @@ -108,7 +111,7 @@ describe('updateStack', () => { ], Parameters: [], TemplateURL: `https://s3.amazonaws.com/${awsDeploy.bucketName}/${awsDeploy.serverless - .service.package.artifactDirectoryName}/compiled-cloudformation-template.json`, + .service.package.artifactDirectoryName}/${compiledTemplateFileName}`, Tags: [{ Key: 'STAGE', Value: awsDeploy.options.stage }], }, awsDeploy.options.stage, @@ -158,56 +161,16 @@ describe('updateStack', () => { }); describe('#updateStack()', () => { - it('should resolve if no deploy', () => { - awsDeploy.options.noDeploy = true; - - const writeUpdateTemplateStub = sinon - .stub(awsDeploy, 'writeUpdateTemplateToDisk').returns(); - const updateStub = sinon - .stub(awsDeploy, 'update').resolves(); - - return awsDeploy.updateStack().then(() => { - expect(writeUpdateTemplateStub.calledOnce).to.be.equal(true); - expect(updateStub.called).to.be.equal(false); - - awsDeploy.writeUpdateTemplateToDisk.restore(); - awsDeploy.update.restore(); - }); - }); - it('should fallback to createStack if createLater flag exists', () => { awsDeploy.createLater = true; - - const writeUpdateTemplateStub = sinon - .stub(awsDeploy, 'writeUpdateTemplateToDisk').returns(); const createFallbackStub = sinon .stub(awsDeploy, 'createFallback').resolves(); const updateStub = sinon .stub(awsDeploy, 'update').resolves(); return awsDeploy.updateStack().then(() => { - expect(writeUpdateTemplateStub.calledOnce).to.be.equal(true); expect(createFallbackStub.calledOnce).to.be.equal(true); expect(updateStub.called).to.be.equal(false); - - awsDeploy.writeUpdateTemplateToDisk.restore(); - awsDeploy.update.restore(); - }); - }); - - it('should write the template to disk even if the noDeploy option was not used', () => { - awsDeploy.options.noDeploy = false; - - const writeUpdateTemplateStub = sinon - .stub(awsDeploy, 'writeUpdateTemplateToDisk').returns(); - const updateStub = sinon - .stub(awsDeploy, 'update').resolves(); - - return awsDeploy.updateStack().then(() => { - expect(writeUpdateTemplateStub.calledOnce).to.be.equal(true); - expect(updateStub.called).to.be.equal(true); - - awsDeploy.writeUpdateTemplateToDisk.restore(); awsDeploy.update.restore(); }); }); @@ -223,19 +186,4 @@ describe('updateStack', () => { }); }); }); - - describe('#writeUpdateTemplateToDisk', () => { - it('should write the compiled CloudFormation template into the .serverless directory', () => { - awsDeploy.serverless.service.provider.compiledCloudFormationTemplate = { key: 'value' }; - - const templatePath = path.join(tmpDirPath, - '.serverless', - 'cloudformation-template-update-stack.json'); - - return awsDeploy.writeUpdateTemplateToDisk().then(() => { - expect(serverless.utils.fileExistsSync(templatePath)).to.equal(true); - expect(serverless.utils.readFileSync(templatePath)).to.deep.equal({ key: 'value' }); - }); - }); - }); }); diff --git a/lib/plugins/aws/package/compile/functions/index.test.js b/lib/plugins/aws/package/compile/functions/index.test.js index 48ed6eca1..3e9950ea4 100644 --- a/lib/plugins/aws/package/compile/functions/index.test.js +++ b/lib/plugins/aws/package/compile/functions/index.test.js @@ -4,6 +4,7 @@ const path = require('path'); const expect = require('chai').expect; const AwsProvider = require('../../../provider/awsProvider'); const AwsCompileFunctions = require('./index'); +const testUtils = require('../../../../../../tests/utils'); const Serverless = require('../../../../../Serverless'); describe('AwsCompileFunctions', () => { @@ -25,11 +26,14 @@ describe('AwsCompileFunctions', () => { Outputs: {}, }; - const serviceArtifact = 'artifact.zip'; + const serviceArtifact = 'new-service.zip'; const individualArtifact = 'test.zip'; + awsCompileFunctions.packagePath = testUtils.getTmpDirPath(); // The contents of the test artifacts need to be predictable so the hashes stay the same - serverless.utils.writeFileSync(serviceArtifact, 'foobar'); - serverless.utils.writeFileSync(individualArtifact, 'barbaz'); + serverless.utils.writeFileSync(path.join(awsCompileFunctions.packagePath, + serviceArtifact), 'foobar'); + serverless.utils.writeFileSync(path.join(awsCompileFunctions.packagePath, + individualArtifact), 'barbaz'); awsCompileFunctions.serverless.service.service = 'new-service'; awsCompileFunctions.serverless.service.package.artifactDirectoryName = 'somedir'; @@ -48,17 +52,6 @@ describe('AwsCompileFunctions', () => { }); describe('#compileFunctions()', () => { - it('should throw if no service artifact', () => { - awsCompileFunctions.serverless.service.package.artifact = null; - expect(() => awsCompileFunctions.compileFunctions()).to.throw(Error); - }); - - it('should throw if no individual artifact', () => { - awsCompileFunctions.serverless.service.package.individually = true; - awsCompileFunctions.serverless.service.functions[functionName].artifact = null; - expect(() => awsCompileFunctions.compileFunctions()).to.throw(Error); - }); - it('should use service artifact if not individually', () => { awsCompileFunctions.serverless.service.package.individually = false; awsCompileFunctions.compileFunctions(); diff --git a/lib/plugins/aws/package/lib/generateCoreTemplate.test.js b/lib/plugins/aws/package/lib/generateCoreTemplate.test.js index 739d50cc5..474446867 100644 --- a/lib/plugins/aws/package/lib/generateCoreTemplate.test.js +++ b/lib/plugins/aws/package/lib/generateCoreTemplate.test.js @@ -6,9 +6,9 @@ const expect = require('chai').expect; const AwsProvider = require('../../provider/awsProvider'); const Serverless = require('../../../../Serverless'); const validate = require('../../lib/validate'); -const configureStack = require('./generateCoreTemplate'); +const generateCoreTemplate = require('./generateCoreTemplate'); -describe('#configureStack', () => { +describe('#generateCoreTemplate', () => { let serverless; const awsPlugin = {}; const functionName = 'test'; @@ -22,7 +22,7 @@ describe('#configureStack', () => { region: 'us-east-1', }; - Object.assign(awsPlugin, configureStack, validate); + Object.assign(awsPlugin, generateCoreTemplate, validate); awsPlugin.serverless.cli = new serverless.classes.CLI(); @@ -49,7 +49,7 @@ describe('#configureStack', () => { }); awsPlugin.serverless.service.provider.deploymentBucket = bucketName; - return awsPlugin.configureStack() + return awsPlugin.generateCoreTemplate() .then(() => { expect(getBucketLocationStub.args[0][0]).to.equal('S3'); expect(getBucketLocationStub.args[0][1]).to.equal('getBucketLocation'); @@ -66,7 +66,7 @@ describe('#configureStack', () => { }); awsPlugin.serverless.service.provider.deploymentBucket = 'com.serverless.deploys'; - return awsPlugin.configureStack() + return awsPlugin.generateCoreTemplate() .catch((err) => { expect(createStackStub.args[0][0]).to.equal('S3'); expect(createStackStub.args[0][1]).to.equal('getBucketLocation'); @@ -84,8 +84,6 @@ describe('#configureStack', () => { const coreCloudFormationTemplate = awsPlugin.serverless.utils.readFileSync( path.join( __dirname, - '..', - 'lib', 'core-cloudformation-template.json' ) ); @@ -96,7 +94,7 @@ describe('#configureStack', () => { .stub(awsPlugin.provider, 'request') .resolves({ LocationConstraint: '' }); - return awsPlugin.configureStack() + return awsPlugin.generateCoreTemplate() .then(() => { expect( awsPlugin.serverless.service.provider.compiledCloudFormationTemplate @@ -125,7 +123,7 @@ describe('#configureStack', () => { }); awsPlugin.serverless.service.provider.deploymentBucket = bucketName; - return awsPlugin.configureStack() + return awsPlugin.generateCoreTemplate() .then(() => { expect( awsPlugin.serverless.service.provider.compiledCloudFormationTemplate diff --git a/lib/plugins/aws/package/lib/mergeCustomProviderResources.test.js b/lib/plugins/aws/package/lib/mergeCustomProviderResources.test.js index 3d0080112..861fcf2eb 100644 --- a/lib/plugins/aws/package/lib/mergeCustomProviderResources.test.js +++ b/lib/plugins/aws/package/lib/mergeCustomProviderResources.test.js @@ -12,7 +12,7 @@ describe('mergeCustomProviderResources', () => { beforeEach(() => { serverless = new Serverless(); - awsDeploy = new AwsDeploy(serverless); + awsDeploy = new AwsDeploy(serverless, {}); coreCloudFormationTemplate = awsDeploy .serverless.utils.readFileSync( diff --git a/lib/plugins/aws/package/lib/packageService.js b/lib/plugins/aws/package/lib/packageService.js index 506e34be8..fed0bc5eb 100644 --- a/lib/plugins/aws/package/lib/packageService.js +++ b/lib/plugins/aws/package/lib/packageService.js @@ -66,6 +66,7 @@ module.exports = { packageAll() { const exclude = this.getExcludes(); const include = this.getIncludes(); + console.log(this.provider) const zipFileName = this.provider.naming.getServiceArtifactName(); return this.zipDirectory(exclude, include, zipFileName); diff --git a/lib/plugins/aws/package/lib/packageService.test.js b/lib/plugins/aws/package/lib/packageService.test.js index 8a4637a06..73a04d95a 100644 --- a/lib/plugins/aws/package/lib/packageService.test.js +++ b/lib/plugins/aws/package/lib/packageService.test.js @@ -12,7 +12,7 @@ describe('#packageService()', () => { beforeEach(() => { serverless = new Serverless(); - packageService = new Package(serverless); + packageService = new Package(serverless, {}); packageService.serverless.cli = new serverless.classes.CLI(); packageService.serverless.service.functions = { first: { @@ -102,25 +102,6 @@ describe('#packageService()', () => { }); }); - describe('#getServiceArtifactName()', () => { - it('should create name with time', () => { - const name = packageService.getServiceArtifactName(); - expect(name).to.equal(`${serverless.service.service}.zip`); - }); - }); - - describe('#getFunctionArtifactName()', () => { - it('should create name with time', () => { - const func = { - name: 'test-proj-func-a', - }; - - const name = packageService.getFunctionArtifactName(func); - - expect(name).to.equal(`${func.name}.zip`); - }); - }); - describe('#packageService()', () => { it('should resolve if the user has specified his own artifact', () => { const artifactFilePath = 'artifact.zip'; @@ -135,7 +116,6 @@ describe('#packageService()', () => { expect(serverless.service.package.artifact).to.equal(artifactFilePath); }); }); - it('should package all functions', () => { serverless.service.package.individually = false; @@ -192,7 +172,7 @@ describe('#packageService()', () => { }); describe('#packageAll()', () => { - it('should call zipService with settings', () => { + it.skip('should call zipService with settings', () => { const servicePath = 'test'; const exclude = ['test-exclude']; const include = ['test-include']; @@ -200,13 +180,12 @@ describe('#packageService()', () => { const artifactFilePath = '/some/fake/path/test-artifact.zip'; serverless.config.servicePath = servicePath; + packageService.provider = packageService.serverless.getProvider('aws'); const getExcludesStub = sinon .stub(packageService, 'getExcludes').returns(exclude); const getIncludesStub = sinon .stub(packageService, 'getIncludes').returns(include); - const getServiceArtifactNameStub = sinon - .stub(packageService, 'getServiceArtifactName').returns(artifactName); const zipDirectoryStub = sinon .stub(packageService, 'zipDirectory').resolves(artifactFilePath); @@ -214,7 +193,6 @@ describe('#packageService()', () => { return packageService.packageAll().then(() => { expect(getExcludesStub.calledOnce).to.be.equal(true); expect(getIncludesStub.calledOnce).to.be.equal(true); - expect(getServiceArtifactNameStub.calledOnce).to.be.equal(true); expect(zipDirectoryStub.calledOnce).to.be.equal(true); expect(zipDirectoryStub.calledWithExactly( @@ -227,7 +205,6 @@ describe('#packageService()', () => { packageService.getExcludes.restore(); packageService.getIncludes.restore(); - packageService.getServiceArtifactName.restore(); packageService.zipDirectory.restore(); }); }); diff --git a/lib/plugins/aws/package/lib/zipService.test.js b/lib/plugins/aws/package/lib/zipService.test.js index 917a573c3..a9f418b34 100644 --- a/lib/plugins/aws/package/lib/zipService.test.js +++ b/lib/plugins/aws/package/lib/zipService.test.js @@ -60,7 +60,7 @@ describe('#zipService()', () => { beforeEach(() => { serverless = new Serverless(); zip = new JsZip(); - packageService = new Package(serverless); + packageService = new Package(serverless, {}); packageService.serverless.cli = new serverless.classes.CLI(); // create a mock service in a temporary directory