internal async Task <MyAccountsResultDto> GetMyAccountsSummary(string accountId, DateTime currentDateTime) { CaseFlowMyAccountsDto caseFlowDto = await _getProcess.GetMyAccountsSummary(accountId); MyAccountsResultDto resultDto = new MyAccountsResultDto(); resultDto.Accounts = new List <MyAccountsSummaryResultDto>(); foreach (ICaseFlowAccountCommon caseFlowSummaryDto in caseFlowDto.Summaries) { MyAccountsSummaryResultDto accountDto = new MyAccountsSummaryResultDto(); PopulateCommonFields(caseFlowSummaryDto, accountDto, currentDateTime); resultDto.Accounts.Add(accountDto); } resultDto.Accounts.Sort(new AccountComparer()); return(resultDto); }
public void GetMyAccounts_WhenProvidedUserId_RetrievesAccounts_And_OutputsTransformedModels() { // Arrange const string userId = "Anything456"; CaseFlowMyAccountsDto caseFlowDto = new CaseFlowMyAccountsDto() { Summaries = new List <CaseFlowMyAccountsDto.AccountSummaryDto>() { new CaseFlowMyAccountsDto.AccountSummaryDto() { LowellReference = "1234", ClientName = "BarclayBob", OutstandingBalance = 1234.56M, CanMakePayment = false, HasArrangement = true, PlanType = "Direct Debit", PlanFrequency = "Monthly", RegularAccountPaymentAmount = 123.45M }, new CaseFlowMyAccountsDto.AccountSummaryDto() { LowellReference = "abc345", ClientName = "Wah", OutstandingBalance = 101.22M, CanMakePayment = true, // Ensure works with nulls HasArrangement = false, PlanType = null, PlanFrequency = null, RegularAccountPaymentAmount = null }, } }; _mockGetProcess.Setup(x => x.GetMyAccounts(userId)).Returns(Task.FromResult(caseFlowDto)); // Act MyAccountsResultDto resultDto = _service.GetMyAccounts(userId).Result; // Assert Assert.AreEqual(2, resultDto.Accounts.Count); { MyAccountsSummaryResultDto account = resultDto.Accounts[0]; Assert.AreEqual("1234", account.AccountReference); Assert.AreEqual("BarclayBob", account.OriginalCompany); Assert.AreEqual(1234.56M, account.OutstandingBalance); Assert.AreEqual(false, account.CanMakePayment); Assert.AreEqual("Direct Debit", account.PaymentPlanMethod); Assert.AreEqual("Monthly", account.PaymentPlanFrequency); Assert.AreEqual(123.45M, account.PaymentPlanAmount); } { MyAccountsSummaryResultDto account = resultDto.Accounts[1]; Assert.AreEqual("abc345", account.AccountReference); Assert.AreEqual("Wah", account.OriginalCompany); Assert.AreEqual(101.22M, account.OutstandingBalance); Assert.AreEqual(true, account.CanMakePayment); Assert.AreEqual(null, account.PaymentPlanMethod); Assert.AreEqual(null, account.PaymentPlanFrequency); Assert.AreEqual(null, account.PaymentPlanAmount); } }
public void GetMyAccountsSummary_WhenProvidedAccountId_RetrievesAccounts_CallsStatusDeriver_And_OrdersCorrectlyByStatusSortThenAccountName() { // Note: using mock Status Deriver, so as to avoid exhaustively testing statuses here, as responsibility // for deriving statuses is with concrete Status Deriver class // Mock will apply some status sort (and status) values, allowing testing of sort / sub-sort behaviour // in service class under test _mockStatusDeriverProcess.Setup(x => x.DeriveStatusAndStatusSort( It.IsAny <ICaseFlowAccountCommon>(), It.IsAny <MyAccountsSummaryResultDto>())) .Callback <ICaseFlowAccountCommon, MyAccountsSummaryResultDto>( (caseFlowAccountDto, resultDto) => { // Status deriver places 'Company' (long integer) field into sort field to facilitate testing Debug.Assert(caseFlowAccountDto.Company != null); resultDto.AccountStatusSort = (int)caseFlowAccountDto.Company.Value; }); // Get returns some CaseFlow dto's with mixed up sort ordering // Ordering is by AccountStatusSort then ClientName CaseFlowMyAccountsDto caseFlowDto = new CaseFlowMyAccountsDto() { Summaries = new List <CaseFlowMyAccountsDto.AccountSummaryDto>() { new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 4, ClientName = "Def" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 100, ClientName = "jjj" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 3, ClientName = "1a" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 1, ClientName = "zzz" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 4, ClientName = "Ghi" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 3, ClientName = "1b" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 4, ClientName = "Abc" }, new CaseFlowMyAccountsDto.AccountSummaryDto() { Company = 2, ClientName = "wibble" }, } }; _mockGetProcess.Setup(x => x.GetMyAccountsSummary("anything")).Returns(Task.FromResult(caseFlowDto)); // // Check output is correctly ordered // MyAccountsResultDto outputDto = _service.GetMyAccountsSummary("anything").Result; Assert.AreEqual(8, outputDto.Accounts.Count); // Sort Value 1 { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[0]; Assert.AreEqual("zzz", accountDto.OriginalCompany); Assert.AreEqual(1, accountDto.AccountStatusSort); } // Sort Value 2 { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[1]; Assert.AreEqual("wibble", accountDto.OriginalCompany); Assert.AreEqual(2, accountDto.AccountStatusSort); } // Sort Value 3 { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[2]; Assert.AreEqual("1a", accountDto.OriginalCompany); Assert.AreEqual(3, accountDto.AccountStatusSort); } { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[3]; Assert.AreEqual("1b", accountDto.OriginalCompany); Assert.AreEqual(3, accountDto.AccountStatusSort); } // Sort Value 4 { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[4]; Assert.AreEqual("Abc", accountDto.OriginalCompany); Assert.AreEqual(4, accountDto.AccountStatusSort); } { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[5]; Assert.AreEqual("Def", accountDto.OriginalCompany); Assert.AreEqual(4, accountDto.AccountStatusSort); } { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[6]; Assert.AreEqual("Ghi", accountDto.OriginalCompany); Assert.AreEqual(4, accountDto.AccountStatusSort); } // Sort Value 100 { MyAccountsSummaryResultDto accountDto = outputDto.Accounts[7]; Assert.AreEqual("jjj", accountDto.OriginalCompany); Assert.AreEqual(100, accountDto.AccountStatusSort); } }