using LCU.API.Internal.LoanRate.Services.LoadTestingServices; using LCU.API.Internal.LoanRate.Services.LoanRateOperationServices; using LCU.API.Internal.LoanRate.Services.QueueServices; using LCU.Library.Internal.Exceptions; using LCU.Library.Internal.LcuEvaluationModels.Entities; using LCU.Library.Internal.LoanRateModels.Entities; using LCU.Library.Internal.LoanRateModels.Entities.LoadTestingEntities; using LCU.Library.Internal.LoanRateModels.Requests; using LCU.Library.Internal.LoanRateModels.Requests.LoadTestRequest; using Newtonsoft.Json; namespace LCU.API.Internal.LoanRateTests.ServiceTests.LoadTestingServices; public class LoadTestProcessRateServiceTest { private readonly Mock _mockRateFinderService; private readonly Mock _mockQueueLoadTestRateCompletionService; private readonly ILoadTestProcessRateService _loadTestProcessRateService; public LoadTestProcessRateServiceTest() { _mockRateFinderService = new Mock(); _mockQueueLoadTestRateCompletionService = new Mock(); _loadTestProcessRateService = new LoadTestProcessRateService(_mockRateFinderService.Object, _mockQueueLoadTestRateCompletionService.Object); } [Fact] public async void HandleLoadTestProcessRate_Success() { var random = new Random(); var request = new LoadTestProcessRateRequest { RateProcessingInfo = new RateProcessingInfo { LoadTestRunInfoId = random.Next(1, 1000), RateProcessingInfoId = random.Next(1, 1000), Payload = JsonConvert.SerializeObject(new RateRequest()) } }; _mockRateFinderService.Setup(x => x.DetermineRate(It.IsAny(), It.IsAny>())).ReturnsAsync(( new Rate(), string.Empty )); await _loadTestProcessRateService.HandleLoadTestProcessRate(request); _mockRateFinderService.Verify(x => x.DeterminePassedRules(It.IsAny()), Times.Once); _mockRateFinderService.Verify(x => x.DetermineRate(It.IsAny(), It.IsAny>()), Times.Once); _mockRateFinderService.Verify(x => x.CalculateFinalRateValue(It.IsAny(), It.IsAny()), Times.Once); _mockQueueLoadTestRateCompletionService.Verify(x => x.QueueLoadTestRateCompletionRequest(It.IsAny()), Times.Once); } [Fact] public void HandleLoadTestProcessRate_Failure_ThrowsException() { var random = new Random(); var request = new LoadTestProcessRateRequest { RateProcessingInfo = new RateProcessingInfo { LoadTestRunInfoId = random.Next(1, 1000), RateProcessingInfoId = random.Next(1, 1000), Payload = JsonConvert.SerializeObject(new RateRequest()) } }; _mockRateFinderService.Setup(x => x.DeterminePassedRules(It.IsAny())).ThrowsAsync(new Exception("Test")).Verifiable(); Assert.ThrowsAsync( async () => await _loadTestProcessRateService.HandleLoadTestProcessRate(request)); _mockRateFinderService.Verify(x => x.DeterminePassedRules(It.IsAny()), Times.Once); _mockRateFinderService.Verify(x => x.DetermineRate(It.IsAny(), It.IsAny>()), Times.Never); _mockRateFinderService.Verify(x => x.CalculateFinalRateValue(It.IsAny(), It.IsAny()), Times.Never); _mockQueueLoadTestRateCompletionService.Verify(x => x.QueueLoadTestRateCompletionRequest(It.IsAny()), Times.Once); } }