elsa-core/test/unit/Elsa.Scheduling.UnitTests/Services/DefaultTriggerSchedulerTests.cs
Sipke Schoorstra 7449d2e703 address greptile review feedback (greploop iteration 1)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-21 19:43:09 +02:00

43 lines
1.9 KiB
C#

using Elsa.Common;
using Elsa.Scheduling.Activities;
using Elsa.Scheduling.Bookmarks;
using Elsa.Scheduling.Services;
using Elsa.Workflows.Helpers;
using Elsa.Workflows.Runtime.Entities;
using Microsoft.Extensions.Logging;
using NSubstitute;
namespace Elsa.Scheduling.UnitTests.Services;
public class DefaultTriggerSchedulerTests
{
[Fact]
public async Task ScheduleAsync_SchedulesPastDueStartAtTriggerForCatchUp()
{
var workflowScheduler = Substitute.For<IWorkflowScheduler>();
var systemClock = Substitute.For<ISystemClock>();
var logger = Substitute.For<ILogger<DefaultTriggerScheduler>>();
var scheduler = new DefaultTriggerScheduler(workflowScheduler, systemClock, logger);
var now = new DateTimeOffset(2025, 11, 06, 22, 50, 00, TimeSpan.Zero);
var executeAt = now.AddMinutes(-5);
ScheduleNewWorkflowInstanceRequest? scheduledRequest = null;
var trigger = new StoredTrigger
{
Id = "trigger-1",
Name = ActivityTypeNameHelper.GenerateTypeName<StartAt>(),
WorkflowDefinitionVersionId = "workflow-version",
ActivityId = "activity-1",
Payload = new StartAtPayload(executeAt)
};
systemClock.UtcNow.Returns(now);
workflowScheduler.ScheduleAtAsync(trigger.Id, Arg.Do<ScheduleNewWorkflowInstanceRequest>(x => scheduledRequest = x), executeAt, Arg.Any<CancellationToken>()).Returns(ValueTask.CompletedTask);
await scheduler.ScheduleAsync([trigger], CancellationToken.None);
await workflowScheduler.Received(1).ScheduleAtAsync(trigger.Id, Arg.Any<ScheduleNewWorkflowInstanceRequest>(), executeAt, Arg.Any<CancellationToken>());
Assert.NotNull(scheduledRequest);
Assert.Equal(trigger.ActivityId, scheduledRequest.TriggerActivityId);
Assert.Equal(trigger.WorkflowDefinitionVersionId, scheduledRequest.WorkflowDefinitionHandle.DefinitionVersionId);
}
}