diff --git a/lib/plugins/print/print.js b/lib/plugins/print/print.js index 82e08788c..dd0a7a67d 100644 --- a/lib/plugins/print/print.js +++ b/lib/plugins/print/print.js @@ -25,18 +25,21 @@ class Print { print() { this.serverless.variables.options = this.serverless.processedInput.options; this.serverless.variables.loadVariableSyntax(); - getServerlessConfigFile(process.cwd()) + return getServerlessConfigFile(process.cwd()) .then((data) => { const conf = data; // Need to delete variableSyntax to avoid potential matching errors if (conf.provider.variableSyntax) { delete conf.provider.variableSyntax; } - return this.serverless.variables.populateObject(conf); - }).then((data) => this.serverless.cli.consoleLog(YAML.dump(data))); - - return BbPromise.resolve(); + return conf; + }) + .then((data) => { + return this.serverless.variables.populateObject(data).then(() => { return data; }) + }) + .then((data) => this.serverless.cli.consoleLog(YAML.dump(data))); } + } module.exports = Print; diff --git a/lib/plugins/print/print.test.js b/lib/plugins/print/print.test.js index df1a57cda..5b6d0b03f 100644 --- a/lib/plugins/print/print.test.js +++ b/lib/plugins/print/print.test.js @@ -4,6 +4,7 @@ const expect = require('chai').expect; const sinon = require('sinon'); const proxyquire = require('proxyquire'); const Serverless = require('../../Serverless'); +const AwsProvider = require('../aws/provider/awsProvider'); const CLI = require('../../classes/CLI'); const YAML = require('js-yaml'); @@ -12,13 +13,9 @@ describe('Print', () => { let print; let serverless; let getServerlessConfigFileStub; - let consoleLogSpy; - let sandbox; beforeEach(() => { - sandbox = sinon.sandbox.create(); - consoleLogSpy = sandbox.spy(console, 'log'); - getServerlessConfigFileStub = sandbox.stub(); + getServerlessConfigFileStub = sinon.stub(); const printPlugin = proxyquire('./print.js', { '../../utils/getServerlessConfigFile': getServerlessConfigFileStub, }); @@ -29,11 +26,15 @@ describe('Print', () => { } serverless.cli = new CLI(serverless); print = new printPlugin(serverless); + print.serverless.cli = { + consoleLog: sinon.spy(), + }; }); afterEach(() => { - consoleLogSpy.restore(); - }) + //print.serverless.cli.consoleLog.restore(); + serverless.service.provider.variableSyntax = '\\${([ ~:a-zA-Z0-9._\'",\\-\\/\\(\\)]+?)}' + }); it('should print standard config', () => { const conf = { @@ -44,13 +45,117 @@ describe('Print', () => { } getServerlessConfigFileStub.resolves(conf) - print.print().then(() => { - const message = consoleLogSpy.args.join(); + return print.print().then(() => { + const message = print.serverless.cli.consoleLog.args.join(); expect(getServerlessConfigFileStub.calledOnce).to.equal(true); - expect(console.log.calledOnce).to.equal(true); + expect(print.serverless.cli.consoleLog.called).to.be.equal(true); expect(message).to.have.string(YAML.dump(conf)); }) }); + it('should resolve command line variables', () => { + const conf = { + service: 'my-service', + provider: { + name: 'aws', + stage: '${opt:stage}' + } + } + getServerlessConfigFileStub.resolves(conf) + + serverless.processedInput = { + commands: [ 'print' ], + options: { stage: 'dev', region: undefined } + } + + const expected = { + service: 'my-service', + provider: { + name: 'aws', + stage: 'dev' + } + } + + return print.print().then(() => { + const message = print.serverless.cli.consoleLog.args.join(); + + expect(getServerlessConfigFileStub.calledOnce).to.equal(true); + expect(print.serverless.cli.consoleLog.called).to.be.equal(true); + expect(message).to.equal(YAML.dump(expected)); + }) + }); + + it('should resolve using custom variable syntax', () => { + const conf = { + service: 'my-service', + provider: { + name: 'aws', + stage: '${{opt:stage}}' + } + } + serverless.service.provider.variableSyntax = "\\${{([ ~:a-zA-Z0-9._\\'\",\\-\\/\\(\\)]+?)}}"; + getServerlessConfigFileStub.resolves(conf); + + serverless.processedInput = { + commands: [ 'print' ], + options: { stage: 'dev', region: undefined } + } + + const expected = { + service: 'my-service', + provider: { + name: 'aws', + stage: 'dev' + } + } + + return print.print().then(() => { + const message = print.serverless.cli.consoleLog.args.join(); + + expect(getServerlessConfigFileStub.calledOnce).to.equal(true); + expect(print.serverless.cli.consoleLog.called).to.be.equal(true); + expect(message).to.equal(YAML.dump(expected)); + }) + }); + + it('should resolve custom variables', () => { + const conf = { + service: 'my-service', + custom: { region: 'us-east-1' }, + provider: { + name: 'aws', + stage: '${opt:stage}', + region: '${self:custom.region}' + } + } + getServerlessConfigFileStub.resolves(conf) + + serverless.processedInput = { + commands: [ 'print' ], + options: { stage: 'dev', region: undefined } + } + serverless.service.custom = { region: 'us-east-1' } + + const expected = { + service: 'my-service', + custom: { + region: 'us-east-1', + }, + provider: { + name: 'aws', + stage: 'dev', + region: 'us-east-1' + } + } + + return print.print().then(() => { + const message = print.serverless.cli.consoleLog.args.join(); + + expect(getServerlessConfigFileStub.calledOnce).to.equal(true); + expect(print.serverless.cli.consoleLog.called).to.be.equal(true); + expect(message).to.equal(YAML.dump(expected)); + }) + }); + });