using LCU.API.Collections.RepoApi.Controllers; using LCU.API.Collections.RepoApi.Exceptions; using LCU.API.Collections.RepoApi.Services; using LCU.Shared.Collections.RepoApiLib.Models; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Moq; using Xunit; namespace LCU.API.Collections.RepoApiTests.Controllers { public class RefundStatusControllerTest { private RefundStatusController _refundStatusController; private Mock _refundStatusService; private Mock _httpAccessor; public RefundStatusControllerTest() { _refundStatusService = new Mock(); _httpAccessor = new Mock(); _refundStatusController = new RefundStatusController( _refundStatusService.Object, _httpAccessor.Object); } [Fact] public async void GetById_Ok() { // Arrange _refundStatusService.Setup(service => service.GetAsync(It.IsAny())).ReturnsAsync( new RefundStatus()); // Act var result = await _refundStatusController.GetById(123); // Assert Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); var okValue = okResult.Value; Assert.NotNull(okValue); var refundStatus = okValue as RefundStatus; Assert.NotNull(refundStatus); } [Fact] public async void GetById_Returns_Bad_Request_Invalid_ID_Equal_to_Zero() { // Act var result = await _refundStatusController.GetById(0); // Assert Assert.NotNull(result); var badResult = result as BadRequestObjectResult; Assert.NotNull(badResult); } [Fact] public async void GetById_Returns_NotFound_On_NFE() { // Arrange _refundStatusService.Setup(service => service.GetAsync(It.IsAny())).ThrowsAsync( new NotFoundException("Refund Status Not Found Test")); // Act var result = await _refundStatusController.GetById(123); // Assert Assert.NotNull(result); var badResult = result as NotFoundObjectResult; Assert.NotNull(badResult); var badResultValue = badResult.Value; Assert.NotNull(badResultValue); var badResultMessage = badResultValue as string; Assert.NotNull(badResultMessage); Assert.Equal("Refund Status Not Found Test", badResultMessage); } [Fact] public async void Post_Ok() { // Arrange _refundStatusService.Setup(service => service.SaveAsync(It.IsAny())).ReturnsAsync( new RefundStatus()); // Act var result = await _refundStatusController.Post(new RefundStatus() {RepoId = 123}); // Assert Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); var okValue = okResult.Value; Assert.NotNull(okValue); var refundStatus = okValue as RefundStatus; Assert.NotNull(refundStatus); } [Fact] public async void Post_Returns_Bad_Request_Invalid_ID_Equal_to_Zero() { // Act var result = await _refundStatusController.Post(new RefundStatus() {RepoId = 0}); // Assert Assert.NotNull(result); var badResult = result as BadRequestObjectResult; Assert.NotNull(badResult); } [Fact] public async void Put_Ok() { // Arrange _refundStatusService.Setup(service => service.UpdateAsync(It.IsAny())).ReturnsAsync( new RefundStatus()); // Act var result = await _refundStatusController.Put(123, new RefundStatus() {RepoId = 123}); // Assert Assert.NotNull(result); var okResult = result as OkObjectResult; Assert.NotNull(okResult); var okValue = okResult.Value; Assert.NotNull(okValue); var refundStatus = okValue as RefundStatus; Assert.NotNull(refundStatus); } [Fact] public async void Put_Returns_Bad_Request_Invalid_ID_Equal_to_Zero() { // Act var result = await _refundStatusController.Put(0, new RefundStatus() {RepoId = 0}); // Assert Assert.NotNull(result); var badResult = result as BadRequestObjectResult; Assert.NotNull(badResult); } [Fact] public async void Put_Returns_Bad_Request_Invalid_ID_Mismatch() { // Act var result = await _refundStatusController.Put(123, new RefundStatus() {RepoId = 1234}); // Assert Assert.NotNull(result); var badResult = result as BadRequestObjectResult; Assert.NotNull(badResult); } } }