mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
99 lines
3.6 KiB
JavaScript
99 lines
3.6 KiB
JavaScript
'use strict';
|
|
|
|
/* eslint-disable no-unused-expressions */
|
|
|
|
const BbPromise = require('bluebird');
|
|
const chai = require('chai');
|
|
|
|
const PromiseTracker = require('../../../../lib/classes/PromiseTracker');
|
|
|
|
chai.use(require('chai-as-promised'));
|
|
|
|
const expect = chai.expect;
|
|
|
|
/**
|
|
* Mostly this class is tested by its use in peer ~/lib/classes/Variables.js
|
|
*
|
|
* Mostly, I'm creating coverage but if errors are discovered, coverage for the specific cases
|
|
* can be created here.
|
|
*/
|
|
describe('PromiseTracker', () => {
|
|
let promiseTracker;
|
|
beforeEach(() => {
|
|
promiseTracker = new PromiseTracker();
|
|
});
|
|
it('logs a warning without throwing', () => {
|
|
promiseTracker.add('foo', BbPromise.resolve(), '${foo:}');
|
|
promiseTracker.add('foo', BbPromise.delay(10), '${foo:}');
|
|
promiseTracker.report(); // shouldn't throw
|
|
return Promise.all(promiseTracker.getAll());
|
|
});
|
|
it('reports no promises when none have been added', () => {
|
|
expect(promiseTracker.getAll()).to.be.an('array').that.is.empty;
|
|
expect(promiseTracker.getPending()).to.be.an('array').that.is.empty;
|
|
expect(promiseTracker.getSettled()).to.be.an('array').that.is.empty;
|
|
expect(promiseTracker.getResolved()).to.be.an('array').that.is.empty;
|
|
expect(promiseTracker.getRejected()).to.be.an('array').that.is.empty;
|
|
});
|
|
it('reports the correct number of added promise statuses', () => {
|
|
let resolve;
|
|
const pending = new BbPromise((rslv) => {
|
|
resolve = rslv;
|
|
});
|
|
const resolved = BbPromise.resolve();
|
|
const rejected = BbPromise.reject('reason');
|
|
promiseTracker.add('pending', pending, '${pending:}');
|
|
promiseTracker.add('resolved', resolved, '${resolved:}');
|
|
promiseTracker.add('rejected', rejected, '${rejected:}');
|
|
resolved.state = 'resolved';
|
|
rejected.state = 'rejected';
|
|
return BbPromise.delay(1)
|
|
.then(() => {
|
|
const pendings = promiseTracker.getPending();
|
|
expect(pendings).to.be.an.instanceof(Array);
|
|
expect(pendings.length).to.equal(1);
|
|
expect(pendings[0]).to.equal(pending);
|
|
const settleds = promiseTracker.getSettled();
|
|
expect(settleds).to.be.an.instanceof(Array);
|
|
expect(settleds.length).to.equal(2);
|
|
expect(settleds).to.include(resolved);
|
|
expect(settleds).to.include(rejected);
|
|
const resolveds = promiseTracker.getResolved();
|
|
expect(resolveds).to.be.an.instanceof(Array);
|
|
expect(resolveds.length).to.equal(1);
|
|
expect(resolveds).to.include(resolved);
|
|
const rejecteds = promiseTracker.getRejected();
|
|
expect(rejecteds).to.be.an.instanceof(Array);
|
|
expect(rejecteds.length).to.equal(1);
|
|
expect(rejecteds).to.include(rejected);
|
|
})
|
|
.then(() => {
|
|
resolve();
|
|
});
|
|
});
|
|
it('reports and then clears tracked promises when stopped after reporting.', () => {
|
|
let resolve;
|
|
const pending = new BbPromise((rslv) => {
|
|
resolve = rslv;
|
|
});
|
|
const resolved = BbPromise.resolve();
|
|
const rejected = BbPromise.reject('reason');
|
|
promiseTracker.add('pending', pending, '${pending:}');
|
|
promiseTracker.add('resolved', resolved, '${resolved:}');
|
|
promiseTracker.add('rejected', rejected, '${rejected:}');
|
|
resolved.state = 'resolved';
|
|
rejected.state = 'rejected';
|
|
promiseTracker.reported = true;
|
|
return BbPromise.delay(1).then(() => {
|
|
const all = promiseTracker.getAll();
|
|
expect(all).to.be.an.instanceof(Array);
|
|
expect(all.length).to.equal(3);
|
|
promiseTracker.stop();
|
|
const stopped = promiseTracker.getAll();
|
|
expect(stopped).to.be.an.instanceof(Array);
|
|
expect(stopped.length).to.equal(0);
|
|
resolve();
|
|
});
|
|
});
|
|
});
|