public void GetMyAccountsDetail_WhenProvideLowellReference_With_FiveTransactions_Then_OutputsFiveTransactions() { // NOTE: Not testing 5 transactions (or more) because the number of transactions is controlled // by the proxy call (to CaseFlow) // Arrange const string userId = "anyuser123"; const string lowellReference = "wibble"; CaseFlowMyAccountsDetailDto caseFlowAccountDto = new CaseFlowMyAccountsDetailDto(); RecievedTransactionsDto caseFlowReceivedTransactionsDto = new RecievedTransactionsDto() { Payments = new List <PaymentDetails>() { new PaymentDetails() { Date = new DateTime(2018, 11, 25), Amount = 123.45M, Type = "Type", RollingBalance = 678.91M }, new PaymentDetails() { Date = new DateTime(2017, 10, 13), Amount = 9999.99M, Type = "Type II", RollingBalance = 1000000.01M } } }; _mockGetDetailsProcess.Setup(x => x.GetMyAccountsDetail(lowellReference)).Returns(Task.FromResult(caseFlowAccountDto)); _mockMyAccountDetailGetTransactionsRecentProcess.Setup(x => x.GetTransactionsRecent(lowellReference, 5)).Returns(Task.FromResult(caseFlowReceivedTransactionsDto)); // Act MyAccountsDetailResultDto resultDto = _service.GetMyAccountsDetail(userId, lowellReference).Result; // Assert Assert.AreEqual(2, resultDto.RecentTransactions.Count); { MyAccountsDetailResultDto.RecentTransaction transaction = resultDto.RecentTransactions[0]; Assert.AreEqual(new DateTime(2018, 11, 25), transaction.Date); Assert.AreEqual(123.45M, transaction.Amount); Assert.AreEqual("Type", transaction.Type); Assert.AreEqual(678.91M, transaction.RollingBalance); } { MyAccountsDetailResultDto.RecentTransaction transaction = resultDto.RecentTransactions[1]; Assert.AreEqual(new DateTime(2017, 10, 13), transaction.Date); Assert.AreEqual(9999.99M, transaction.Amount); Assert.AreEqual("Type II", transaction.Type); Assert.AreEqual(1000000.01M, transaction.RollingBalance); } _mockMyAccountDetailGetTransactionsRecentProcess.Verify(x => x.GetTransactionsRecent(lowellReference, 5), Times.Once); }
public void GetMyAccountsDetail_WhenProvideLowellReference_With_NoTransactions_Then_OutputsEmptyTransactionsList() { // Arrange const string userId = "anyuser123"; const string lowellReference = "wibble"; CaseFlowMyAccountsDetailDto caseFlowAccountDto = new CaseFlowMyAccountsDetailDto(); RecievedTransactionsDto caseFlowReceivedTransactionsDto = new RecievedTransactionsDto(); _mockGetDetailsProcess.Setup(x => x.GetMyAccountsDetail(lowellReference)).Returns(Task.FromResult(caseFlowAccountDto)); _mockMyAccountDetailGetTransactionsRecentProcess.Setup(x => x.GetTransactionsRecent(lowellReference, 5)).Returns(Task.FromResult(caseFlowReceivedTransactionsDto)); // Act MyAccountsDetailResultDto resultDto = _service.GetMyAccountsDetail(userId, lowellReference).Result; // Assert Assert.AreEqual(0, resultDto.RecentTransactions.Count); }
public void GetTransactionsRecent_ShouldCallProxy_Once() { const string testLowellReference = "anything123"; // Arrange // Content does not matter, as straight pass through of objects var caseFlowDto = new RecievedTransactionsDto(); _mockProxy.Setup(x => x.GetTransactionsAsync(testLowellReference, 5)) .Returns(Task.FromResult(caseFlowDto)); //Act var result = _process.GetTransactionsRecent(testLowellReference, 5).Result; //Assert Assert.AreEqual(caseFlowDto, result); _mockProxy.Verify(x => x.GetTransactionsAsync(testLowellReference, 5), Times.Once); }
// Provides interface to allow unit testing without being tied to 'now' internal async Task <MyAccountsDetailResultDto> GetMyAccountsDetail(string userId, string lowellReference, DateTime currentDateTime) { CaseFlowMyAccountsDetailDto caseFlowAccount = await _getDetailProcess.GetMyAccountsDetail(lowellReference); RecievedTransactionsDto caseFlowTransactions = await _getTransactionProcess.GetTransactionsRecent(lowellReference, 5); MyAccountsDetailResultDto resultDto = new MyAccountsDetailResultDto(); PopulateCommonFields(caseFlowAccount, resultDto, currentDateTime); // Fields included in Detail only (not on My Accounts summary) resultDto.AccountMessage = caseFlowAccount.ExcludedMessage; resultDto.PlanMessages = caseFlowAccount.PlanMessages; resultDto.RecentTransactions = new List <MyAccountsDetailResultDto.RecentTransaction>(); // CaseFlow returns empty content (and 204) if there are no transactions, rather than empty list if (caseFlowTransactions != null) { foreach (PaymentDetails payment in caseFlowTransactions.Payments) { MyAccountsDetailResultDto.RecentTransaction transaction = new MyAccountsDetailResultDto.RecentTransaction() { Date = payment.Date, Amount = payment.Amount, Description = payment.Description, Type = payment.Type, RollingBalance = payment.RollingBalance }; resultDto.RecentTransactions.Add(transaction); } } return(resultDto); }