using Microsoft.AspNetCore.Mvc; using LCU.Library.Internal.LoanRateModels.Entities; using LCU.API.Internal.LoanRate.Services; using LCU.API.Internal.LoanRate.Controllers; namespace LCU.API.Internal.LoanRateTests.ControllerTests; public class RateEvaluationControllerTest { private readonly Mock _mockRateEvaluationService; private readonly RateEvaluationController _controller; public RateEvaluationControllerTest() { _mockRateEvaluationService = new Mock(); _controller = new RateEvaluationController(_mockRateEvaluationService.Object); } [Fact] public async void RateEvaluation_Get_OK() { var rateEvaluationId = 1; var rateEvaluations = new List { new() { RateEvaluationId = rateEvaluationId } }; _mockRateEvaluationService.Setup(x => x.GetAsync()).ReturnsAsync(rateEvaluations).Verifiable(); var result = await _controller.Get(); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); var RateEvaluationResult = status.Value as List; Assert.NotNull(RateEvaluationResult); Assert.Single(RateEvaluationResult); Assert.Equal(rateEvaluationId, RateEvaluationResult.First().RateEvaluationId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Get_NoContent() { var rateEvaluations = new List(); _mockRateEvaluationService.Setup(x => x.GetAsync()).ReturnsAsync(rateEvaluations).Verifiable(); var result = await _controller.Get(); Assert.NotNull(result); Assert.IsType(result); var status = result as NoContentResult; Assert.NotNull(status); Assert.Equal(204, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Get_InternalServerError() { _mockRateEvaluationService.Setup(x => x.GetAsync()) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.Get(); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetById_OK() { var rateEvaluationId = 1; var rateEvaluation = new RateEvaluation { RateEvaluationId = rateEvaluationId }; _mockRateEvaluationService.Setup(x => x.GetByIdAsync(rateEvaluationId)) .ReturnsAsync(rateEvaluation).Verifiable(); var result = await _controller.GetById(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); var rateEvaluationResult = status.Value as RateEvaluation; Assert.NotNull(rateEvaluationResult); Assert.Equal(rateEvaluationId, rateEvaluationResult.RateEvaluationId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetById_NoContent() { var rateEvaluationId = 1; RateEvaluation? rateEvaluation = null; _mockRateEvaluationService.Setup(x => x.GetByIdAsync(rateEvaluationId)) .ReturnsAsync(rateEvaluation).Verifiable(); var result = await _controller.GetById(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as NoContentResult; Assert.NotNull(status); Assert.Equal(204, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetById_BadRequest() { var rateEvaluationId = 0; var result = await _controller.GetById(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_GetById_InternalServerError() { var rateEvaluationId = 1; _mockRateEvaluationService.Setup(x => x.GetByIdAsync(rateEvaluationId)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.GetById(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetListById_OK() { var rateEvaluationIds = new List { 1, 2, 3 }; var rateEvaluations = new List { new() { RateEvaluationId = rateEvaluationIds[0] }, new() { RateEvaluationId = rateEvaluationIds[1] }, new() { RateEvaluationId = rateEvaluationIds[2] } }; _mockRateEvaluationService.Setup(x => x.GetRangeByIdAsync(rateEvaluationIds)) .ReturnsAsync(rateEvaluations).Verifiable(); var result = await _controller.GetListById(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); var rateEvaluationResult = status.Value as List; Assert.NotNull(rateEvaluationResult); Assert.Equal(rateEvaluationIds[0], rateEvaluationResult[0].RateEvaluationId); Assert.Equal(rateEvaluationIds[1], rateEvaluationResult[1].RateEvaluationId); Assert.Equal(rateEvaluationIds[2], rateEvaluationResult[2].RateEvaluationId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetListById_NoContent() { var rateEvaluationIds = new List { 1, 2, 3 }; List? rateEvaluations = null; _mockRateEvaluationService.Setup(x => x.GetRangeByIdAsync(rateEvaluationIds)) .ReturnsAsync(rateEvaluations).Verifiable(); var result = await _controller.GetListById(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as NoContentResult; Assert.NotNull(status); Assert.Equal(204, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_GetListById_BadRequest() { List? rateEvaluationIds = null; var result = await _controller.GetListById(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_GetListById_InternalServerError() { var rateEvaluationIds = new List { 1, 2, 3 }; _mockRateEvaluationService.Setup(x => x.GetRangeByIdAsync(rateEvaluationIds)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.GetListById(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Post_CreatedAtAction() { var rateEvaluationId = 1; var Value = Guid.NewGuid().ToString(); var rateEvaluation = new RateEvaluation { EvaluationDetailId = 1 }; var rateEvaluationReturned = new RateEvaluation { RateEvaluationId = rateEvaluationId, EvaluationDetailId = 1 }; _mockRateEvaluationService.Setup(x => x.SaveAsync(rateEvaluation)) .ReturnsAsync(rateEvaluationReturned).Verifiable(); var result = await _controller.Post(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as CreatedAtActionResult; Assert.NotNull(status); Assert.Equal(201, status.StatusCode); var resultValue = status.Value as RateEvaluation; Assert.NotNull(result); Assert.NotNull(resultValue); Assert.Equal(rateEvaluationReturned.RateEvaluationId, resultValue.RateEvaluationId); Assert.Equal(rateEvaluationReturned.EvaluationDetailId, resultValue.EvaluationDetailId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Post_BadRequest() { RateEvaluation? rateEvaluation = null; var result = await _controller.Post(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_Post_InternalServerError() { var rateEvaluation = new RateEvaluation { EvaluationDetailId = 1 }; _mockRateEvaluationService.Setup(x => x.SaveAsync(rateEvaluation)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.Post(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_SaveRange_Ok() { var rateEvaluations = new List { new() { EvaluationDetailId = 1 }, new() { EvaluationDetailId = 2 }, new() { EvaluationDetailId = 3 } }; _mockRateEvaluationService.Setup(x => x.SaveRangeAsync(rateEvaluations)); var result = await _controller.SaveRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as OkResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_SaveRange_BadRequest() { List? rateEvaluations = null; var result = await _controller.SaveRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_SaveRange_InternalServerError() { var rateEvaluations = new List { new() { EvaluationDetailId = 1 }, new() { EvaluationDetailId = 2 }, new() { EvaluationDetailId = 3 } }; _mockRateEvaluationService.Setup(x => x.SaveRangeAsync(rateEvaluations)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.SaveRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Put_OK() { var rateEvaluationId = 1; var rateEvaluation = new RateEvaluation { RateEvaluationId = rateEvaluationId, EvaluationDetailId = 1 }; var RateEvaluationReturned = new RateEvaluation { RateEvaluationId = rateEvaluationId, EvaluationDetailId = 1 }; _mockRateEvaluationService.Setup(x => x.UpdateAsync(rateEvaluation)) .ReturnsAsync(RateEvaluationReturned).Verifiable(); var result = await _controller.Put(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); var rateEvaluationResult = status.Value as RateEvaluation; Assert.NotNull(rateEvaluationResult); Assert.Equal(rateEvaluation.EvaluationDetailId, rateEvaluationResult.EvaluationDetailId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Put_Status406NotAcceptable() { var rateEvaluation = new RateEvaluation { RateEvaluationId = 1 }; var result = await _controller.Put(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(406, status.StatusCode); } [Fact] public async void RateEvaluation_Put_BadRequest_NoIds() { var rateEvaluation = new RateEvaluation { EvaluationDetailId = 1 }; var result = await _controller.Put(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); _mockRateEvaluationService.Verify(x => x.GetAsync(), Times.Never); } [Fact] public async void RateEvaluation_Put_BadRequest() { RateEvaluation? rateEvaluation = null; var result = await _controller.Put(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_Put_InternalServerError() { var rateEvaluation = new RateEvaluation { RateEvaluationId = 1 }; _mockRateEvaluationService.Setup(x => x.UpdateAsync(rateEvaluation)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.Put(rateEvaluation); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_UpdateRange_OK() { var evaluationDetailIds = new List { 1, 2, 3 }; var rateEvaluations = new List { new() { RateEvaluationId = 1, EvaluationDetailId = evaluationDetailIds[0] }, new() { RateEvaluationId = 2, EvaluationDetailId = evaluationDetailIds[1] }, new() { RateEvaluationId = 3, EvaluationDetailId = evaluationDetailIds[2] } }; var rateEvaluationsReturned = new List { new() { RateEvaluationId = 1, EvaluationDetailId = evaluationDetailIds[0] }, new() { RateEvaluationId = 2, EvaluationDetailId = evaluationDetailIds[1] }, new() { RateEvaluationId = 3, EvaluationDetailId = evaluationDetailIds[2] } }; _mockRateEvaluationService.Setup(x => x.UpdateRangeAsync(rateEvaluations)) .ReturnsAsync(rateEvaluationsReturned).Verifiable(); var result = await _controller.UpdateRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); var rateEvaluationResult = status.Value as List; Assert.NotNull(rateEvaluationResult); Assert.Equal(rateEvaluations[0].EvaluationDetailId, rateEvaluationResult[0].EvaluationDetailId); Assert.Equal(rateEvaluations[1].EvaluationDetailId, rateEvaluationResult[1].EvaluationDetailId); Assert.Equal(rateEvaluations[2].EvaluationDetailId, rateEvaluationResult[2].EvaluationDetailId); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_UpdateRange_BadRequest_NoIds() { var rateEvaluations = new List { new () { EvaluationDetailId = 1 }, new () { EvaluationDetailId = 2 } }; var result = await _controller.UpdateRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); _mockRateEvaluationService.Verify(x => x.GetAsync(), Times.Never); } [Fact] public async void RateEvaluation_UpdateRange_BadRequest() { List? rateEvaluations = null; var result = await _controller.UpdateRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_UpdateRange_InternalServcerError() { var rateEvaluations = new List { new () { RateEvaluationId = 1, EvaluationDetailId = 1 }, new () { RateEvaluationId = 2, EvaluationDetailId = 2 } }; _mockRateEvaluationService.Setup(x => x.UpdateRangeAsync(rateEvaluations)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.UpdateRange(rateEvaluations); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Delete_OK() { var rateEvaluationId = 1; _mockRateEvaluationService.Setup(x => x.DeleteAsync(rateEvaluationId)).Verifiable(); var result = await _controller.Delete(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as OkResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_Delete_BadRequest() { var rateEvaluationId = 0; var result = await _controller.Delete(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_Delete_InternalServerError() { var rateEvaluationId = 1; _mockRateEvaluationService.Setup(x => x.DeleteAsync(rateEvaluationId)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.Delete(rateEvaluationId); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_DeleteRange_OK() { var rateEvaluationIds = new List { 1, 1, 1 }; _mockRateEvaluationService.Setup(x => x.DeleteRangeAsync(rateEvaluationIds)).Verifiable(); var result = await _controller.DeleteRange(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as OkResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_DeleteRange_BadRequest() { var rateEvaluationIds = new List(); var result = await _controller.DeleteRange(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_DeleteRange_InternalServerError() { var rateEvaluationIds = new List { 1 }; _mockRateEvaluationService.Setup(x => x.DeleteRangeAsync(rateEvaluationIds)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.DeleteRange(rateEvaluationIds); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_CountByEvaluationDetailId_OK() { var evaluationDetailId = DateTime.Now.Millisecond; var count = DateTime.Now.Minute; _mockRateEvaluationService.Setup(x => x.CountByEvaluationDetailIdAsync(evaluationDetailId)).ReturnsAsync(count).Verifiable(); var result = await _controller.CountByEvaluationDetailId(evaluationDetailId); Assert.NotNull(result); Assert.IsType(result); var status = result as OkObjectResult; Assert.NotNull(status); Assert.Equal(200, status.StatusCode); Assert.Equal(count, status.Value); _mockRateEvaluationService.Verify(); } [Fact] public async void RateEvaluation_CountByEvaluationDetailId_BadRequest() { var evaluationDetailId = 0; var result = await _controller.CountByEvaluationDetailId(evaluationDetailId); Assert.NotNull(result); Assert.IsType(result); var status = result as BadRequestObjectResult; Assert.NotNull(status); Assert.Equal(400, status.StatusCode); } [Fact] public async void RateEvaluation_CountByEvaluationDetailId_InternalServerError() { var evaluationDetailId = DateTime.Now.Millisecond; _mockRateEvaluationService.Setup(x => x.CountByEvaluationDetailIdAsync(evaluationDetailId)) .Throws(new Exception("Test")).Verifiable(); var result = await _controller.CountByEvaluationDetailId(evaluationDetailId); Assert.NotNull(result); Assert.IsType(result); var status = result as StatusCodeResult; Assert.NotNull(status); Assert.Equal(500, status.StatusCode); _mockRateEvaluationService.Verify(); } }