public OrderEntity Create(ProductEntity product, int quantity, CampaignEntity campaign, int currentTime) { if (product.Stock < quantity) { throw new InsufficientStockException(); } OrderEntity order; if (campaign != null) { var sellingPrice = _productPriceService.CalculateDiscountedPrice(campaign, product.Price, currentTime); order = new OrderEntity(product.ProductCode, quantity, sellingPrice, campaign.Id); campaign.NotifyOrderCreation(quantity, order.Price); } else { order = new OrderEntity(product.ProductCode, quantity, product.Price); } product.DecreaseStock(quantity); return(order); }
public void Product_When_Quantity_Is_Equal_Or_LessThan_Stock_Calculate_Correctly(string productCode, decimal price, int stock, int quantity) { var product = new ProductEntity(productCode, price, stock); product.DecreaseStock(quantity); Assert.Equal(stock - quantity, product.Stock); }
public void Product_Should_Throw_Exception_When_Quantity_LessThan_Stock(string productCode, decimal price, int stock, int quantity) { Assert.Throws <InsufficientStockException>(() => { var product = new ProductEntity(productCode, price, stock); product.DecreaseStock(quantity); }); }