|
| 1 | +import { Meteor } from 'meteor/meteor' |
| 2 | +import { waitForAllObserversReady } from '../lib' |
| 3 | +import { sleep } from '@sofie-automation/shared-lib/dist/lib/lib' |
| 4 | + |
| 5 | +describe('waitForAllObserversReady', () => { |
| 6 | + // beforeEach(() => { |
| 7 | + // jest.useFakeTimers() |
| 8 | + // }) |
| 9 | + |
| 10 | + it('no observers', async () => { |
| 11 | + await expect(waitForAllObserversReady([])).resolves.toHaveLength(0) |
| 12 | + }) |
| 13 | + |
| 14 | + async function createFakeObserver(waitTime: number, stopFn: () => void): Promise<Meteor.LiveQueryHandle> { |
| 15 | + await sleep(waitTime) |
| 16 | + |
| 17 | + return { |
| 18 | + stop: stopFn, |
| 19 | + } |
| 20 | + } |
| 21 | + |
| 22 | + async function createBadObserver(waitTime: number): Promise<Meteor.LiveQueryHandle> { |
| 23 | + await sleep(waitTime) |
| 24 | + |
| 25 | + throw new Error('Some error') |
| 26 | + } |
| 27 | + |
| 28 | + function stopAll(observers: Meteor.LiveQueryHandle[]) { |
| 29 | + observers.forEach((o) => o.stop()) |
| 30 | + } |
| 31 | + |
| 32 | + it('multiple good observers', async () => { |
| 33 | + const stopFn = jest.fn() |
| 34 | + |
| 35 | + const res = waitForAllObserversReady([ |
| 36 | + createFakeObserver(10, stopFn), |
| 37 | + createFakeObserver(12, stopFn), |
| 38 | + createFakeObserver(10, stopFn), |
| 39 | + createFakeObserver(8, stopFn), |
| 40 | + ]) |
| 41 | + await expect(res).resolves.toHaveLength(4) |
| 42 | + |
| 43 | + expect(stopFn).toHaveBeenCalledTimes(0) |
| 44 | + |
| 45 | + stopAll(await res) |
| 46 | + expect(stopFn).toHaveBeenCalledTimes(4) |
| 47 | + }) |
| 48 | + |
| 49 | + it('multiple good with a bad observer', async () => { |
| 50 | + const stopFn = jest.fn() |
| 51 | + |
| 52 | + const res = waitForAllObserversReady([ |
| 53 | + createFakeObserver(10, stopFn), |
| 54 | + createFakeObserver(12, stopFn), |
| 55 | + createBadObserver(10), |
| 56 | + createFakeObserver(8, stopFn), |
| 57 | + ]) |
| 58 | + await expect(res).rejects.toThrow('Some error') |
| 59 | + |
| 60 | + // Successful ones should be stopped |
| 61 | + expect(stopFn).toHaveBeenCalledTimes(3) |
| 62 | + }) |
| 63 | +}) |
0 commit comments