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);
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
     });
 }