using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using LCU.Api.Internal.CoreApiWrapper.Controllers; using LCU.Api.Internal.CoreApiWrapper.Services; using System.Threading.Tasks; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Tax; namespace LCU.Api.Internal.CoreApiWrapperTest.Controllers { public class TaxControllerTest { private TaxController _taxController; private Mock _mockTaxService; [SetUp] public void SetUp() { _mockTaxService = new Mock(); _taxController = new TaxController(_mockTaxService.Object); } [Test] public async Task GetPersonsTaxIdData_OK() { var personTaxIdDataResponse = new List { new() { FirstName = "Greg", MiddleInitial = "H", LastName = "Stevens", Suffix = "Jr.", NameFull = "Greg H. Stevens Jr.", PersonNumber = 123 } }; _mockTaxService.Setup(service => service.GetPersonsTaxIdData("123")).ReturnsAsync(personTaxIdDataResponse).Verifiable(); var results = await _taxController.GetPersonsTaxIdData("123"); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); var dataResponse = okResult.Value as IEnumerable; Assert.NotNull(dataResponse); Assert.AreEqual(1, dataResponse.Count()); var firstResponse = dataResponse.First(); Assert.AreEqual("Greg",firstResponse.FirstName); Assert.AreEqual("H", firstResponse.MiddleInitial); Assert.AreEqual("Stevens", firstResponse.LastName); Assert.AreEqual("Jr.", firstResponse.Suffix); Assert.AreEqual("Greg H. Stevens Jr.", firstResponse.NameFull); Assert.AreEqual(123, firstResponse.PersonNumber); _mockTaxService.Verify(); } [Test] public async Task GetPersonsTaxIdData_EmptyString_BadRequest() { var results = await _taxController.GetPersonsTaxIdData(""); Assert.NotNull(results); var okResult = results as BadRequestObjectResult; Assert.NotNull(okResult); Assert.AreEqual(400, okResult.StatusCode); _mockTaxService.Verify(service => service.GetPersonsTaxIdData(It.IsAny()), Times.Never); } [Test] public async Task GetPersonsTaxIdData_ErrorThrown_ServerError() { _mockTaxService.Setup(service => service.GetPersonsTaxIdData("123")).ThrowsAsync(new Exception("Thrown from unit test.")); var results = await _taxController.GetPersonsTaxIdData("123"); Assert.NotNull(results); var okResult = results as StatusCodeResult; Assert.NotNull(okResult); Assert.AreEqual(500, okResult.StatusCode); _mockTaxService.Verify(); } [Test] public async Task GetOrganizationsTaxIdData_OK() { var organizationsTaxIdDataResponse = new List { new() { Name = "Electric Company", OrganizationNumber = 123 } }; _mockTaxService.Setup(service => service.GetOrganizationsTaxIdData("123")).ReturnsAsync(organizationsTaxIdDataResponse).Verifiable(); var results = await _taxController.GetOrganizationsTaxIdData("123"); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); var dataResponse = okResult.Value as IEnumerable; Assert.NotNull(dataResponse); Assert.AreEqual(1, dataResponse.Count()); var firstResponse = dataResponse.First(); Assert.AreEqual("Electric Company",firstResponse.Name); Assert.AreEqual(123, firstResponse.OrganizationNumber); _mockTaxService.Verify(); } [Test] public async Task GetOrganizationsTaxIdData_EmptyString_BadRequest() { var results = await _taxController.GetOrganizationsTaxIdData(""); Assert.NotNull(results); var okResult = results as BadRequestObjectResult; Assert.NotNull(okResult); Assert.AreEqual(400, okResult.StatusCode); _mockTaxService.Verify(service => service.GetOrganizationsTaxIdData(It.IsAny()), Times.Never); } [Test] public async Task GetOrganizationsTaxIdData_ErrorThrown_ServerError() { _mockTaxService.Setup(service => service.GetOrganizationsTaxIdData("123")).ThrowsAsync(new Exception("Thrown from unit test.")); var results = await _taxController.GetOrganizationsTaxIdData("123"); Assert.NotNull(results); var okResult = results as StatusCodeResult; Assert.NotNull(okResult); Assert.AreEqual(500, okResult.StatusCode); _mockTaxService.Verify(); } } }