public void CanCheckOutAndCreateOrder()
        {
            IRepository <Product>  _productsContext = new Mocks.MockContext <Product>();
            IRepository <Basket>   _BasketContext   = new Mocks.MockContext <Basket>();
            IRepository <Order>    _OrderContext    = new Mocks.MockContext <Order>();
            IRepository <Customer> _CustomerContext = new Mocks.MockContext <Customer>();

            IBasketService basketService;
            IOrderService  orderService;
            Basket         basket;

            _productsContext.Insert(new Product {
                Id = "1", Price = 10.00m
            });
            _productsContext.Insert(new Product {
                Id = "2", Price = 20.00m
            });
            basket = new Basket();
            basket.BasketItems.Add(new BasketItem {
                ProductId = "1", Quantity = 2, BasketId = basket.Id
            });
            basket.BasketItems.Add(new BasketItem {
                ProductId = "2", Quantity = 1, BasketId = basket.Id
            });
            _BasketContext.Insert(basket);

            _CustomerContext.Insert(new Customer {
                Id = "1", Email = "*****@*****.**", ZipCode = "32323"
            });
            IPrincipal FakeUser = new GenericPrincipal(new GenericIdentity("*****@*****.**", "Forms"), null);

            basketService = new BasketService(_productsContext, _BasketContext);
            orderService  = new OrderService(_OrderContext);

            var controller  = new BasketController(basketService, orderService, _CustomerContext);
            var httpContext = new Mocks.MockHttpContext();

            httpContext.User = FakeUser;
            httpContext.Request.Cookies.Add(new HttpCookie("eCommerceBasket")
            {
                Value = basket.Id
            });
            controller.ControllerContext = new ControllerContext(httpContext, new System.Web.Routing.RouteData(), controller);

            //Act

            Order order = new Order();

            controller.CheckOut(order);

            //Assert

            Assert.AreEqual(2, order.OrderItems.Count);
            Assert.AreEqual(0, basket.BasketItems.Count);

            Order orderInRepo = _OrderContext.Find(order.Id);

            Assert.AreEqual(2, orderInRepo.OrderItems.Count);
        }
        public void CanGetSummaryViewModel()
        {
            //Arrange
            IRepository <Product>  _productsContext = new Mocks.MockContext <Product>();
            IRepository <Basket>   _BasketContext   = new Mocks.MockContext <Basket>();
            IRepository <Order>    _OrderContext    = new Mocks.MockContext <Order>();
            IRepository <Customer> _CustomerContext = new Mocks.MockContext <Customer>();

            Basket         basket = new Basket();
            IBasketService basketService;
            IOrderService  orderService;
            var            httpContext = new Mocks.MockHttpContext();


            //Act
            _productsContext.Insert(new Product {
                Id = "1", Price = 10.00m
            });
            _productsContext.Insert(new Product {
                Id = "2", Price = 20.00m
            });
            basket.BasketItems.Add(new BasketItem {
                ProductId = "1", Quantity = 2
            });
            basket.BasketItems.Add(new BasketItem {
                ProductId = "2", Quantity = 1
            });
            _BasketContext.Insert(basket);
            basketService = new BasketService(_productsContext, _BasketContext);
            orderService  = new OrderService(_OrderContext);


            var controller = new BasketController(basketService, orderService, _CustomerContext);

            httpContext.Request.Cookies.Add(new HttpCookie("eCommerceBasket")
            {
                Value = basket.Id
            });
            controller.ControllerContext = new ControllerContext(httpContext, new System.Web.Routing.RouteData(), controller);
            var result        = controller.BasketSummary() as PartialViewResult;
            var basketSummary = (BasketSummaryViewModel)result.ViewData.Model;

            //Assert
            Assert.AreEqual(3, basketSummary.BasketCount);
            Assert.AreEqual(40, basketSummary.BasketTotal);
        }
        public void CanAddBasketItem()
        {
            //Arrange
            IRepository <Product> _productsContext = new Mocks.MockContext <Product>();
            IRepository <Basket>  _BasketContext   = new Mocks.MockContext <Basket>();
            IBasketService        basketService    = new BasketService(_productsContext, _BasketContext);
            //Act
            var httpContext = new Mocks.MockHttpContext();

            basketService.AddToBasket(httpContext, "1");
            Basket basket = _BasketContext.Collection().FirstOrDefault();

            //Assert
            Assert.IsNotNull(basket);
            Assert.AreEqual(1, basket.BasketItems.Count);
            Assert.AreEqual("1", basket.BasketItems.ToList().FirstOrDefault().ProductId);
        }