using System; using System.Linq; using System.Collections.Generic; using System.Threading.Tasks; using NUnit.Framework; using Moq; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels; using LCU.Api.Internal.CoreApiWrapper.Services; using LCU.Library.Internal.CoreApiWrapperLib.DataAccess; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Persons; using LCU.Library.Internal.Exceptions; namespace LCU.Api.Internal.CoreApiWrapperTest.Service { public class PersonUserFieldServiceTest { private readonly PersonUserFieldService _personUserFieldService; private readonly Mock _mockPersonService; private readonly Mock _mockPersonUserFieldDao; public PersonUserFieldServiceTest() { _mockPersonService = new Mock(); _mockPersonUserFieldDao = new Mock(); _personUserFieldService = new PersonUserFieldService(_mockPersonService.Object, _mockPersonUserFieldDao.Object); } [Test] public void GetPersonUserFieldCoreApiResponseAsync_ExceptionThrown() { _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(), It.IsAny())).Throws(new ServiceException("Nope")); Assert.ThrowsAsync(async () => await _personUserFieldService.GetPersonUserFieldCoreApiResponseAsync(00000000)); } [Test] public async Task GetPersonUserFieldCoreApiResponseAsync_UserFieldsReturned() { var personUserFields = new List() { new PersonUserField() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }, new PersonUserField() { PersonNumber = 200001, UserFieldCode = "TEST2", Value = "N" } }; var coreMessageheader = new CoreMessageHeader(); var personUserFieldCoreApiResponse = new CoreApiMessage>(coreMessageheader, personUserFields); _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(), It.IsAny())).ReturnsAsync(personUserFieldCoreApiResponse); var result = await _personUserFieldService.GetPersonUserFieldCoreApiResponseAsync(100001); Assert.NotNull(result); Assert.AreEqual(2, result.MessageBody.Count()); } [Test] public void UpdatePersonUserFieldAsync_ExceptionThrown() { _mockPersonUserFieldDao.Setup(x => x.UpdatePersonUserField(It.IsAny>(), It.IsAny(), It.IsAny())).Throws(new ServiceException("Nope")); var personUserUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; Assert.ThrowsAsync(async () => await _personUserFieldService.UpdatePersonUserFieldAsync(personUserUpdateRequest)); } [Test] public async Task UpdatePersonUserFieldAsync_UpdatedUserFieldsReturned() { var testPerson = new Person() { PersonNumber = 100001 }; var updatedPersonUserField = new PersonUserField() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y", LastMaintained = Convert.ToDateTime("9/1/2001") }; var listexistingPersonUserField = new List() { new PersonUserField() { PersonNumber = 100001, Id = updatedPersonUserField.Id, UserFieldCode = "TEST1", Value = "N", LastMaintained = Convert.ToDateTime("8/1/2001") } }; var coreMessageheader = new CoreMessageHeader(); var coreApiResponse = new CoreApiMessage>(coreMessageheader, listexistingPersonUserField); _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(),It.IsAny())).ReturnsAsync(coreApiResponse); _mockPersonUserFieldDao.Setup(x => x.UpdatePersonUserField(It.IsAny>(), It.IsAny(), It.IsAny())).ReturnsAsync(updatedPersonUserField); _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(new List() { testPerson }); var personUserUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var result = await _personUserFieldService.UpdatePersonUserFieldAsync(personUserUpdateRequest); Assert.NotNull(result); Assert.AreEqual(updatedPersonUserField, result); } [Test] public void InsertPersonUserFieldAsync_ExceptionThrown() { _mockPersonUserFieldDao.Setup(x => x.InsertPersonUserField(It.IsAny>(), It.IsAny())).Throws(new ServiceException("Oops")); var personUserUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; Assert.ThrowsAsync(async () => await _personUserFieldService.InsertPersonUserFieldAsync(personUserUpdateRequest)); } [Test] public async Task InsertPersonUserFieldAsync_InsertUserFieldsReturned() { var person = new Person() { Id = "TEST-adsfasdfas[]djfas" }; var personList = new List { person }; _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); var createdPersonUserField = new PersonUserField() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y", LastMaintained = Convert.ToDateTime("9/1/2001") }; _mockPersonUserFieldDao.Setup(x => x.InsertPersonUserField(It.IsAny>(), It.IsAny())).ReturnsAsync(createdPersonUserField); var personUserUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var result = await _personUserFieldService.InsertPersonUserFieldAsync(personUserUpdateRequest); Assert.NotNull(result); Assert.AreEqual(createdPersonUserField, result); } [Test] public void UpdatePersonUserFieldsAsync_NullPerson_ExceptionThrown() { var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var personList = new List(); _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); Assert.ThrowsAsync(async () => await _personUserFieldService.UpdatePersonUserFieldAsync(personUserFieldUpdateRequest)); } [Test] public void UpdatePersonUserFieldsAsync_ExistingUserFieldNull_NullExceptionThrown() { var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var person = new Person() { Id = "TEST-adsfasdfas[]djfas" }; var personList = new List { person }; _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); IEnumerable PersonUserFields = new List(); CoreMessageHeader coreMessageHeader = new CoreMessageHeader(); CoreApiMessage> coreApiMessagePersonUserFields = new CoreApiMessage>(coreMessageHeader, PersonUserFields); _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(), It.IsAny())).ReturnsAsync(coreApiMessagePersonUserFields); Assert.ThrowsAsync(async () => await _personUserFieldService.UpdatePersonUserFieldAsync(personUserFieldUpdateRequest)); } [Test] public void UpdatePersonUserFieldsAsync_UpdateUserFieldNull_NullExceptionThrown() { var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var personList = new List(); _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); IEnumerable PersonUserFields = new List() { new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }, new PersonUserField() { Id = "TEST2", PersonNumber = 100002, UserFieldCode = "TEST2", Value = "Y" } }; CoreMessageHeader coreMessageHeader = new CoreMessageHeader(1122000321); CoreApiMessage> coreApiMessagePersonUserFields = new CoreApiMessage>(coreMessageHeader, PersonUserFields); _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(), It.IsAny())).ReturnsAsync(coreApiMessagePersonUserFields); PersonUserField updatedPersonUserField = null; _mockPersonUserFieldDao.Setup(x => x.UpdatePersonUserField(It.IsAny>(), It.IsAny(), It.IsAny())).ReturnsAsync(updatedPersonUserField); Assert.ThrowsAsync(async () => await _personUserFieldService.UpdatePersonUserFieldAsync(personUserFieldUpdateRequest)); } [Test] public async Task UpdatePersonUserFieldsAsync_UpdatedUserField() { var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var person = new Person() { Id = "TEST-adsfasdfas[]djfas" }; var personList = new List { person }; _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); var personUserField1 = new PersonUserField() { Id = "TEST1", PersonNumber = 100001, UserFieldCode = "TEST1", Value = "N" }; var personUserField2 = new PersonUserField() { Id = "TEST2", PersonNumber = 100002, UserFieldCode = "TEST2", Value = "Y" }; IEnumerable personUserFields = new List() { personUserField1, personUserField2 }; CoreMessageHeader coreMessageHeader = new CoreMessageHeader(1122000321); CoreApiMessage> coreApiMessagePersonUserFields = new CoreApiMessage>(coreMessageHeader, personUserFields); _mockPersonUserFieldDao.Setup(x => x.FindPersonUserFieldCoreApiResponseByPersonId(It.IsAny(), It.IsAny())).ReturnsAsync(coreApiMessagePersonUserFields); PersonUserField updatedPersonUserField1 = new PersonUserField() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; _mockPersonUserFieldDao.Setup(x => x.UpdatePersonUserField(It.IsAny>(), It.IsAny(), personUserField1.Id)).ReturnsAsync(updatedPersonUserField1); PersonUserField updatedPersonUserField2 = new PersonUserField() { PersonNumber = 100002, UserFieldCode = "TEST2", Value = "N" }; _mockPersonUserFieldDao.Setup(x => x.UpdatePersonUserField(It.IsAny>(), It.IsAny(), personUserField2.Id)).ReturnsAsync(updatedPersonUserField2); var result = await _personUserFieldService.UpdatePersonUserFieldAsync(personUserFieldUpdateRequest); Assert.NotNull(result); Assert.AreEqual("Y", result.Value); Assert.AreEqual(100001, result.PersonNumber); } [Test] public void InsertPersonUserFieldsAsync_NullPerson_ExceptionThrown() { var personUserFieldUpdateRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var personList = new List(); _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); Assert.ThrowsAsync(async () => await _personUserFieldService.InsertPersonUserFieldAsync(personUserFieldUpdateRequest)); } [Test] public async Task InsertPersonUserFieldsAsync_InsertedUserField() { var person = new Person() { Id = "TEST-adsfasdfas[]djfas" }; var personList = new List { person }; _mockPersonService.Setup(x => x.GetPersonByPersonNumber(It.IsAny())).ReturnsAsync(personList); var messageHeader = new CoreMessageHeader() { }; var personUserFieldRequest = new PersonUserFieldRequest() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; var coreApiMessage = new CoreApiMessage(messageHeader, personUserFieldRequest); var createdPersonUserField1 = new PersonUserField() { PersonNumber = 100001, UserFieldCode = "TEST1", Value = "Y" }; _mockPersonUserFieldDao.Setup(x => x.InsertPersonUserField(It.IsAny>(), personUserFieldRequest.PersonNumber)).ReturnsAsync(createdPersonUserField1); var result = await _personUserFieldService.InsertPersonUserFieldAsync(personUserFieldRequest); Assert.NotNull(result); Assert.AreEqual("Y", result.Value); Assert.AreEqual(100001, result.PersonNumber); } } }