public void ConstructorSetsSchedule() { //arrange var schedule = new Schedule(); var action = Substitute.For <ICauseScheduledAnarchy>(); //act var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays()); //assert sut.Schedule.Should().BeSameAs(schedule); }
public async Task StartScheduleTriggersActionExecutionWithCorrectDurationNull() { //arrange; var schedule = Get.CustomBuilderFor.Schedule.Repeat(1); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays()); //act sut.StartSchedule(); await Wait.Until(() => !sut.Running, 1); //assert await action .Received(1) .ExecuteAsync(null, Arg.Any <CancellationToken>()); }
public async Task StartScheduleTriggersActionExecution() { //arrange var schedule = new Schedule().Repeat(1); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays()); //act sut.StartSchedule(); await Wait.Until(() => !sut.Running, 1); //assert await action .Received(1) .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>()); }
public async Task ScheduleStopsAfterRepeatCountMet() { var expRepetitions = 2; //arrange var schedule = new Schedule().Repeat(expRepetitions); var action = Substitute.For <ICauseScheduledAnarchy>(); var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays()); //act sut.StartSchedule(); await Wait.Until(() => !sut.Running, 1); //assert await action .Received(expRepetitions) .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>()); }
public async Task SchedulerStopsScheduleWhenExecuting() { //arrange var schedule = new Schedule() .WithoutEnd(); var ctTriggered = false; var action = Substitute.For <ICauseScheduledAnarchy>(); action .ExecuteAsync(Arg.Any <TimeSpan?>(), Arg.Any <CancellationToken>()) .Returns(async r => { var ct = r.ArgAt <CancellationToken>(1); try { await Task.Delay(20000, ct); } catch (TaskCanceledException) { ctTriggered = true; } }); var sut = new Scheduler(schedule, action, TestTimer.WithoutDelays()); sut.StartSchedule(); var monitorTask = Task.Run(async() => await Wait.AndTimeActionAsync(() => !sut.Running, 20)); //act await Task.Delay(500); sut.StopSchedule(); var duration = await monitorTask; //assert duration.Should().BeCloseTo(TimeSpan.FromSeconds(0.6), 200); ctTriggered.Should().BeTrue(); }