using System; using System.Collections.Generic; using System.Threading.Tasks; using LCU.API.Internal.Operations.IncentiveApi.Services; using LCU.Library.Internal.IncentiveApiModels.Entities; using LCU.API.Internal.Operations.IncentiveApi.Models.ExternalActivities; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Accounts; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Activity; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Transaction; using Moq; using NUnit.Framework; using LCU.API.Internal.Operations.IncentiveApi.Services.MicroApiServices; namespace Application.UnitTests.Services { public class DnaServiceTests { private IDnaService _dnaService; private Mock _mockCoreApiWrapperService; [SetUp] public void SetUp() { _mockCoreApiWrapperService = new Mock(); _dnaService = new DnaService(_mockCoreApiWrapperService.Object); } [Test] public async Task GetNewAccountDetailsForActivities_OK() { _mockCoreApiWrapperService.Setup(x => x.GetUpdatedAccountInformation(It.IsAny>())).ReturnsAsync( new List() { new ActivityAccountDetails() { AccountNumber = 1 }, new ActivityAccountDetails() { AccountNumber = 2 }, new ActivityAccountDetails() { AccountNumber = 3 } }); var results = await _dnaService.GetNewAccountDetailsForActivities(new List() { new Activity() { Id = 1, Detail = new ActivityDetail() { AccountNumber = "1" } }, new Activity() { Id = 2, Detail = new ActivityDetail() { AccountNumber = "2" } }, new Activity() { Id = 3, Detail = new ActivityDetail() { AccountNumber = "3" } } }); Assert.NotNull(results); Assert.AreEqual(3, results.Count); _mockCoreApiWrapperService.Verify(x => x.GetUpdatedAccountInformation(It.Is>(x => x.Contains(1) && x.Contains(2) && x.Contains(3)))); } [Test] public async Task GetNewAccountDetailsForActivities_OnlyKnown_OK() { _mockCoreApiWrapperService.Setup(x => x.GetUpdatedAccountInformation(It.IsAny>())).ReturnsAsync( new List() { new ActivityAccountDetails() { AccountNumber = 1 }, new ActivityAccountDetails() { AccountNumber = 3 } }); var results = await _dnaService.GetNewAccountDetailsForActivities(new List() { new Activity() { Id = 1, Detail = new ActivityDetail() { AccountNumber = "1" } }, //Null Account Number new Activity() { Id = 2, Detail = new ActivityDetail() { } }, new Activity() { Id = 3, Detail = new ActivityDetail() { AccountNumber = "3" } } }); Assert.NotNull(results); Assert.AreEqual(2, results.Count); _mockCoreApiWrapperService.Verify(x => x.GetUpdatedAccountInformation(It.Is>(x => x.Contains(1) && x.Contains(3)))); } [Test] public async Task GetNewAccountDetailsForActivities_BadAccountNumber_OK() { _mockCoreApiWrapperService.Setup(x => x.GetUpdatedAccountInformation(It.IsAny>())).ReturnsAsync( new List() { new ActivityAccountDetails() { AccountNumber = 1 }, new ActivityAccountDetails() { AccountNumber = 3 } }); var results = await _dnaService.GetNewAccountDetailsForActivities(new List() { new Activity() { Id = 1, Detail = new ActivityDetail() { AccountNumber = "ADJFALKDSFJA" } }, //Null Account Number new Activity() { Id = 2, Detail = new ActivityDetail() { AccountNumber = "1" } }, new Activity() { Id = 3, Detail = new ActivityDetail() { AccountNumber = "12aDFKADFSF" } } }); Assert.NotNull(results); Assert.AreEqual(2, results.Count); _mockCoreApiWrapperService.Verify(x => x.GetUpdatedAccountInformation(It.Is>(x => x.Contains(1)))); } [Test] public async Task QueryActivityManagerForActivities_OK() { _mockCoreApiWrapperService.Setup(x => x.GetActivityManagerActivities(It.IsAny())).ReturnsAsync( new List() { new NewActivityManagerReferral() { ActivityId = 1 }, new NewActivityManagerReferral() { ActivityId = 2 }, new NewActivityManagerReferral() { ActivityId = 3 } }); var results = await _dnaService.QueryActivityManagerForActivities(new List() { "1","2","3" }); Assert.NotNull(results); Assert.AreEqual(3, results.Count); _mockCoreApiWrapperService.Verify(x => x.GetActivityManagerActivities(It.Is(x => x.ActivityIds.Contains(1) && x.ActivityIds.Contains(2) && x.ActivityIds.Contains(3)))); } [Test] public async Task QueryActivityManagerForActivities_Null_OK() { _mockCoreApiWrapperService.Setup(x => x.GetActivityManagerActivities(It.IsAny())).ReturnsAsync( new List() { new NewActivityManagerReferral() { ActivityId = 1 }, new NewActivityManagerReferral() { ActivityId = 3 } }); var results = await _dnaService.QueryActivityManagerForActivities(new List() { "1",null,"3" }); Assert.NotNull(results); Assert.AreEqual(2, results.Count); _mockCoreApiWrapperService.Verify(x => x.GetActivityManagerActivities(It.Is(x => x.ActivityIds.Contains(1) && x.ActivityIds.Contains(3)))); } [Test] public async Task GetTransactionHistory_OK() { var accountNumber = "123456"; var startDate = DateTime.Now.AddDays(-1); var endDate = DateTime.Now; var transactionCodes = new List { "XDEP" }; _mockCoreApiWrapperService.Setup(x => x.GetTransactionHistory(accountNumber, startDate, endDate, transactionCodes)).ReturnsAsync( new List() { new TransactionHistory() { Id = "1" }, new TransactionHistory() { Id = "2" } }.AsReadOnly).Verifiable(); var results = await _dnaService.GetTransactionHistory(accountNumber, startDate, endDate, transactionCodes); _mockCoreApiWrapperService.Verify(); Assert.NotNull(results); Assert.AreEqual(2, results.Count); } [Test] public async Task GetTransactionHistory_Null() { var accountNumber = "123456"; var startDate = DateTime.Now.AddDays(-1); var endDate = DateTime.Now; var transactionCodes = new List { "XDEP" }; _mockCoreApiWrapperService.Setup(x => x.GetTransactionHistory(accountNumber, startDate, endDate, transactionCodes)).ReturnsAsync((IReadOnlyCollection)null).Verifiable(); var results = await _dnaService.GetTransactionHistory(accountNumber, startDate, endDate, transactionCodes); _mockCoreApiWrapperService.Verify(); Assert.Null(results); } } }