@serenity-js/core
Version:
The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure
53 lines (45 loc) • 1.57 kB
text/typescript
import type { Discardable, SerialisedAbility } from '../../abilities';
import { Ability } from '../../abilities';
import type { Clock, DelayedCallback, Duration, RepeatUntilLimits } from '../models';
import { Scheduler } from '../models';
/**
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to schedule a callback function
* to be executed with a delay, or until some condition is met.
*
* Used internally by the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Wait`](https://serenity-js.org/api/core/class/Wait/).
*
* @experimental
*
* @group Time
*/
export class ScheduleWork extends Ability implements Discardable {
private readonly scheduler: Scheduler;
constructor(clock: Clock, interactionTimeout: Duration) {
super();
this.scheduler = new Scheduler(clock, interactionTimeout);
}
/**
* @param callback
* @param limits
*/
repeatUntil<Result>(
callback: DelayedCallback<Result>,
limits?: RepeatUntilLimits<Result>,
): Promise<Result> {
return this.scheduler.repeatUntil(callback, limits);
}
waitFor(delay: Duration): Promise<void> {
return this.scheduler.waitFor(delay);
}
discard(): void {
this.scheduler.stop();
}
override toJSON(): SerialisedAbility {
return {
...super.toJSON(),
options: {
scheduler: this.scheduler.toJSON(),
},
};
}
}