uppy/packages/@uppy/utils/src/RateLimitedQueue.test.js
Renée Kooi 0f269fc054
utils: accept sync functions in wrapPromiseFunction() (#1910)
* utils: add failing test for wrapPromiseFunction(syncFn)

* utils: promisify non-promise-returning functions in wrapPromiseFunction()
2019-10-25 11:07:06 +02:00

59 lines
1.4 KiB
JavaScript

const RateLimitedQueue = require('./RateLimitedQueue')
const delay = ms => new Promise(resolve => setTimeout(resolve, ms))
describe('RateLimitedQueue', () => {
let pending = 0
function fn () {
pending++
return delay(15).then(() => pending--)
}
it('should run at most N promises at the same time', async () => {
const queue = new RateLimitedQueue(4)
const fn2 = queue.wrapPromiseFunction(fn)
const result = Promise.all([
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2()
])
expect(pending).toBe(4)
await delay(10)
expect(pending).toBe(4)
await result
expect(pending).toBe(0)
})
it('should accept Infinity as limit', () => {
const queue = new RateLimitedQueue(Infinity)
const fn2 = queue.wrapPromiseFunction(fn)
const result = Promise.all([
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2()
])
expect(pending).toBe(10)
return result.then(() => {
expect(pending).toBe(0)
})
})
it('should accept non-promise function in wrapPromiseFunction()', () => {
const queue = new RateLimitedQueue(1)
function syncFn () { return 1 }
const fn2 = queue.wrapPromiseFunction(syncFn)
return Promise.all([
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2(), fn2(), fn2(),
fn2(), fn2()
])
})
})