public async Task ExecuteCampaignActionAsync(string campaignId, CampaignAction campaignAction) { var member = typeof(CampaignAction).GetRuntimeProperties().FirstOrDefault(x => x.Name == (campaignAction.ToString())); var action = member.GetCustomAttributes(typeof(DescriptionAttribute), false) .OfType <DescriptionAttribute>() .FirstOrDefault()?.Description ?? campaignAction.ToString().ToLower(); using (var client = CreateMailClient("campaigns/")) { var response = await client.PostAsync($"{campaignId}/actions/${action}", null).ConfigureAwait(false); await response.EnsureSuccessMailChimpAsync().ConfigureAwait(false); } }
public void VerifyBuyXPayYActionCampaign() { // The BuyXPayYAction uses IOrderTotalCalculator.CalculateOrderRowTotal which is a bad method as it has // no access to the OrderCarrier, and therefor doesn't know which currency is being used. var order = new OrderCarrier { CurrencyID = currencySystemId, OrderRows = new List <OrderRowCarrier> { new OrderRowCarrier { Quantity = 3, TotalPrice = 5.01m, TotalVATAmount = 0.96m, UnitListPrice = 1.67226891m, VATPercentage = 0.1900m } } }; var filteredOrderRow = new FilteredOrderRow(); filteredOrderRow.SetInternalProperty(r => r.OrderRowCarrier, order.OrderRows.First()); var args = new ActionArgs(); args.SetInternalProperty(r => r.OrderCarrier, order); args.SetInternalProperty(r => r.FilteredOrderRows, new List <FilteredOrderRow> { filteredOrderRow }); var campaignData = new BuyXPayYAction.Data { BuyQuantity = 3, PayQuantity = 2 }; var sut = new CampaignAction(campaignData); sut.PublicProcess(args); CalculateOrder(order); Assert.Equal(1.67m, order.TotalDiscount); Assert.Equal(1.99m, order.TotalDiscountWithVAT); }
public async Task ExecuteCampaignActionAsync(string campaignId, CampaignAction campaignAction) { var member = typeof(CampaignAction).GetMember(campaignAction.ToString()); var action = member.FirstOrDefault()? .GetCustomAttributes(typeof(DescriptionAttribute), false) .OfType<DescriptionAttribute>() .FirstOrDefault()?.Description ?? campaignAction.ToString().ToLower(); using (var client = this.CreateMailClient("campaigns/")) { var response = await client.PostAsync($"{campaignId}/actions/${action}", null).ConfigureAwait(false); await response.EnsureSuccessMailChimpAsync().ConfigureAwait(false); } }