using System; using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Moq; using NUnit.Framework; using LCU.Api.Internal.CoreApiWrapper.Controllers; using LCU.Api.Internal.CoreApiWrapper.Services; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Persons; namespace LCU.Api.Internal.CoreApiWrapperTest.Controllers { public class PersonUserFieldControllerTest { private PersonUserFieldController _personUserFieldController; private Mock _mockPersonUserFieldService; [SetUp] public void SetUp() { _mockPersonUserFieldService = new Mock(); _personUserFieldController = new PersonUserFieldController(_mockPersonUserFieldService.Object); } [Test] public async Task PutPersonUserFieldsAtmCheckHolds_OK() { var personUserField1 = new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }; _mockPersonUserFieldService.Setup(x => x.UpdatePersonUserFieldAsync(It.IsAny())).ReturnsAsync(personUserField1); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PutPersonUserFieldForAtmCheckHolds(personUserFieldUpdateRequest); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task PutPersonUserFieldsAtmCheckholds_Exception() { _mockPersonUserFieldService.Setup(x => x.UpdatePersonUserFieldAsync(It.IsAny())).Throws(new NullReferenceException("Oops")); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PutPersonUserFieldForAtmCheckHolds(personUserFieldUpdateRequest); _mockPersonUserFieldService.Verify(); var badRes = results as ObjectResult; Assert.NotNull(badRes); Assert.AreEqual(500, badRes.StatusCode); } [Test] public async Task PostPersonUserFieldsAtmCheckhold_OK() { var personUserField1 = new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }; _mockPersonUserFieldService.Setup(x => x.InsertPersonUserFieldAsync(It.IsAny())).ReturnsAsync(personUserField1); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PostPersonUserFieldForAtmCheckHolds(personUserFieldUpdateRequest); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task PostPersonUserFieldsAtmCHeckhold_Exception() { _mockPersonUserFieldService.Setup(x => x.InsertPersonUserFieldAsync(It.IsAny())).Throws(new NullReferenceException("Nope!")); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PostPersonUserFieldForAtmCheckHolds(personUserFieldUpdateRequest); _mockPersonUserFieldService.Verify(); var badRes = results as ObjectResult; Assert.NotNull(badRes); Assert.AreEqual(500, badRes.StatusCode); } [Test] public async Task GetPersonUserFieldsForAtmCheckHolds_OK() { var personUserField1 = new PersonCheckHoldsUserField() { PersonNumber = 100001, OldestActiveEffectiveDate = DateTime.UtcNow, RecentClosedEffectiveDate = DateTime.UtcNow, UserFieldExists = true, }; var personUserField2 = new PersonCheckHoldsUserField() { PersonNumber = 200001, OldestActiveEffectiveDate = DateTime.UtcNow, RecentClosedEffectiveDate = DateTime.UtcNow, UserFieldExists = false, }; _mockPersonUserFieldService.Setup(x => x.GetPersonsForAtmCheckHolds(It.IsAny(), It.IsAny())).ReturnsAsync( new List() { personUserField1, personUserField2 }); var results = await _personUserFieldController.GetPersonsForAtmCheckHolds(DateTime.Now, DateTime.Now, 0); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task GetPersonUserFieldsForAtmCheckHoldsLimit_OK() { var personUserField1 = new PersonCheckHoldsUserField() { PersonNumber = 100001, OldestActiveEffectiveDate = DateTime.UtcNow, RecentClosedEffectiveDate = DateTime.UtcNow, UserFieldExists = true, }; var personUserField2 = new PersonCheckHoldsUserField() { PersonNumber = 200001, OldestActiveEffectiveDate = DateTime.UtcNow, RecentClosedEffectiveDate = DateTime.UtcNow, UserFieldExists = false, }; _mockPersonUserFieldService.Setup(x => x.GetPersonsForAtmCheckHolds(It.IsAny(), It.IsAny())).ReturnsAsync( new List() { personUserField1 }); var results = await _personUserFieldController.GetPersonsForAtmCheckHolds(DateTime.Now, DateTime.Now, 1); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task PutPersonUserFieldsGeneric_OK() { var personUserField1 = new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }; _mockPersonUserFieldService.Setup(x => x.UpdatePersonUserFieldAsync(It.IsAny())).ReturnsAsync(personUserField1); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PutPersonUserField(personUserFieldUpdateRequest); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task PutPersonUserFieldsGeneric_Exception() { _mockPersonUserFieldService.Setup(x => x.UpdatePersonUserFieldAsync(It.IsAny())).Throws(new NullReferenceException("Oops")); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PutPersonUserField(personUserFieldUpdateRequest); _mockPersonUserFieldService.Verify(); var badRes = results as ObjectResult; Assert.NotNull(badRes); Assert.AreEqual(500, badRes.StatusCode); } [Test] public async Task PostPersonUserFieldsGeneric_OK() { var personUserField1 = new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }; _mockPersonUserFieldService.Setup(x => x.InsertPersonUserFieldAsync(It.IsAny())).ReturnsAsync(personUserField1); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PostPersonUserField(personUserFieldUpdateRequest); Assert.NotNull(results); var okResult = results as OkObjectResult; Assert.NotNull(okResult); Assert.AreEqual(200, okResult.StatusCode); } [Test] public async Task PostPersonUserFieldsGeneric_Exception() { _mockPersonUserFieldService.Setup(x => x.InsertPersonUserFieldAsync(It.IsAny())).Throws(new NullReferenceException("Nope!")); var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var results = await _personUserFieldController.PostPersonUserField(personUserFieldUpdateRequest); _mockPersonUserFieldService.Verify(); var badRes = results as ObjectResult; Assert.NotNull(badRes); Assert.AreEqual(500, badRes.StatusCode); } } }