public async Task ShouldReturnSpentSumOfSubscriptedProductsBetweenDates_WhenSubscrsiptionIntervalIsEveryMonthAt5And8DaysOfMonth() { var today = DateTime.Today; var sumOfProductsInSubscription = 10; var subscriptionDates = new List <SubscriptionDate> { new SubscriptionDate { Date = today.AddYears(-1), Type = SubscriptionDateType.Start }, new SubscriptionDate { Date = today, Type = SubscriptionDateType.Suspend } }; var countOfMonths = 12; var frequencyInMonth = 2; var deliveryInterval = new DeliveryInterval { CronString = "0 0 0 8,5 12/1 *" }; SetupMocks(subscriptionDates, deliveryInterval); var criterion = new CalculateSpentAmountCriterion(today, sumOfProductsInSubscription); var query = new CalculateSpentAmountQuery(_queryBuilderMock.Object); var queryResult = await query.AskAsync(criterion); Assert.AreEqual(queryResult, sumOfProductsInSubscription * countOfMonths * frequencyInMonth); }
public async Task <SubscriptionViewModel> AskAsync(SubscriptionViewModelCriterion criterion) { var allProductsCriterion = new AllProductsCriterion(); var products = await _queryBuilder.For <List <Product> >().WithAsync(allProductsCriterion); var productsSumInSubscriptionCriterion = new CalculateProductsSumInSubscriptionCriterion(); var sum = await _queryBuilder.For <double>().WithAsync(productsSumInSubscriptionCriterion); var deliveryIntervalForSubscriptionCriterion = new DeliveryIntervalWithTemplateForSubscriptionCriterion(); var deliveryInterval = await _queryBuilder.For <DeliveryInterval>().WithAsync(deliveryIntervalForSubscriptionCriterion); var subscriptionDatesCriterion = new SubscriptionDatesForSubscriptionCriterion(); var subscriptionDates = await _queryBuilder.For <List <SubscriptionDate> >().WithAsync(subscriptionDatesCriterion); var calculateSpentAmountCriterion = new CalculateSpentAmountCriterion(criterion.PointedTodayDate, sum); var spentAmount = await _queryBuilder.For <double>().WithAsync(calculateSpentAmountCriterion); var deliveryDatesCriterion = new DeliveryDatesCriterion(criterion.PointedTodayDate, criterion.PointedTodayDate.AddMonths(3)); var deliveryDates = await _queryBuilder.For <List <DateTime> >().WithAsync(deliveryDatesCriterion); var viewModel = new SubscriptionViewModel { Today = criterion.PointedTodayDate, Products = products, DeliveryInterval = deliveryInterval, SubscriptionDates = subscriptionDates, ProductsPricesSum = sum, SpentAmount = spentAmount, DeliveryDates = deliveryDates }; return(viewModel); }
public async Task ShouldReturn0_WhenSubscriptionDatesAreNotExist() { SetupMocks(new List <SubscriptionDate>()); var criterion = new CalculateSpentAmountCriterion(DateTime.Today, 0); var query = new CalculateSpentAmountQuery(_queryBuilderMock.Object); var queryResult = await query.AskAsync(criterion); Assert.AreEqual(queryResult, 0); }
public async Task ShouldReturn0_WhenFirstSubscriptionDateIsTheSameAsToday() { var today = DateTime.Today; var subscriptionDates = new List <SubscriptionDate> { new SubscriptionDate { Date = today, Type = SubscriptionDateType.Start } }; SetupMocks(subscriptionDates); var criterion = new CalculateSpentAmountCriterion(today, 0); var query = new CalculateSpentAmountQuery(_queryBuilderMock.Object); var queryResult = await query.AskAsync(criterion); Assert.AreEqual(queryResult, 0); }