using System; using System.Threading.Tasks; using System.Collections.Generic; using NUnit.Framework; using Moq; using LCU.Library.Internal.CoreApiWrapperLib.DataAccess; using LCU.Library.Internal.CoreApiWrapperLib.CoreApiUtilities; using LCU.Library.Internal.CoreApiWrapperLib.CoreDbUtilities; using LCU.Library.Internal.CoreApiWrapperLib.Configuration; using LCU.Library.Internal.CoreApiWrapperLib.Utilities; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Persons; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.CoreRequests; namespace LCU.Api.Internal.CoreApiWrapperTest.DataAccess { public class PersonDaoTest { private readonly PersonDao _personDao; private readonly Mock _mockCoreRequest; private readonly Mock _mockCoreDbExecution; public PersonDaoTest() { _mockCoreDbExecution = new Mock(); _mockCoreRequest = new Mock(); var coreConfiguration = new CoreConfiguration { CoreApiConfiguration = new CoreApiConfiguration { CoreEndPointConfiguration = new CoreEndPointConfiguration { PersonsQueryName = "Test" } } }; _personDao = new PersonDao(_mockCoreRequest.Object, _mockCoreDbExecution.Object, coreConfiguration); } [Test] public async Task FindPersons_Returns_Null() { var coreRequestParameters = new CoreRequestParameters(); var personRequest = new PersonNameRequest(); CoreApiMessage> personsJsonResponse = null; _mockCoreRequest.Setup(x => x.PostRequestObject>>(It.IsAny(), It.IsAny>(), It.IsAny())).ReturnsAsync(personsJsonResponse); var result = await _personDao.FindByPersonsName(coreRequestParameters, personRequest); Assert.IsNull(result); } [Test] public async Task GetPersonNumbersByNameLike_AllCases_ExecutesPersonNumberByNameLikeQueryWithNameAndLimitParameters() { var query = QueryUtilities.GetQuery("Person/PersonNumberByNameLikeQuery"); var firstName = Guid.NewGuid().ToString().ToUpperInvariant(); var middleName = Guid.NewGuid().ToString().ToUpperInvariant(); var lastName = Guid.NewGuid().ToString().ToUpperInvariant(); var limit = DateTime.Now.Millisecond; var resultSeries = new Random(DateTime.Now.Millisecond); var results = new long[]{ resultSeries.Next(), resultSeries.Next(), resultSeries.Next() }; _mockCoreDbExecution .Setup(c => c.ExecuteQuery(query, It.Is(q => q.GetPropertyValue("firstName") == firstName.ToLowerInvariant() && q.GetPropertyValue("middleName") == middleName.ToLowerInvariant() && q.GetPropertyValue("lastName") == lastName.ToLowerInvariant() && q.GetPropertyValue("limit") == limit))) .Returns(Task.FromResult>(results)); var organizationNumbers = await _personDao.GetPersonNumbersByNameLike(firstName, middleName, lastName, limit); Assert.AreSame(results, organizationNumbers); } [Test] public async Task CountPersonsByNameLike_AllCases_ExecutesPersonByNameLikeCountWithNameParameters() { var query = QueryUtilities.GetQuery("Person/PersonByNameLikeCount"); var firstName = Guid.NewGuid().ToString().ToUpperInvariant(); var middleName = Guid.NewGuid().ToString().ToUpperInvariant(); var lastName = Guid.NewGuid().ToString().ToUpperInvariant(); var count = DateTime.Now.Millisecond; var results = new long[]{ count }; _mockCoreDbExecution .Setup(c => c.ExecuteQuery(query, It.Is(q => q.GetPropertyValue("firstName") == firstName.ToLowerInvariant() && q.GetPropertyValue("middleName") == middleName.ToLowerInvariant() && q.GetPropertyValue("lastName") == lastName.ToLowerInvariant()))) .Returns(Task.FromResult>(results)); var organizationCount = await _personDao.CountPersonsByNameLike(firstName, middleName, lastName); Assert.AreEqual(count, organizationCount); } } }