using System.Linq.Dynamic.Core; using LCU.API.Internal.LoanRate.Controllers; using LCU.API.Internal.LoanRate.Services; using LCU.Library.Internal.LcuClassPatterns.CrudTests.Tests; using LCU.Library.Internal.LcuClassPatterns.CrudTests.Utilities; using LCU.Library.Internal.LoanRateModels.Entities; using LCU.Library.Internal.LoanRateModels.Requests; using LCU.Library.Internal.LoanRateModels.Responses; using Microsoft.AspNetCore.Mvc; namespace LCU.API.Internal.LoanRateTests.ControllerTests; public class RateUploadInfoControllerTest : CrudControllerTest { private readonly Mock _mockRateUploadInfoService = new(); private readonly RateUploadInfoController _controller; public RateUploadInfoControllerTest() { _controller = new RateUploadInfoController(_mockRateUploadInfoService.Object); } [Fact] public async void RateUploadInfo_GetLatest_OK() { var rateUploadInfo = new RateUploadInfo { RateUploadInfoId = (int)typeof(int).GetRandomValue() }; _mockRateUploadInfoService.Setup(x => x.GetLatestAsync()).ReturnsAsync(rateUploadInfo).Verifiable(); var result = await _controller.GetLatest(); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_GetLatest_NoContent() { RateUploadInfo? rateUploadInfo = null; _mockRateUploadInfoService.Setup(x => x.GetLatestAsync()).ReturnsAsync(rateUploadInfo).Verifiable(); var result = await _controller.GetLatest(); Assert.NotNull(result); Assert.IsType(result); var status = result as NoContentResult; Assert.NotNull(status); Assert.Equal(204, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_GetLatest_InternalServerError() { _mockRateUploadInfoService.Setup(x => x.GetLatestAsync()) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.GetLatest(); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_GetFilteredRateUploadInfo_OK() { var request = new RateUploadInfoFilter { EffectiveDate = (DateTime)typeof(DateTime).GetRandomValue() }; var response = new RateUploadInfoFilterResult { Items = new List { new() { RateUploadInfoId = (int)typeof(int).GetRandomValue() }, new() { RateUploadInfoId = (int)typeof(int).GetRandomValue() }, new() { RateUploadInfoId = (int)typeof(int).GetRandomValue() } } }; _mockRateUploadInfoService.Setup(x => x.GetFilteredRateUploadInfo(request)).ReturnsAsync(response).Verifiable(); var result = await _controller.GetFilteredRateUploadInfo(request); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_GetFilteredRateUploadInfo_InternalServerError() { var request = new RateUploadInfoFilter { EffectiveDate = (DateTime)typeof(DateTime).GetRandomValue() }; _mockRateUploadInfoService.Setup(x => x.GetFilteredRateUploadInfo(request)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.GetFilteredRateUploadInfo(request); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_ComplexDelete_OK() { var rateUploadInfoId = (int)typeof(int).GetRandomValue(); _mockRateUploadInfoService.Setup(x => x.ComplexDelete(rateUploadInfoId)).Verifiable(); var result = await _controller.ComplexDelete(rateUploadInfoId); Assert.NotNull(result); Assert.IsType(result); var status = result as OkResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_ComplexDelete_BadRequest() { var rateUploadInfoId = 0; var result = await _controller.ComplexDelete(rateUploadInfoId); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateUploadInfo_ComplexDelete_InternalServerError() { var rateUploadInfoId = (int)typeof(int).GetRandomValue(); _mockRateUploadInfoService.Setup(x => x.ComplexDelete(rateUploadInfoId)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.ComplexDelete(rateUploadInfoId); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_ComplexSave_OK() { var rateUploadInfoRequest = new RateUploadInfoRequest { EffectiveDate = (DateTime)typeof(DateTime).GetRandomValue(), FileName = (string)typeof(string).GetRandomValue() }; _mockRateUploadInfoService.Setup(x => x.ComplexSave(rateUploadInfoRequest)).Verifiable(); var result = await _controller.ComplexSave(rateUploadInfoRequest); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateUploadInfoService.Verify(); } [Fact] public async void RateUploadInfo_ComplexSave_BadRequest() { RateUploadInfoRequest? rateUploadInfoRequest = null; var result = await _controller.ComplexSave(rateUploadInfoRequest); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateUploadInfo_ComplexSave_InternalServerError() { var rateUploadInfoRequest = new RateUploadInfoRequest { EffectiveDate = (DateTime)typeof(DateTime).GetRandomValue(), FileName = (string)typeof(string).GetRandomValue() }; _mockRateUploadInfoService.Setup(x => x.ComplexSave(rateUploadInfoRequest)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.ComplexSave(rateUploadInfoRequest); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateUploadInfoService.Verify(); } }