66 lines
1.9 KiB
TypeScript
66 lines
1.9 KiB
TypeScript
import { AlwaysDelay } from "./always.delay";
|
|
import { IBackOffOptions, getSanitizedOptions } from "../../options";
|
|
|
|
describe(AlwaysDelay.name, () => {
|
|
let options: IBackOffOptions;
|
|
let delay: AlwaysDelay;
|
|
|
|
function initClass() {
|
|
delay = new AlwaysDelay(options);
|
|
}
|
|
|
|
beforeEach(() => {
|
|
options = getSanitizedOptions({});
|
|
initClass();
|
|
jest.useFakeTimers();
|
|
});
|
|
|
|
it(`when calling #apply, the delay is equal to the starting delay`, async () => {
|
|
const spy = jest.fn();
|
|
delay.apply().then(spy);
|
|
jest.runTimersToTime(options.startingDelay);
|
|
await Promise.resolve();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it(`when the attempt number is 1, when calling #apply,
|
|
the delay is equal to the starting delay multiplied by the time multiple`, async () => {
|
|
delay.setAttemptNumber(1);
|
|
|
|
const spy = jest.fn();
|
|
delay.apply().then(spy);
|
|
jest.runTimersToTime(options.startingDelay * options.timeMultiple);
|
|
await Promise.resolve();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it(`when the attempt number is 2, when calling #apply,
|
|
the delay is equal to the starting delay multiplied by the time multiple raised by the attempt number`, async () => {
|
|
const attemptNumber = 2;
|
|
delay.setAttemptNumber(attemptNumber);
|
|
|
|
const spy = jest.fn();
|
|
delay.apply().then(spy);
|
|
jest.runTimersToTime(
|
|
options.startingDelay * Math.pow(options.timeMultiple, attemptNumber)
|
|
);
|
|
await Promise.resolve();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
|
|
it(`when the #maxDelay is less than #startingDelay, when calling #apply,
|
|
the delay is equal to the #maxDelay`, async () => {
|
|
options.maxDelay = options.startingDelay - 1;
|
|
|
|
const spy = jest.fn();
|
|
delay.apply().then(spy);
|
|
jest.runTimersToTime(options.maxDelay);
|
|
await Promise.resolve();
|
|
|
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|