serverless/lib/plugins/print/print.test.js
Erik Erikson 13ae54cacc Fix Cycles Crash (#4556)
Replace the existing service and clear the cache (which references the ammended service)
Remove cycles in that service using json-cycle.
Dump the decycled object as YAML to console.
2017-12-13 16:39:06 -08:00

193 lines
5.0 KiB
JavaScript

'use strict';
const expect = require('chai').expect;
const sinon = require('sinon');
const proxyquire = require('proxyquire');
const Serverless = require('../../Serverless');
const CLI = require('../../classes/CLI');
const YAML = require('js-yaml');
describe('Print', () => {
let print;
let serverless;
let getServerlessConfigFileStub;
beforeEach(() => {
getServerlessConfigFileStub = sinon.stub();
const PrintPlugin = proxyquire('./print.js', {
'../../utils/getServerlessConfigFile': getServerlessConfigFileStub,
});
serverless = new Serverless();
serverless.processedInput = {
commands: ['print'],
options: { stage: undefined, region: undefined },
};
serverless.cli = new CLI(serverless);
print = new PrintPlugin(serverless);
print.serverless.cli = {
consoleLog: sinon.spy(),
};
});
afterEach(() => {
serverless.service.provider.variableSyntax = '\\${([ ~:a-zA-Z0-9._\'",\\-\\/\\(\\)]+?)}';
});
it('should print standard config', () => {
const conf = {
service: 'my-service',
provider: {
name: 'aws',
},
};
getServerlessConfigFileStub.resolves(conf);
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.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}}',
variableSyntax: "\\${{([ ~:a-zA-Z0-9._\\'\",\\-\\/\\(\\)]+?)}}",
},
};
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',
variableSyntax: "\\${{([ ~:a-zA-Z0-9._\\'\",\\-\\/\\(\\)]+?)}}",
},
};
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));
});
});
it('should resolve self references', () => {
const conf = {
custom: {
me: '${self:}',
},
provider: {},
};
getServerlessConfigFileStub.resolves(conf);
serverless.processedInput = {
commands: ['print'],
options: {},
};
const expected = {
custom: {
me: {
$ref: '$',
},
},
provider: {},
};
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));
});
});
});