ohif-viewer/platform/core/src/utils/Queue.test.js

70 lines
2.2 KiB
JavaScript
Raw Normal View History

import makeDeferred from './makeDeferred';
import Queue from './Queue';
/**
* Utils
*/
function timeout(delay) {
const { resolve, promise } = makeDeferred();
setTimeout(() => void resolve(Date.now()), delay);
return promise;
}
/**
* Tests
*/
const threshold = 2400;
describe('Queue', () => {
// Todo: comment due to wrong implementation
// it('should bind functions to the queue', async () => {
// const queue = new Queue(2);
// const mockedTimeout = jest.fn(timeout);
// const timer = queue.bind(mockedTimeout);
// const start = Date.now();
// timer(threshold).then(now => {
// const elapsed = now - start;
// expect(elapsed >= threshold && elapsed <= 2 * threshold).toBe(true);
// });
// const end = await timer(threshold);
// expect(end - start >= 2 * threshold).toBe(true);
// expect(mockedTimeout).toBeCalledTimes(2);
// });
it('should prevent task execution when queue limit is reached', async () => {
const queue = new Queue(1);
const mockedTimeout = jest.fn(timeout);
const timer = queue.bind(mockedTimeout);
const start = Date.now();
const promise = timer(threshold).then(time => time - start);
try {
await timer(threshold);
} catch (e) {
expect(Date.now() - start < threshold).toBe(true);
expect(e.message).toBe('Queue limit reached');
}
const elapsed = await promise;
expect(elapsed >= threshold && elapsed < 2 * threshold).toBe(true);
expect(mockedTimeout).toBeCalledTimes(1);
});
it('should safely bind tasks to the queue', async () => {
const queue = new Queue(1);
const mockedErrorHandler = jest.fn();
const mockedTimeout = jest.fn(timeout);
const timer = queue.bindSafe(mockedTimeout, mockedErrorHandler);
const start = Date.now();
const promise = timer(threshold).then(time => time - start);
await timer(threshold);
expect(Date.now() - start < threshold).toBe(true);
expect(mockedErrorHandler).toBeCalledTimes(1);
expect(mockedErrorHandler).nthCalledWith(
1,
expect.objectContaining({ message: 'Queue limit reached' })
);
const elapsed = await promise;
expect(elapsed >= threshold && elapsed < 2 * threshold).toBe(true);
expect(mockedTimeout).toBeCalledTimes(1);
});
});