public async Task ProductPriceHandlerTest_Check_FinalPrice(string requestFileName, string responseFileName) { var requestData = System.IO.File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData", "Request", requestFileName)); _request = JsonConvert.DeserializeObject <OrderPromotionRequest>(requestData); var responseData = System.IO.File.ReadAllText(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TestData", "Response", responseFileName)); _response = JsonConvert.DeserializeObject <List <ProductPriceResponse> >(responseData); Order order = new Order(); Promotion promotion = new Promotion(); _promotion.GetTotalPrice(order, promotion).Returns(130); var handler = Substitute.For <ProductPriceHandler>(_delegatePromotionType); var result = await handler.Handle(_request, new CancellationToken()); Assert.Equal(result[0].FinalPrice, _response[0].FinalPrice); }
public async Task <List <ProductPriceResponse> > Handle(OrderPromotionRequest request, CancellationToken cancellationToken) { await Task.Delay(0); List <ProductPriceResponse> productPriceResponses = new List <ProductPriceResponse>(); foreach (Order ord in request.Orders) { List <decimal> promoprices = request.Promotions .Select(promo => _promotion.GetTotalPrice(ord, promo)) .ToList(); decimal origprice = ord.Products.Sum(x => x.Price); decimal promoprice = promoprices.Sum(); productPriceResponses.Add(new ProductPriceResponse { OrderID = ord.OrderID, OriginalPrice = origprice, Discount = promoprice, FinalPrice = origprice - promoprice }); } return(productPriceResponses); }