using Moq; using NUnit.Framework; using System; using System.Collections.Generic; using System.Threading.Tasks; using LCU.API.Internal.MemberPreferencesApi.Services; using LCU.Library.Internal.MemberPreferencesApiModels.Entities; using LCU.Library.Internal.MemberPreferencesApiModels.Enums; using LCU.Library.Internal.CoreApiWrapperModel.CoreModels.Agreements; using LCU.API.Internal.MemberPreferencesApi.Services.DnaAuditServices; using LCU.API.Internal.MemberPreferencesApi.MicroApiServices; using LCU.API.Internal.MemberPreferencesApi.Models.Requests; namespace LCU.API.Internal.MemberPreferencesApi.UnitTests.Services { public class DNADataAuditServiceTest { private Mock _coreApiWrapperServiceMock; private Mock _optinServiceMock; private DNADataAuditService _service; [SetUp] public void Setup() { _coreApiWrapperServiceMock = new Mock(); _optinServiceMock = new Mock(); _service = new DNADataAuditService(_coreApiWrapperServiceMock.Object, _optinServiceMock.Object); } [Test] public async Task HandleChangedFields_AccountChange_OK_UPDATE() { var account = new AgreementAccount { AccountNumber = 123456, OvrDeliveryMethCD = "PRNT", AccountOwner = new AgreementAccountOwner { AccountNumber = 123456, AgreementNumber = 222, PersonNumber = 123, UserId = "1234" } }; var memberOptinSettings = new MemberOptInSettings { EStatements = null, UniversalOptIn = "Electronic" }; //setup _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountByAccountId(123456)).ReturnsAsync(account).Verifiable(); _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); var request = new DnaFieldChangeRequest() { ConsecutiveFailures = 0, DnaFieldIdInformation = 123456L, DnaProcessType = DnaAuditProcessType.DNAAgreement, LastUpdated = DateTime.Now, ProcessId = 1 }; await _service.HandleAccountAuditCheck(request); //assert _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); _coreApiWrapperServiceMock.Verify(); _optinServiceMock.Verify(); } [Test] public async Task HandleChangedFields_AccountChange_OK_DONTUPDATE() { var account = new AgreementAccount { AccountNumber = 123456, OvrDeliveryMethCD = "PRNT", AccountOwner = new AgreementAccountOwner { AccountNumber = 123456, AgreementNumber = 222, PersonNumber = 123, UserId = "1234" } }; var memberOptinSettings = new MemberOptInSettings { EStatements = null, UniversalOptIn = "Paper" }; //setup _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountByAccountId(123456)).ReturnsAsync(account).Verifiable(); _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")) .ReturnsAsync(memberOptinSettings).Verifiable(); var request = new DnaFieldChangeRequest() { ConsecutiveFailures = 0, DnaFieldIdInformation = 123456L, DnaProcessType = DnaAuditProcessType.DNAAccounts, LastUpdated = DateTime.Now, ProcessId = 1 }; await _service.HandleAccountAuditCheck(request); //assert _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.IsAny>(), It.IsAny(), It.IsAny()), Times.Never); _coreApiWrapperServiceMock.Verify(); _optinServiceMock.Verify(); } [Test] public async Task HandleChangedFields_AgreementChange_OK_UPDATE() { var agreement = new Agreement { AgreementNumber = 1127, PersonNumber = 123, UserId = "1234" }; var accounts = new List { new AgreementAccount{ AccountNumber = 123456, OvrDeliveryMethCD = "PRNT", TaxReportForPersonNumber = 123, AccountOwner = new AgreementAccountOwner{ AccountNumber = 123456, AgreementNumber = 1127, PersonNumber = 123, UserId = "1234" } } }; var memberOptinSettings = new MemberOptInSettings { EStatements = null, UniversalOptIn = "Electronic" }; //setup _coreApiWrapperServiceMock.Setup(x => x.GetAgreementByAgreementId(1127)).ReturnsAsync(agreement).Verifiable(); _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountsByUserId("1234")).ReturnsAsync(accounts).Verifiable(); _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); var request = new DnaFieldChangeRequest() { ConsecutiveFailures = 0, DnaFieldIdInformation = 1127L, DnaProcessType = DnaAuditProcessType.DNAAgreement, LastUpdated = DateTime.Now, ProcessId = 1 }; await _service.HandleAgreementAuditCheck(request); //assert _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); _coreApiWrapperServiceMock.Verify(); _optinServiceMock.Verify(); } [Test] public async Task HandleChangedFields_OrganizationChange_OK_UPDATE() { var accounts = new List { new AgreementAccount{ AccountNumber = 123456, TaxReportForOrgNumber = 11267, OvrDeliveryMethCD = "PRNT", AccountOwner = new AgreementAccountOwner { AccountNumber = 123456, AgreementNumber = 222, PersonNumber = 123, UserId = "1234" } } }; var memberOptinSettings = new MemberOptInSettings { EStatements = null, UniversalOptIn = "Electronic" }; //setup _coreApiWrapperServiceMock.Setup(x => x.GetAgreementAccountsByOrganizationId(1126)).ReturnsAsync(accounts).Verifiable(); _optinServiceMock.Setup(x => x.GetMemberOptInSettings("1234")).ReturnsAsync(memberOptinSettings).Verifiable(); var request = new DnaFieldChangeRequest() { ConsecutiveFailures = 0, DnaFieldIdInformation = 1126L, DnaProcessType = DnaAuditProcessType.DNAAgreement, LastUpdated = DateTime.Now, ProcessId = 1 }; //act await _service.HandleOrganizationAuditCheck(request); //assert _coreApiWrapperServiceMock.Verify(x => x.UpdateAgreementAccountsDeliveryMethod(It.Is>(list => list.Contains(123456)), It.Is(x => x.Equals("WWW")), It.Is(x => x.Equals("1234"))), Times.Once); _coreApiWrapperServiceMock.Verify(); _optinServiceMock.Verify(); } } }