serverless
Version:
Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more
113 lines (91 loc) • 3.46 kB
JavaScript
const expect = require('chai').expect;
const sinon = require('sinon');
const SlStats = require('./slstats');
const Serverless = require('../../Serverless');
const config = require('../../utils/config');
const userStats = require('../../utils/userStats');
describe('SlStats', () => {
let slStats;
let serverless;
beforeEach(() => {
serverless = new Serverless();
return serverless.init().then(() => {
slStats = new SlStats(serverless);
});
});
describe('#constructor()', () => {
it('should have access to the serverless instance', () => {
expect(slStats.serverless).to.deep.equal(serverless);
});
it('should have commands', () => expect(slStats.commands).to.be.not.empty);
it('should have hooks', () => expect(slStats.hooks).to.be.not.empty);
});
describe('#toggleStats()', () => {
let setStub;
let trackStub;
beforeEach(() => {
setStub = sinon.stub(config, 'set');
trackStub = sinon.stub(userStats, 'track');
});
afterEach(() => {
config.set.restore();
userStats.track.restore();
});
it('should set config.trackingDisabled to true if disabled', () => {
setStub.returns();
trackStub.resolves();
slStats.options = { disable: true };
return slStats.toggleStats().then(() => {
expect(trackStub.calledOnce).to.equal(true);
expect(trackStub.calledWithExactly('user_disabledTracking', { force: true })).to.equal(
true
);
expect(setStub.calledOnce).to.equal(true);
expect(setStub.calledWithExactly('trackingDisabled', true)).to.equal(true);
});
});
it('should set config.trackingDisabled to false if enabled', () => {
setStub.returns();
trackStub.resolves();
slStats.options = { enable: true };
return slStats.toggleStats().then(() => {
expect(trackStub.calledOnce).to.equal(true);
expect(trackStub.calledWithExactly('user_enabledTracking', { force: true })).to.equal(true);
expect(setStub.calledOnce).to.equal(true);
expect(setStub.calledWithExactly('trackingDisabled', false)).to.equal(true);
});
});
it('should resolve if no "enabled" / "disabled" options is given', () => {
setStub.returns();
trackStub.resolves();
slStats.options = {};
return slStats.toggleStats().then(() => {
expect(trackStub.calledOnce).to.equal(false);
expect(setStub.calledOnce).to.equal(false);
});
});
it('should catch the error if enabling fails', () => {
// here we assume that the tracking fails
setStub.returns();
trackStub.rejects('error while tracking');
slStats.options = { enable: true };
return slStats.toggleStats().catch(error => {
expect(trackStub.calledOnce).to.equal(true);
expect(setStub.calledOnce).to.equal(false);
expect(error).to.match(/of statistics failed/);
});
});
it('should catch the error if enabling fails', () => {
// here we assume that the config setting fails
setStub.throws('error while updating config file');
trackStub.resolves();
slStats.options = { disable: true };
return slStats.toggleStats().catch(error => {
expect(trackStub.calledOnce).to.equal(true);
expect(setStub.calledOnce).to.equal(true);
expect(error).to.match(/of statistics failed/);
});
});
});
});
;