using LCU.API.Internal.LoanRate.Services; using LCU.API.Internal.LoanRate.Services.LoadTestingServices; using LCU.Library.Internal.Exceptions; using LCU.Library.Internal.LoanRateModels.Entities.LoadTestingEntities; using LCU.Library.Internal.LoanRateModels.Requests.LoadTestRequest; namespace LCU.API.Internal.LoanRateTests.ServiceTests.LoadTestingServices; public class LoadTestRateCompletionServiceTest { private readonly Mock _mockRateProcessingInfoService; private readonly Mock _mockLoadTestRunInfoService; private readonly ILoadTestRateCompletionService _loadTestRateCompletionService; public LoadTestRateCompletionServiceTest() { _mockRateProcessingInfoService = new Mock(); _mockLoadTestRunInfoService = new Mock(); _loadTestRateCompletionService = new LoadTestRateCompletionService(_mockRateProcessingInfoService.Object, _mockLoadTestRunInfoService.Object); } [Fact] public async void HandleLoadTestRateCompletion_Success() { var random = new Random(); var requestCount = random.Next(1, 100); var requests = GenerateLoadTestRateCompletionRequests(random.Next(1, requestCount), requestCount); var rateProcessingInfos = requests.Select(x => x.RateProcessingInfo).ToList(); var loadTestRunInfoGroups = rateProcessingInfos.GroupBy( p => p.LoadTestRunInfoId, p => p.RateProcessingInfoId); await _loadTestRateCompletionService.HandleLoadTestRateCompletion(requests); _mockRateProcessingInfoService.Verify(x => x.UpdateRangeAsync(It.IsAny>()), Times.Once); _mockLoadTestRunInfoService.Verify(x => x.IncreaseRateProcessingInfosCompleteCountAsync(It.IsAny(), It.IsAny()), Times.Exactly(loadTestRunInfoGroups.Count())); } [Fact] public void HandleLoadTestRateCompletion_Failure_ThrowsException() { var requests = GenerateLoadTestRateCompletionRequests(1, 2); _mockRateProcessingInfoService.Setup(x => x.UpdateRangeAsync(It.IsAny>())).ThrowsAsync(new Exception("Test")).Verifiable(); Assert.ThrowsAsync( async () => await _loadTestRateCompletionService.HandleLoadTestRateCompletion(requests)); _mockRateProcessingInfoService.Verify(x => x.UpdateRangeAsync(It.IsAny>()), Times.Once); _mockLoadTestRunInfoService.Verify(x => x.IncreaseRateProcessingInfosCompleteCountAsync(It.IsAny(), It.IsAny()), Times.Never); } private List GenerateLoadTestRateCompletionRequests(int loadTestCount, int rateProcessingInfoCount) { var random = new Random(); var loadTestIds = new List(); for (var i = 0; i < loadTestCount; i++) { loadTestIds.Add(random.Next(1, int.MaxValue)); } var requests = new List(); for (var i = 0; i < rateProcessingInfoCount; i++) { requests.Add(new LoadTestRateCompletionRequest { RateProcessingInfo = new RateProcessingInfo { LoadTestRunInfoId = loadTestIds[random.Next(0, loadTestCount - 1)], RateProcessingInfoId = random.Next(1, int.MaxValue) } }); } return requests; } }