|  |  |  | /* eslint-disable more/no-then */ | 
					
						
							|  |  |  | import chai from 'chai'; | 
					
						
							|  |  |  | import chaiAsPromised from 'chai-as-promised'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import { createTaskWithTimeout } from '../../../../session/utils/TaskWithTimeout'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | chai.use(chaiAsPromised as any); | 
					
						
							|  |  |  | chai.should(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const { assert } = chai; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const taskName = 'whatever'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | describe('createTaskWithTimeout', () => { | 
					
						
							|  |  |  |   it('resolves when promise resolves', async () => { | 
					
						
							|  |  |  |     const task = () => Promise.resolve('hi!'); | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, 'task_123'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await taskWithTimeout().then((result: any) => { | 
					
						
							|  |  |  |       assert.strictEqual(result, 'hi!'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('flows error from promise back', async () => { | 
					
						
							|  |  |  |     const error = new Error('original'); | 
					
						
							|  |  |  |     const task = () => Promise.reject(error); | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, 'task_123'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await taskWithTimeout().catch((flowedError: any) => { | 
					
						
							|  |  |  |       assert.strictEqual(error, flowedError); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('rejects if promise takes too long (this one logs error to console)', async () => { | 
					
						
							|  |  |  |     let complete = false; | 
					
						
							|  |  |  |     const task = async () => | 
					
						
							|  |  |  |       new Promise(resolve => { | 
					
						
							|  |  |  |         setTimeout(() => { | 
					
						
							|  |  |  |           complete = true; | 
					
						
							|  |  |  |           resolve(null); | 
					
						
							|  |  |  |         }, 3000); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, taskName, 10); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     await taskWithTimeout().then( | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         throw new Error('it was not supposed to resolve!'); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         assert.strictEqual(complete, false); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('resolves if task returns something falsey', async () => { | 
					
						
							|  |  |  |     const task = () => {}; | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, taskName); | 
					
						
							|  |  |  |     await taskWithTimeout(); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('resolves if task returns a non-promise', async () => { | 
					
						
							|  |  |  |     const task = () => 'hi!'; | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, taskName); | 
					
						
							|  |  |  |     await taskWithTimeout().then((result: any) => { | 
					
						
							|  |  |  |       assert.strictEqual(result, 'hi!'); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  |   it('rejects if task throws (and does not log about taking too long)', async () => { | 
					
						
							|  |  |  |     const error = new Error('Task is throwing!'); | 
					
						
							|  |  |  |     const task = () => { | 
					
						
							|  |  |  |       throw error; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     const taskWithTimeout = createTaskWithTimeout(task, taskName, 10); | 
					
						
							|  |  |  |     await taskWithTimeout().then( | 
					
						
							|  |  |  |       () => { | 
					
						
							|  |  |  |         throw new Error('Overall task should reject!'); | 
					
						
							|  |  |  |       }, | 
					
						
							|  |  |  |       (flowedError: any) => { | 
					
						
							|  |  |  |         assert.strictEqual(flowedError, error); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | }); |