GivenInputParameters_ThenTransactionServiceCalledWithCorrectArguments() { var expectedType = TransactionType.Expense; var start = DateTime.MinValue; var end = DateTime.MaxValue; _mockTransactionService .Setup(helperService => helperService.GetTransactionsAsync(It.IsAny <GetTransactionsQuery>())).ReturnsAsync(() => new List <Transaction> { new Transaction { Amount = 123M, Category = "category", TransactionTimestamp = DateTime.Now.ToString("O"), Subcategory = "subcategory-1", TransactionId = "transaction-id-1", TransactionType = "expense", } }); var service = new AnalyticsService(_mockTransactionService.Object, _mockTimePeriodHelper.Object); await service.GetCategoriesBreakdown(expectedType, null, start, end); _mockTransactionService.Verify(transactionService => transactionService.GetTransactionsAsync( It.Is <GetTransactionsQuery>(query => query.Start == start && query.End == end && query.Type == expectedType && !query.Subcategories.Any() && !query.Categories.Any()) )); }
GivenNullCountAndListReturnedFromTransactionService_ThenCorrectAnalyticsCategoryListReturned() { var expectedType = TransactionType.Expense; var start = DateTime.MinValue; var end = DateTime.MaxValue; var timePeriod = new TimePeriod("MONTH", 5); var dateRange = new DateRange(start, end); const string expectedCategory1 = "category1"; const int numberOfCategory1Transactions = 24; const decimal category1TransactionsAmount = (decimal)34.5; const string expectedCategory2 = "category2"; const int numberOfCategory2Transactions = 20; const decimal category2TransactionsAmount = (decimal)34.5; const string expectedCategory3 = "category3"; const int numberOfCategory3Transactions = 10; const decimal category3TransactionsAmount = (decimal)34.5; var transactionList = new TransactionListBuilder("userId123") .WithNumberOfTransactionsOfCategoryAndAmount(numberOfCategory1Transactions, expectedCategory1, category1TransactionsAmount) .WithNumberOfTransactionsOfCategoryAndAmount(numberOfCategory2Transactions, expectedCategory2, category2TransactionsAmount) .WithNumberOfTransactionsOfCategoryAndAmount(numberOfCategory3Transactions, expectedCategory3, category3TransactionsAmount) .Build(); _mockTimePeriodHelper.Setup(helper => helper.ResolveDateRange(timePeriod)).Returns(dateRange); _mockTransactionService .Setup(helperService => helperService.GetTransactionsAsync(It.IsAny <GetTransactionsQuery>())) .ReturnsAsync(() => transactionList); var service = new AnalyticsService(_mockTransactionService.Object, _mockTimePeriodHelper.Object); var analyticsCategories = await service.GetCategoriesBreakdown(expectedType, null, timePeriod); var expectedAnalyticsCategories = new List <AnalyticsCategory> { new() { CategoryName = expectedCategory1, TotalAmount = numberOfCategory1Transactions * category1TransactionsAmount }, new() { CategoryName = expectedCategory2, TotalAmount = numberOfCategory2Transactions * category2TransactionsAmount }, new() { CategoryName = expectedCategory3, TotalAmount = numberOfCategory3Transactions * category3TransactionsAmount } }; Assert.Equal(expectedAnalyticsCategories, analyticsCategories); }