UNPKG

2.33 kBJavaScriptView Raw
1// @flow
2import assert from 'assert';
3import randomInt from 'random-int';
4
5import PromiseQueue from '../src/PromiseQueue';
6
7describe('PromiseQueue', () => {
8 it('run() should resolve when all async functions in queue have completed', async () => {
9 let queue = new PromiseQueue();
10
11 let someBooleanToBeChanged = false;
12 queue.add(() =>
13 Promise.resolve().then(() => {
14 someBooleanToBeChanged = true;
15 }),
16 );
17 await queue.run();
18 assert(someBooleanToBeChanged);
19 });
20
21 it('run() should reject if any of the async functions in the queue failed', async () => {
22 let error = new Error('some failure');
23 try {
24 let queue = new PromiseQueue();
25 queue
26 .add(() => Promise.reject(error))
27 .catch(
28 /* catch this to prevent an unhandled promise rejection*/ () => {},
29 );
30 await queue.run();
31 } catch (e) {
32 assert.equal(e, error);
33 }
34 });
35
36 it('.run() should instantly resolve when the queue is empty', async () => {
37 let queue = new PromiseQueue();
38 await queue.run();
39 // no need to assert, test will hang or throw an error if condition fails
40 });
41
42 it(".add() should resolve with the same result when the passed in function's promise resolves", async () => {
43 let queue = new PromiseQueue();
44 let promise = queue.add(() => Promise.resolve(42));
45 await queue.run();
46 let result = await promise;
47 assert.equal(result, 42);
48 });
49
50 it(".add() should reject with the same error when the passed in function's promise rejects", async () => {
51 let queue = new PromiseQueue();
52 let error = new Error('Oh no!');
53 let promise = queue.add(() => Promise.reject(error));
54 await queue.run().catch(() => null);
55 await promise.then(null, e => assert.equal(e, error));
56 });
57
58 it('constructor() should allow for configuration of max concurrent running functions', async () => {
59 const maxConcurrent = 5;
60 const queue = new PromiseQueue({maxConcurrent});
61 let running = 0;
62
63 new Array(100).fill(0).map(() =>
64 queue.add(async () => {
65 running++;
66 assert(queue._numRunning === running);
67 assert(running <= maxConcurrent);
68 await Promise.resolve(randomInt(1, 10)); //sleep(randomInt(1, 10));
69 running--;
70 }),
71 );
72
73 await queue.run();
74 });
75});