using System; using System.Collections.Generic; using System.Text; using Xunit; using Moq; using LCU.Shared.Collections.RepoApiLib.Repositories; using RabbitMQ.Client; using LCU.API.Collections.RepoApi.Services; using LCU.API.Collections.RepoApi.Exceptions; using LCU.Shared.Collections.RepoApiLib.Models; using System.Threading.Tasks; using System.Data.SqlClient; namespace LCU.API.Collections.RepoApiTests.Services { public class VehicleFloorPricingParameterServiceTest { [Fact] public async void ListAll_Exception() { var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.ListAllAsync()).ThrowsAsync(new Exception("oops")); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.ListAll()); } [Fact] public async void ListAll_OK() { var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.ListAllAsync()).ReturnsAsync(new List() { new VehicleFloorPricingParameters() { } }); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); var res = await vehicleFloorPricingService.ListAll(); Assert.Single(res); } [Fact] public async void Get_Exception() { var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).ThrowsAsync(new Exception("oops")); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.Get(5)); } [Fact] public async void Get_Ok() { var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).ReturnsAsync(new VehicleFloorPricingParameters() { Id = 5 }) ; VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); var res = await vehicleFloorPricingService.Get(5); Assert.NotNull(res); Assert.Equal(5, res.Id); } [Fact] public async void Get_Null_Exception() { var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).Returns(Task.FromResult(null)); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.Get(5)); } [Fact] public async void UpdateAsync_Existing_Null() { VehicleFloorPricingParameters parameters = new VehicleFloorPricingParameters { Id = 5, LowCondition = 1, HighCondition = 5, NADAFirstValue = "101.1", NADASecondValue = "202.2", MMRAdjustedValue = "303.3", PercentageOf = 10, ValuationServiceType = 5 }; var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).Returns(Task.FromResult(null)); _mockFloorPricingParamRepo.Setup(repo => repo.Update(It.Is(param => param.Id == 5))); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.UpdateAsync(parameters)); } [Fact] public async void UpdateAsync_Ok() { VehicleFloorPricingParameters parameters = new VehicleFloorPricingParameters { Id = 5, LowCondition = 1, HighCondition = 3, NADAFirstValue = "101.1", NADASecondValue = "202.2", MMRAdjustedValue = "303.3", PercentageOf = 10, ValuationServiceType = 4 }; var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).ReturnsAsync(parameters); _mockFloorPricingParamRepo.Setup(repo => repo.Update(It.Is(param => param.Id == 5 && param.NADAFirstValue == "101.1"))); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); var res = await vehicleFloorPricingService.UpdateAsync(parameters); Assert.NotNull(res); Assert.Equal(1, res.LowCondition); Assert.Equal(3, res.HighCondition); Assert.Equal("101.1", res.NADAFirstValue); Assert.Equal("202.2", res.NADASecondValue); Assert.Equal("303.3", res.MMRAdjustedValue); Assert.Equal(10, res.PercentageOf); Assert.Equal(4, res.ValuationServiceType); } [Fact] public async void UpdateAsync_Existing_Exception() { VehicleFloorPricingParameters parameters = new VehicleFloorPricingParameters { Id = 5, LowCondition = 1, HighCondition = 5, NADAFirstValue = "101.1", NADASecondValue = "202.2", MMRAdjustedValue = "303.3", PercentageOf = 10, ValuationServiceType = 5 }; var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).ThrowsAsync(new Exception("oops")); _mockFloorPricingParamRepo.Setup(repo => repo.Update(It.Is(param => param.Id == 5))); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.UpdateAsync(parameters)); } [Fact] public async void UpdateAsync_Update_Exception() { VehicleFloorPricingParameters parameters = new VehicleFloorPricingParameters { Id = 5, LowCondition = 1, HighCondition = 5, NADAFirstValue = "101.1", NADASecondValue = "202.2", MMRAdjustedValue = "303.3", PercentageOf = 10, ValuationServiceType = 5 }; var _mockFloorPricingParamRepo = new Mock(); var _mockUnitOfWork = new Mock(); _mockFloorPricingParamRepo.Setup(repo => repo.FindByIdAsync(It.IsAny())).Returns(Task.FromResult(parameters)); _mockFloorPricingParamRepo.Setup(repo => repo.Update(It.Is(param => param.Id == 5))).Throws(new Exception("oops")); VehicleFloorPricingParametersService vehicleFloorPricingService = new VehicleFloorPricingParametersService(_mockFloorPricingParamRepo.Object, _mockUnitOfWork.Object); await Assert.ThrowsAsync(async () => await vehicleFloorPricingService.UpdateAsync(parameters)); } } }