public void GetEstimatedDeliveryTime(int productId, out int unitsAvailable, out int estimatedDeliveryTimeInDays)
        {
            OrderBusinessComponent    orderBC    = DependencyInjectionHelper.GetOrderBusinessComponent();
            SupplierBusinessComponent supplierBC = DependencyInjectionHelper.GetSupplierBusinessComponent();
            Product product = rep.GetById(productId);

            int unitsOrdered = orderBC.GetAllOrderDetails()
                               .Where(od => od.Product.ProductId == product.ProductId)
                               .Sum(od => od.QuantityInUnits);

            unitsAvailable = product.UnitsOnStock - unitsOrdered;
            if ((unitsAvailable) < 0)
            {
                unitsAvailable = 0;
            }

            estimatedDeliveryTimeInDays = -1;
            IQueryable <Supplier> defaultSuppliers = supplierBC.GetSuppliersByCriteria(SupplierSearchType.None, null, 0);

            foreach (Supplier supplier in defaultSuppliers)
            {
                if (supplier.ActiveFlag && supplier.PreferredSupplierFlag)
                {
                    Supplier        supplierWithCondition = supplierBC.GetSupplierById(supplier.SupplierId);
                    SupplierProduct supProd = supplierWithCondition.SupplierProduct.FirstOrDefault(c => c.Product.ProductId == productId);
                    if (supProd != null)
                    {
                        estimatedDeliveryTimeInDays = supProd.AverageLeadTimeInDays;
                        return;
                    }
                }
            }
        }
        public void TestGetOrderById()
        {
            OrderBusinessComponent service = new OrderBusinessComponent(this.context);
            Order order = new Order() {OrderId = 123};

            Expect.Once.On(context).Method("GetById").Will(Return.Value(order));
            Order resultOrder = service.GetOrderById(123);
            Assert.AreEqual<decimal>(order.OrderId, resultOrder.OrderId);
            mockBuilder.VerifyAllExpectationsHaveBeenMet();
        }
        public void TestGetOrderByCriteria()
        {
            OrderBusinessComponent service = new OrderBusinessComponent(this.context);
            Order order = new Order {OrderId = 456, Customer = new Customer {CustomerId = 1234}};
            IList<Order> orders = new List<Order> {order};

            foreach (OrderSearchType type in Enum.GetValues(typeof (OrderSearchType)))
            {
                Expect.Once.On(context).Method("GetAll").Will(Return.Value(orders.AsQueryable()));
                IQueryable<Order> resultOrders = service.GetOrdersByCriteria(type, 1234);
                Assert.AreEqual<decimal>(1, resultOrders.Count());
                Assert.AreEqual<decimal>(order.OrderId, resultOrders.First().OrderId);
            }

            mockBuilder.VerifyAllExpectationsHaveBeenMet();
        }
        public void GetEstimatedDeliveryTime(int productId, out int unitsAvailable, out int estimatedDeliveryTimeInDays)
        {
            OrderBusinessComponent orderBC = DependencyInjectionHelper.GetOrderBusinessComponent();
            Product product = this.repository.GetById(productId);

            int unitsOrdered = orderBC.GetAllOrderDetails().Where(od => od.Product.ProductId == product.ProductId).Sum(od => od.QuantityInUnits);

            unitsAvailable = product.UnitsOnStock - unitsOrdered;
            if ((unitsAvailable) < 0)
            {
                unitsAvailable = 0;
            }

            estimatedDeliveryTimeInDays = -1;
            // Todo: Implement the logic to calculate the estimatedDelivertyTimeInDays (see SupplierCondition)
        }
        public void TestStoreOrder()
        {
            int orderId = 123;
            OrderBusinessComponent service = new OrderBusinessComponent(this.context);
            Order order = new Order() {OrderId = orderId};
            List<ChangeItem> changeItems = new List<ChangeItem>
                                               {
                                                   new ChangeItem(ChangeType.ChildInsert, new OrderDetail()),
                                                   new ChangeItem(ChangeType.ChildUpate, new OrderDetail()),
                                                   new ChangeItem(ChangeType.ChildDelete, new OrderDetail())
                                               };

            Expect.Once.On(context).Method("SaveOrder").Will(Return.Value(orderId));
            Expect.Once.On(context).Method("SaveOrderDetail").Will(Return.Value(1));
            Expect.Once.On(context).Method("SaveOrderDetail").Will(Return.Value(1));
            Expect.Once.On(context).Method("DeleteOrderDetail");
            int resultOrderId = service.StoreOrder(order, changeItems);
            Assert.AreEqual<int>(orderId, resultOrderId);

            mockBuilder.VerifyAllExpectationsHaveBeenMet();
        }
        public void TestDeleteOrder()
        {
            OrderBusinessComponent service = new OrderBusinessComponent(this.context);

            Expect.Once.On(context).Method("DeleteOrder").With(1);
            service.DeleteOrder(1);
            mockBuilder.VerifyAllExpectationsHaveBeenMet();
        }