Skip to content
Snippets Groups Projects

Resolve "Borestop"

Merged Colin DAMON requested to merge 25-borestop into master
11 files
+ 9283
0
Compare changes
  • Side-by-side
  • Inline
Files
11
+ 58
0
 
import ProvidesCallback = jest.ProvidesCallback;
 
import DoneCallback = jest.DoneCallback;
 
import { waitFor } from './TimerUtils';
 
 
const runTest = (handler: ProvidesCallback) =>
 
new Promise((resolve, reject) => {
 
const doneCallback = (): DoneCallback => {
 
const callback: any = (err: any) => (err ? reject(err) : resolve());
 
callback.fail = () => {};
 
return callback;
 
};
 
 
const result = handler(doneCallback());
 
 
if (result && result.then) {
 
result.catch(reject).then(resolve);
 
} else {
 
resolve();
 
}
 
});
 
 
const waitBeforeRetry = (time: number) => waitFor(time);
 
 
const withRetriesIt = async (name: string, fn: ProvidesCallback, maxTries: number, delay: number, timeout?: number) => {
 
it(
 
name,
 
async () => {
 
let latestError;
 
for (let retry = 1; retry <= maxTries; retry++) {
 
try {
 
await runTest(fn);
 
 
return;
 
} catch (error) {
 
latestError = error;
 
await waitBeforeRetry(delay);
 
}
 
}
 
throw latestError;
 
},
 
timeout
 
);
 
};
 
 
export interface RetryConfiguration {
 
maxTries: number;
 
delay: number;
 
}
 
 
export const TREEZOR_RETRIES: RetryConfiguration = { maxTries: 20, delay: 500 };
 
 
export interface WithRetries {
 
it: (name: string, fn: ProvidesCallback, timeout?: number) => void;
 
}
 
 
export const withRetries = (conf: RetryConfiguration): WithRetries => ({
 
it: (name: string, fn: ProvidesCallback, timeout?: number) => withRetriesIt(name, fn, conf.maxTries, conf.delay, timeout),
 
});
Loading