using System.Collections.Generic; using LCU.Api.Internal.Dispatcher.Configurations; using LCU.Api.Internal.Dispatcher.Services; using LCU.Api.Internal.Dispatcher.Services.DispatcherOperationServices; using LCU.Api.Internal.Dispatcher.Services.QueueServices; using LCU.Api.Internal.DispatcherLib.Repositories; using LCU.Api.Internal.DispatcherTests.RepositoryTests; using LCU.Library.Internal.DispatcherModels.Enums; using LCU.Library.Internal.DispatcherModels.Models.Requests; namespace LCU.Api.Internal.DispatcherTests.ServiceTests.DispatcherOperationServices; public class JobFailureServiceTest : DbContextFromJsonTest { private readonly JobFailureService _jobFailureService; private readonly Mock _mockWorkItemService; private readonly Mock _mockWorkItemExecutionService; private readonly JobService _jobService; private readonly Mock _mockExecutionMessageService; private readonly Mock _mockQueueDetermineOperationService; private readonly Mock _mockQueueSendErroredJobAlertService; public JobFailureServiceTest() { var dbContext = GetContextWithData("RepositoryTests\\job_repo_basic.json"); var unitOfWork = new UnitOfWork(dbContext); var jobRepository = new JobRepository(dbContext); _mockWorkItemService = new Mock(); _mockWorkItemExecutionService = new Mock(); _mockExecutionMessageService = new Mock(); _mockQueueDetermineOperationService = new Mock(); _mockQueueSendErroredJobAlertService = new Mock(); _jobService = new JobService(unitOfWork, jobRepository, _mockWorkItemService.Object, _mockWorkItemExecutionService.Object, new ApiConfiguration()); _jobFailureService = new JobFailureService(_mockWorkItemService.Object, _mockWorkItemExecutionService.Object, _jobService, _mockExecutionMessageService.Object, _mockQueueDetermineOperationService.Object, _mockQueueSendErroredJobAlertService.Object); } [Fact] public async Task HandleJobFailureRequest_QueuesErroredJobAlert_WithUpdatedJobErrorRecipients() { var workItemExecution = new WorkItemExecution { WorkItemExecutionId = 10, WorkItemId = 1297 }; var workItem = new WorkItem { WorkItemId = 1297, CancelJobOnFailure = false, WorkItemExecutions = new List { workItemExecution } }; var request = new JobFailureRequest { WorkItemId = 1297, ExecutionMessages = new List() }; _mockWorkItemService.Setup(x => x.GetByIdAsync(request.WorkItemId)).ReturnsAsync(workItem); _mockWorkItemExecutionService.Setup(x => x.UpdateFailedWorkItemExecution(workItemExecution)).ReturnsAsync(workItemExecution); _mockExecutionMessageService.Setup(x => x.SaveExecutionMessages(workItemExecution.WorkItemExecutionId, request.ExecutionMessages)).Returns(Task.CompletedTask); await _jobFailureService.HandleJobFailureRequest(request); _mockQueueSendErroredJobAlertService.Verify(x => x.QueueSendErroredJobAlert( It.Is(queuedJob => queuedJob.JobId == 1085 && queuedJob.JobStatus == JobStatus.Failed && queuedJob.JobErrorRecipients.Count == 1 && queuedJob.JobErrorRecipients.First().Recipient == "JoshuaAnnear@landmarkcu.com"), workItem), Times.Once); _mockQueueDetermineOperationService.Verify(x => x.QueueDetermineOperation(It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } }