public async void ShouldQueueNextExecution() { var fixture = new Fixture(); var queueClient = new Mock <IQueueClient>(); var mediator = new Mock <IMediator>(); var userService = new Mock <ICurrentUserService>(); var createCommand = fixture.Create <CreateManagementJobCommand>(); using (var dbContext = DbContextHelpers.CreateDatabaseContext()) { var createCommandHandler = new CreateManagementJobCommandHandler(dbContext); var createdId = await createCommandHandler.Handle(createCommand, CancellationToken.None); // set the job to "IsActive" var startCommand = new StartManagementJobCommand { ManagementJobId = createdId }; var startCommandHandler = new StartManagementJobCommandHandler(dbContext); await startCommandHandler.Handle(startCommand, CancellationToken.None); var executeCommand = new ExecuteManagementJobCommand { ManagementJobId = createdId }; var executeCommandHandler = new ExecuteManagementJobCommandHandler(dbContext, queueClient.Object, mediator.Object, userService.Object); await executeCommandHandler.Handle(executeCommand, CancellationToken.None); // should not call queue client because job is set to inactive queueClient.Verify(x => x.EnqueueManagementJob(executeCommand), Times.Once); } }
public async Task EnqueueManagementJob(ExecuteManagementJobCommand command) { var message = new Message(Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(command))); message.ScheduledEnqueueTimeUtc = DateTime.UtcNow.AddSeconds(20); message.ContentType = "application/json"; await _QueueClient.SendAsync(message); }
public async Task Run([ServiceBusTrigger("jobs", Connection = "ServiceBusConnectionString")] ExecuteManagementJobCommand command, ILogger log) { log.LogInformation($"C# ServiceBus queue trigger function processed message"); await _Mediator.Send(command); }