예제 #1
0
        public async void Index_EmptyCart_ReturnsMatchingModel()
        {
            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>()
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, new ShippingCostService())
            {
                ControllerContext = contextStub.Object
            };

            var result = await controller.Index() as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<CartViewModel>());

            var model = (CartViewModel)result.Model;

            Assert.That(model.Cart.Items.Count, Is.EqualTo(0));
        }
예제 #2
0
        public void AddCart_RetrieveUserBasedOnIdentity()
        {
            var email = "*****@*****.**";
            var user = TestModelFactory.CreateUser(emailAddress: email);
            var users = new List<UserModel>();
            users.Add(user);

            var mockedUserRepository = new Mock<IUserRepository>();
            mockedUserRepository.Setup(m => m.FindByEmailAddress(email)).Returns(user);

            var deal = TestModelFactory.CreateCompleteDeal();
            var dealOption = deal.Options.First();
            var dealAttributes = dealOption.Attributes.Select(a => a.Key.ToString()).ToList();
            var dealRepository = new FakeDealRepository(new List<DealModel>() { deal });

            var repositoryFactory = new FakeUnitOfWorkFactory(userRepository: mockedUserRepository.Object, dealRepository: dealRepository);
            var cartService = new CartService(repositoryFactory);
            var controller = new CartController(cartService);
            controller.User = new GenericPrincipal(new GenericIdentity(email), new string[] { });

            var newCartItem = CreateNewCartItem(deal.Key.ToString(), dealOption.Key.ToString(), dealAttributes);
            controller.Post(newCartItem);

            mockedUserRepository.Verify(m => m.FindByEmailAddress(email), Times.Once);
        }
 // Use this for initialization
 void Start()
 {
     meshRenderer = GetComponent<MeshRenderer>();
     boxCollider = GetComponent<BoxCollider>();
     cameraController = FindObjectOfType<CameraController>();
     cartController = FindObjectOfType<CartController>();
     door = FindObjectOfType<Door>();
 }
예제 #4
0
 public void Adding_Product_To_Cart_Goes_To_Cart_Screen()
 {
     // Arrange - create the mock repository
     Mock<IProductRepository> mock = new Mock<IProductRepository>();
     mock.Setup(m => m.Products).Returns(new Product[] { new Product {ProductID = 1, Name = "P1", Category = "Apples"}, }.AsQueryable());
     // Arrange - create a Cart
     Cart cart = new Cart();
     // Arrange - create the controller
     CartController target = new CartController(mock.Object, null);
     // Act - add a product to the cart
     RedirectToRouteResult result = target.AddToCart(cart, 2, "myUrl");
     // Assert
     Assert.AreEqual(result.RouteValues["action"], "Index");
     Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
 }
예제 #5
0
        public void Cannot_Checkout_Empty_Cart()
        {
            // Arrange
            Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
            Cart cart = new Cart();
            ShippingDetails shippingDetails = new ShippingDetails();
            CartController target = new CartController(null, mock.Object);

            // Act
            ViewResult result = target.Checkout(cart, shippingDetails);

            // Assert
            // Not passed to any processor
            mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(), It.IsAny<ShippingDetails>()), Times.Never());
            // Returning default view
            Assert.AreEqual("", result.ViewName);
            // Passing invalid model to the view
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #6
0
        public void Cannot_Checkout_Invalid_Shipping_Details()
        {
            // Arrange
            Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
            Cart cart = new Cart();
            cart.AddItem(new Product(), 1);
            CartController target = new CartController(null, mock.Object);
            target.ModelState.AddModelError("error", "error");

            // Act
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // Assert
            // Not passed to any processor
            mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(), It.IsAny<ShippingDetails>()), Times.Never());
            // Returning default view
            Assert.AreEqual("", result.ViewName);
            // Passing invalid model
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #7
0
 public void Cannot_Checkout_Empty_Cart()
 {
     // Arrange - create a mock order processor
     Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
     // Arrange - create an empty cart
     Cart cart = new Cart();
     // Arrange - create shipping details
     ShippingDetails shippingDetails = new ShippingDetails();
     // Arrange - create an instance of the controller
     CartController target = new CartController(null, mock.Object);
     // Act
     ViewResult result = target.Checkout(cart, shippingDetails);
     // Assert - check that the order hasn't been passed on to the processor
     mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(),
     It.IsAny<ShippingDetails>()),
     Times.Never());
     // Assert - check that the method is returning the default view
     Assert.AreEqual("", result.ViewName);
     // Assert - check that I am passing an invalid model to the view
     Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
 }
예제 #8
0
        public async void AddToCart()
        {
            #region Arrange
            var options = new DbContextOptionsBuilder <AspnetAPIContext>()
                          .UseInMemoryDatabase(databaseName: "AspnetAPI1")
                          .Options;

            await using (var context = new AspnetAPIContext(options))
            {
                context.Add(new Product()
                {
                    Name  = "Test",
                    Price = 0
                });
                await context.SaveChangesAsync();
            }

            Cart cartEntryCreated = null;
            #endregion

            #region Act

            await using (var context = new AspnetAPIContext(options))
            {
                var controller = new CartController(context);
                await controller.AddToCart(1, 20);

                cartEntryCreated = await context.Cart.FindAsync(1);
            }
            #endregion

            #region Assert
            Assert.NotNull(cartEntryCreated);
            Assert.Equal(1, cartEntryCreated.ProductId);
            Assert.Equal(20, cartEntryCreated.Quantity);
            #endregion
        }
예제 #9
0
        protected void AddToCart_Click(object sender, EventArgs e)
        {
            string productId = productid.Text;
            string quantity  = qty.Text;


            if (productId.Length == 0 || quantity.Length == 0)
            {
                error.Text = "Product Id atau Quantity invalid";
            }
            else
            {
                int  productID = Int32.Parse(productId);
                int  qtty      = Int32.Parse(quantity);
                int  userId    = Int32.Parse(Session["userid"].ToString());
                bool check     = checkQty(productID, qtty);

                if (CartController.isProductExist(productID) == false)
                {
                    error.Text = "Product Id salah";
                }
                else if (CartController.isProductExist(productID) == true && CartController.checkstock(productID) == true)
                {
                    error.Text = "";
                }

                if (!check)
                {
                    error.Text = "mohon cek kembali quantity";
                }
                else
                {
                    CartController.addToCart(userId, productID, qtty);
                    error.Text = "Success add to cart";
                }
            }
        }
예제 #10
0
        public void Index()
        {
            // Arrange
            CartController controller = new CartController();

            // Act

            //Accepted Value = 280
            decimal expectedTotal = 100;

            List <CartModel> objCartList = new List <CartModel>()
            {
                new CartModel {
                    CartId = 1, ProductId = 1, Quantity = 1, OriginalPrice = 50, OfferPrice = 50
                },
                new CartModel {
                    CartId = 2, ProductId = 2, Quantity = 1, OriginalPrice = 30, OfferPrice = 30
                },
                new CartModel {
                    CartId = 3, ProductId = 3, Quantity = 1, OriginalPrice = 20, OfferPrice = 20
                },
                // new CartModel{CartId = 4,ProductId= 4,Quantity =1,OriginalPrice =15,OfferPrice = 15}
            };

            Offer checkOfferPrice = new Offer(objCartList);
            //var result = controller.Index() as ViewResult;
            List <CartModel> obj = checkOfferPrice.getOfferDiscount();

            decimal TotalOfferPrice = 0;

            foreach (var item in obj)
            {
                TotalOfferPrice += item.OfferPrice;
            }
            // Assert
            Assert.AreEqual(TotalOfferPrice, expectedTotal);
        }
예제 #11
0
        protected void btnAddToCart_Click(object sender, EventArgs e)
        {
            bool IsAvailableForPurchase = product.IsPurchaseableByUser;

            if (IsAvailableForPurchase)
            {
                int productId = product.Id.Value;
                int quantity  = WA.Parser.ToInt(txtQuantity.Text).GetValueOrDefault(1);

                if ((product.InventoryIsEnabled == true && quantity < product.InventoryQtyInStock.Value) || product.InventoryIsEnabled == false)
                {
                    string jsonProductFieldData = "";
                    List <JsonProductFieldData> productFieldsData = GetPostedWidgetValues(Request);
                    if (productFieldsData.Count > 0)
                    {
                        jsonProductFieldData = Newtonsoft.Json.JsonConvert.SerializeObject(productFieldsData);
                    }

                    CartController cartController = new CartController(StoreContext);
                    cartController.AddProductToCart(productId, quantity, jsonProductFieldData);

                    //var checkoutOrderInfo = Session[StoreContext.SessionKeys.CheckoutOrderInfo] as CheckoutOrderInfo ?? new CheckoutOrderInfo() { Cart = cartController.GetCart(false) };
                    //checkoutOrderInfo.ReCalculateOrderTotals();
                    //Session[StoreContext.SessionKeys.CheckoutOrderInfo] = checkoutOrderInfo;

                    Response.Redirect(StoreUrls.Cart(string.Format(@"""{0}"" has been added to your cart", product.Name)));
                }
                else
                {
                    ShowFlash("This product is out of stock");
                }
            }
            else
            {
                ShowFlash("This product is no longer available for purchase");
            }
        }
예제 #12
0
        public void Can_Add_To_Cart()
        {
            //preparing - create the repo
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = "Apples"
                },
            }.AsQueryable());

            //preparing - create the cart
            Cart cart = new Cart();

            //preparing - create the controller
            CartController target = new CartController(mock.Object);

            //working - add product to the cart
            target.AddToCart(cart, 1, null);

            //asseration
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductID, 1);
        }
예제 #13
0
        public async Task Delete_WhenCalled_WhenItemDoesNotExist_ReturnsNon204StatusCode()
        {
            var expectedId              = Guid.NewGuid().ToString();
            var expectedErrorMessages   = "Item does not exist.";
            var expectedErrorStatusCode = ServiceErrorCode.ItemNotFound;
            var expected = new ServiceError(expectedErrorMessages, expectedErrorStatusCode);

            var serviceMock = new Mock <ICartService>();

            serviceMock.Setup(mock => mock.RemoveItemFromCart(It.IsAny <string>()))
            .Returns(expected);
            var sut = new CartController(serviceMock.Object);

            var results = await sut.Delete(expectedId);

            Assert.IsType <ObjectResult>(results.Result);

            var result = results.Result as ObjectResult;

            Assert.Equal(expectedErrorMessages, result.Value);
            Assert.Equal(404, result.StatusCode);

            serviceMock.Verify(x => x.RemoveItemFromCart(It.Is <string>(item => item == expectedId)), Times.Once());
        }
예제 #14
0
        public void Adding_Product_To_Cart_Goes_To_Cart_Screen()
        {
            // 准备一个模仿存储库
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = "Apples"
                },
            }.AsQueryable());

            // 准备-创建Cart
            Cart cart = new Cart();

            // 准备-创建Cart控制器
            CartController target = new CartController(mock.Object);

            // 动作--对Cart添加一个产品
            RedirectToRouteResult result = target.AddToCart(cart, 2, "myUrl");

            // 断言
            Assert.AreEqual(result.RouteValues["action"], "Index");
            Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
        }
예제 #15
0
        public void Adding_Game_To_Cart_Goes_To_Cart_Screen()
        {
            // Імітоване сховище
            Mock <IGameRepository> mock = new Mock <IGameRepository>();

            mock.Setup(m => m.Games).Returns(new List <Game> {
                new Game {
                    GameId = 1, Name = "Игра1", Category = "Кат1"
                },
            }.AsQueryable());


            Cart cart = new Cart();


            CartController controller = new CartController(mock.Object, null);


            RedirectToRouteResult result = controller.AddToCart(cart, 2, "myUrl");

            // Ствердження
            Assert.AreEqual(result.RouteValues["action"], "Index");
            Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
        }
예제 #16
0
        public void TestCartRemoveProduct()
        {
            var expectedCart = FakeCart();
            var product      = expectedCart.Products[0];

            expectedCart.Products.Clear();

            // Arrange
            var mockBusinessLogic = new Mock <ISportStoreBusinessLogic>();

            mockBusinessLogic
            .Setup(bl => bl.Cart.RemoveProduct(product.Product, product.Quantity))
            .Returns(expectedCart);

            var controller = new CartController(mockBusinessLogic.Object);

            // Act
            //var result = controller.Delete(product);

            // Assert
            mockBusinessLogic.VerifyAll();

            //Assert.IsInstanceOfType(result, typeof(OkResult));
        }
예제 #17
0
        public void Can_Add_To_Cart()
        {
            // Arrange - create the mock repository
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = Apples
                },
            }.AsQueryable());

            // Arrange - create a Cart
            Cart cart = new Cart();

            // Arrange - create the controller
            CartController target = new CartController(mock.Object, null);

            // Act - add a product to the cart
            target.AddToCart(cart, 1, null);

            // Assert
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductID, 1);
        }
예제 #18
0
        public void Cannot_Checkout_Invalid_ShippingDetails()
        {
            // przygotowanie — tworzenie imitacji procesora zamówień
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();
            // przygotowanie — tworzenie koszyka z produktem
            Cart cart = new Cart();

            cart.AddItem(new Product(), 1);
            // przygotowanie — tworzenie egzemplarza kontrolera
            CartController target = new CartController(null, mock.Object);

            // przygotowanie — dodanie błędu do modelu
            target.ModelState.AddModelError("error", "error");
            // działanie — próba zakończenia zamówienia
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // asercje — sprawdzenie, czy zamówienie nie zostało przekazane do procesora
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()),
                        Times.Never());
            // asercje — sprawdzenie, czy metoda zwraca domyślny widok
            Assert.AreEqual("", result.ViewName);
            // asercje — sprawdzenie, czy przekazujemy nieprawidłowy model do widoku
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #19
0
        public void Can_Checkout_And_Submit_Order()
        {
            // Arrange - create a mock order processor
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();
            // Arrange - create an empty cart
            Cart cart = new Cart();

            cart.AddItem(new Product(), 1);
            // Arrange - create shipping details
            ShippingDetails shippingDetails = new ShippingDetails();
            // Arrange - create an instance of the controller
            CartController target = new CartController(null, mock.Object);

            // Act - try to checkout
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // Assert - check that the order hasn't been passed on to the processor
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()),
                        Times.Once);
            // Assert - check that the method is returning the default view
            Assert.AreEqual("Completed", result.ViewName);
            // Assert - check that I am passing an invalid model to the view
            Assert.AreEqual(true, result.ViewData.ModelState.IsValid);
        }
예제 #20
0
        public void TestCartGetForCurrentSession()
        {
            var expectedCart = FakeCart();

            // Arrange
            var mockBusinessLogic = new Mock <ISportStoreBusinessLogic>();

            mockBusinessLogic
            .Setup(bl => bl.Cart.GetForCurrentSession())
            .Returns(expectedCart);

            var controller = new CartController(mockBusinessLogic.Object);

            // Act
            var result       = controller.Get();
            var obtainedCart = (result as OkNegotiatedContentResult <Cart>).Content;

            // Assert
            mockBusinessLogic.VerifyAll();

            Assert.IsNotNull(obtainedCart);
            Assert.AreEqual(1, obtainedCart.Products.Count);
            Assert.AreEqual(10.9f * 2, obtainedCart.Total);
        }
예제 #21
0
        public void Adding_Game_To_Cart_Goes_To_Cart_Screen()
        {
            // Организация - создание имитированного хранилища
            Mock <IGameRepository> mock = new Mock <IGameRepository>();

            mock.Setup(m => m.Games).Returns(new List <Game> {
                new Game {
                    GameId = 1, Name = "Игра1", Category = "Кат1"
                },
            }.AsQueryable());

            // Организация - создание корзины
            Cart cart = new Cart();

            // Организация - создание контроллера
            CartController controller = new CartController(mock.Object);

            // Действие - добавить игру в корзину
            RedirectToRouteResult result = controller.AddToCart(cart, 2, "myUrl");

            // Утверждение
            Assert.AreEqual(result.RouteValues["action"], "Index");
            Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
        }
예제 #22
0
        public void Cannot_Checkout_Invalid_ShippingDetails()
        {
            // Arrange - create a mock order processor
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();
            // Arrange - create a cart with an item
            Cart cart = new Cart();

            cart.AddItem(new Product(), 1);
            // Arrange - create an instance of the controller
            CartController target = new CartController(null, mock.Object);

            // Arrange - add an error to the model
            target.ModelState.AddModelError("error", "error");

            // Act - try to checkout
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // Assert - check that the order hasn't been passed on to the processor
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()), Times.Never());
            // Assert - check that the method is returning the default view
            Assert.AreEqual("", result.ViewName);
            // Assert - check that we are passing an invalid model to the view
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #23
0
        public void Adding_Product_To_Cart_Goes_To_Cart_Screen()
        {
            // przygotowanie - tworzenie imitacji repozytorium
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = "Jabłka"
                },
            }.AsQueryable());

            // przygotowanie - tworzenie koszyka
            Cart cart = new Cart();

            // przygotowanie - utworzenie kontrolera
            CartController target = new CartController(mock.Object, null);

            // działanie - dodanie produktu do koszyka
            RedirectToRouteResult result = target.AddToCart(cart, 2, "myUrl");

            // asercje
            Assert.AreEqual(result.RouteValues["action"], "Index");
            Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
        }
        public void Valid_Order_Goes_To_Submitter_And_Displays_Completed_View()
        {
            // Arrange
            var            mockSubmitter = new Moq.Mock <IOrderSubmitter>();
            CartController controller    = new CartController(null, mockSubmitter.Object);
            Cart           cart          = new Cart();

            cart.AddItem(new Product(), 1);
            var formData = new FormCollection {
                { "Name", "Steve" }, { "Line1", "123 My Street" },
                { "Line2", "MyArea" }, { "Line3", "" },
                { "City", "MyCity" }, { "State", "Some State" },
                { "Zip", "123ABCDEF" }, { "Country", "Far far away" },
                { "GiftWrap", bool.TrueString }
            };

            // Act
            var result = controller.CheckOut(cart, formData);

            // Assert
            Assert.AreEqual("Completed", result.ViewName);
            mockSubmitter.Verify(x => x.SubmitOrder(cart));
            Assert.AreEqual(0, cart.Lines.Count);
        }
예제 #25
0
        public void Can_Add_To_Cart()
        {
            // Створення імітованого сховища
            Mock <IGameRepository> mock = new Mock <IGameRepository>();

            mock.Setup(m => m.Games).Returns(new List <Game> {
                new Game {
                    GameId = 1, Name = "Game1", Category = "Cat1"
                },
            }.AsQueryable());


            Cart cart = new Cart();


            CartController controller = new CartController(mock.Object, null);

            // Добавлення гри в корзину
            controller.AddToCart(cart, 1, null);

            // Ствердження
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToList()[0].Game.GameId, 1);
        }
예제 #26
0
        public void Cannot_Checkout_Invalid_ShippingDetails()
        {
            //Arrange
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();

            Cart cart = new Cart();

            cart.AddItem(new Phone(), 1);

            CartController controller = new CartController(null, mock.Object);

            controller.ModelState.AddModelError("error", "error");

            //Act
            ViewResult result = controller.Checkout(cart, new ShippingDetails());

            //Assert
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()),
                        Times.Never());

            Assert.AreEqual("", result.ViewName);

            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #27
0
        public void Can_Add_To_Cart()
        {
            // Организация - создание имитированного хранилища
            Mock <IGameRepository> mock = new Mock <IGameRepository>();

            mock.Setup(m => m.Games).Returns(new List <Game> {
                new Game {
                    GameId = 1, Name = "Игра1", Category = "Кат1"
                },
            }.AsQueryable());

            // Организация - создание корзины
            Cart cart = new Cart();

            // Организация - создание контроллера
            CartController controller = new CartController(mock.Object);

            // Действие - добавить игру в корзину
            controller.AddToCart(cart, 1, null);

            // Утверждение
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToList()[0].Game.GameId, 1);
        }
예제 #28
0
        public void ShouldAddAnItemToANewCart()
        {
            // Arrange
            var targetShoppingCartSaved = false;

            var cartRepository = new StubIShoppingCartRepository
            {
                SaveShoppingCartShoppingCart = (cart) =>
                {
                    targetShoppingCartSaved = true;
                    return(cart);
                }
            };

            var productRepository = new StubIProductRepository
            {
                ProductExistsInt32 = productId => productId.Equals(1)
            };

            var controller = new CartController(cartRepository, productRepository);

            SetupControllerForTests(controller);

            // Act
            var result = controller.Add(new CartItem
            {
                ProductId    = 1,
                ProductName  = "Test Product",
                ProductPrice = 9.99m,
                Quantity     = 1
            });

            // Assert
            Assert.IsTrue(targetShoppingCartSaved);
            Assert.AreEqual(result.StatusCode, HttpStatusCode.Created);
        }
예제 #29
0
        public void AddToCart_AddsProduct()
        {
            Cart cart = new Cart();
            Mock <IProductRepository> repo = new Mock <IProductRepository>();

            repo.Setup(x => x.Products).Returns(new []
            {
                new Product
                {
                    ProductId = 1,
                    Category  = "Soccer",
                    Price     = 20
                }
            });

            //Act
            CartController c = new CartController(repo.Object, null);

            c.AddToCart(cart, 1, "test");

            //Assert
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductId, 1);
        }
예제 #30
0
        public void Cannot_Checkout_Invalid_ShippingDetails()
        {
            //Arrange
            Cart cart = new Cart();

            cart.AddItem(new Product(), 1);
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();

            CartController target = new CartController(null, mock.Object);

            target.ModelState.AddModelError("error", "error");

            //Act
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            //Assert - check that order hasn't been passed to the processor
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()),
                        Times.Never());
            //checkout is returning the default view
            System.Diagnostics.Debug.WriteLine("skdjflakjsdf" + result.ViewName);
            Assert.AreEqual("", result.ViewName);
            // check passign invalid value to view
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
        public void Setup()
        {
            cartServiceMock     = new Mock <ICartService>();
            paymentServiceMock  = new Mock <IPaymentService>();
            shipmentServiceMock = new Mock <IShipmentService>();

            // arrange
            cardMock        = new Mock <ICard>();
            addressInfoMock = new Mock <IAddressInfo>();

            //
            var cartItemMock = new Mock <CartItem>();

            cartItemMock.Setup(item => item.Price).Returns(10);

            items = new List <CartItem>()
            {
                cartItemMock.Object
            };

            cartServiceMock.Setup(c => c.Items()).Returns(items.AsEnumerable());

            controller = new CartController(cartServiceMock.Object, paymentServiceMock.Object, shipmentServiceMock.Object);
        }
예제 #32
0
        public void Can_Add_TO_Cart()
        {
            // 准备一个模仿存储库
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = "Apples"
                },
            }.AsQueryable());

            // 准备-创建Cart
            Cart cart = new Cart();

            // 准备-创建Cart控制器
            CartController target = new CartController(mock.Object);

            // 动作--对Cart添加一个产品
            target.AddToCart(cart, 1, null);

            // 断言
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductID, 1);
        }
예제 #33
0
        public void Index()
        {
            List <CartItemDto> cartitems = new List <CartItemDto>()
            {
                new CartItemDto
                {
                    Id             = 0,
                    ProductName    = "washing machine",
                    ProductId      = 3,
                    Count          = 1,
                    Price          = 10500000,
                    Images         = "",
                    TotalPriceItem = 10500000
                }
            };
            ResultDto <CartDto> data = new ResultDto <CartDto>()
            {
                Data =
                    new CartDto
                {
                    CartId     = 0,
                    CartItems  = cartitems,
                    TotalPrice = 10500000
                },
                IsSuccess = true
            };

            var moq = new Mock <ICartService>();

            moq.Setup(p => p.GetMyCart(Guid.Parse("0cd905ad-e101-4e4a-9401-3aaf4d81a4c4"), "700d83aa-6789-44b0-be82-4f660ec29cd3")).Returns(data);

            CartController cartController = new CartController(moq.Object);
            ViewResult     result         = cartController.Index() as ViewResult;

            Assert.Equal(data.Data, result.Model);
        }
예제 #34
0
        public void Cannot_Checkout_Invalid_ShippingDetails()
        {
            // Sắp xếp – tạo một bộ xử lý đơn hàng giả
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();
            // Chuẩn bị – tạo một giỏ hàng với một món hàng
            Cart cart = new Cart();

            cart.AddItem(new Product(), 1);
            // Chuẩn bị - tạo một controller
            CartController target = new CartController(null, mock.Object);

            // Chuẩn bị - thêm một lỗi vào mô hình
            target.ModelState.AddModelError("error", "error");
            // Thực hiện – thử thanh toán
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // Xác nhận – kiểm tra xem đơn hàng không được chuyển sang bộ xử lý
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(),
                                            It.IsAny <ShippingDetails>()), Times.Never());
            // Xác nhận – kiểm tra xem phương thức trả về trang mặc định
            Assert.AreEqual("", result.ViewName);
            // Xác nhận – kiểm tra xem tôi chuyển mô hình không hợp lệ sang giao diện hiển
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #35
0
        public void Can_Add_To_Cart()
        {
            // przygotowanie - tworzenie imitacji repozytorium
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = "Jabłka"
                },
            }.AsQueryable());

            // przygotowanie - tworzenie koszyka
            Cart cart = new Cart();

            // przygotowanie - utworzenie kontrolera
            CartController target = new CartController(mock.Object, null);

            // działanie - dodanie produktu do koszyka
            target.AddToCart(cart, 1, null);

            // asercje
            Assert.AreEqual(cart.Lines.Count(), 1);
            Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductID, 1);
        }
예제 #36
0
파일: CartTests.cs 프로젝트: Blazeye/Store
        public void Cannot_Checkout_Empty_Cart()
        {
            // arrange
            // create a mock repository
            Mock <IOrderProcessor> mock = new Mock <IOrderProcessor>();
            // create an empty cart
            Cart cart = new Cart();
            // create shipping details
            ShippingDetails shippingDetails = new ShippingDetails();
            // create an instance of the controller
            CartController target = new CartController(null, mock.Object);

            // act
            ViewResult result = target.Checkout(cart, shippingDetails);

            // assert
            // check that the order hasn't been passed on to the processor
            mock.Verify(m => m.ProcessOrder(It.IsAny <Cart>(), It.IsAny <ShippingDetails>()),
                        Times.Never());
            // check that the method is returning the default view
            Assert.AreEqual("", result.ViewName);
            // check that I am passing an invalid model to the view
            Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
        }
예제 #37
0
        public void Adding_Product_To_Cart_Goes_To_Cart_Screen()
        {
            // Arrange - create the mock repository
            Mock <IProductRepository> mock = new Mock <IProductRepository>();

            mock.Setup(m => m.Products).Returns(new Product[] {
                new Product {
                    ProductID = 1, Name = "P1", Category = Apples
                },
            }.AsQueryable());

            // Arrange - create a Cart
            Cart cart = new Cart();

            // Arrange - create the controller
            CartController target = new CartController(mock.Object, null);

            // Act - add a product to the cart
            RedirectToRouteResult result = target.AddToCart(cart, 2, "myUrl");

            // Assert
            //Assert.AreEqual(result.RouteValues["action"], "Index");
            //Assert.AreEqual(result.RouteValues["returnUrl"], "myUrl");
        }
예제 #38
0
 public void Cannot_Checkout_Invalid_ShippingDetails()
 {
     // Arrange - create a mock order processor
     Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
     // Arrange - create a cart with an item
     Cart cart = new Cart();
     cart.AddItem(new Product(), 1);
     // Arrange - create an instance of the controller
     CartController target = new CartController(null, mock.Object);
     // Arrange - add an error to the model
     target.ModelState.AddModelError("error", "error");
     // Act - try to checkout
     ViewResult result = target.Checkout(cart, new ShippingDetails());
     // Assert - check that the order hasn't been passed on to the processor
     mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(),
     It.IsAny<ShippingDetails>()),
     Times.Never());
     // Assert - check that the method is returning the default view
     Assert.AreEqual("", result.ViewName);
     // Assert - check that I am passing an invalid model to the view
     Assert.AreEqual(false, result.ViewData.ModelState.IsValid);
 }
예제 #39
0
        public void AddCart_UserCartAdded()
        {
            var email = "*****@*****.**";
            var user = TestModelFactory.CreateUser(emailAddress: email);
            var users = new List<UserModel>();
            users.Add(user);

            var mockedUserRepository = new Mock<IUserRepository>();
            mockedUserRepository.Setup(m => m.FindByEmailAddress(email)).Returns(user);

            var deal = TestModelFactory.CreateCompleteDeal();
            var dealOption = deal.Options.First();
            var dealAttributes = dealOption.Attributes.Select(a => a.Key.ToString()).ToList();
            var dealRepository = new FakeDealRepository(new List<DealModel>() { deal });

            var repositoryFactory = new FakeUnitOfWorkFactory(userRepository: mockedUserRepository.Object, dealRepository: dealRepository);
            var cartService = new CartService(repositoryFactory);
            var controller = new CartController(cartService);
            controller.User = new GenericPrincipal(new GenericIdentity(email), new string[] { });

            var newCartItem = CreateNewCartItem(deal.Key.ToString(), dealOption.Key.ToString(), dealAttributes);

            user.CartItems.Should().BeEmpty();
            controller.Post(newCartItem);

            user.CartItems.Count().ShouldBeEquivalentTo(1);

            var firstCartItem = user.CartItems.First();
            firstCartItem.DealOption.ShouldBeEquivalentTo(dealOption);
            firstCartItem.AttributeValues.ShouldAllBeEquivalentTo(dealOption.Attributes);
        }
예제 #40
0
        public void SetSessionCartQty_WhenCalled_SetsSessionCartQuantityToCartCount()
        {
            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>
                {
                    new CartItem(),
                    new CartItem(),
                    new CartItem()
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());

            dbStub.
                Setup(db => db.Carts).
                Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextMock = new Mock<ControllerContext>();
            contextMock.
                Setup(c => c.HttpContext.User.Identity).
                Returns<IIdentity>(null);
            contextMock.
                SetupGet(c => c.HttpContext.Session[CartController.CART_QTY_SESSION_KEY]).
                Returns(null);
            contextMock.
                SetupSet(c => c.HttpContext.Session[CartController.CART_QTY_SESSION_KEY] = It.IsAny<object>()).
                Verifiable();

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.
                Setup(id => id.GetUserId(It.IsAny<IIdentity>())).
                Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextMock.Object
            };

            controller.SetSessionCartQty();

            Assert.That(
                () => 
                    contextMock.VerifySet(c => c.HttpContext.Session[CartController.CART_QTY_SESSION_KEY] = cart.Items.Count,
                    Times.Once),
                Throws.Nothing);
        }
예제 #41
0
        public void GetCarts_RetrieveUserByIdentity()
        {
            var email = "*****@*****.**";
            var user = TestModelFactory.CreateUser(emailAddress: email);
            var users = new List<UserModel>();
            users.Add(user);

            var mockedUserRepository = new Mock<IUserRepository>();
            mockedUserRepository.Setup(m => m.FindByEmailAddress(email)).Returns(user);

            var repositoryFactory = new FakeUnitOfWorkFactory(userRepository: mockedUserRepository.Object);
            var cartService = new CartService(repositoryFactory);
            var controller = new CartController(cartService);
            controller.User = new GenericPrincipal(new GenericIdentity(email), new string[] { });

            controller.Get();

            mockedUserRepository.Verify(m => m.FindByEmailAddress(email), Times.Once);
        }
예제 #42
0
 public void Can_Add_To_Cart()
 {
     // Arrange - create the mock repository
     Mock<IProductRepository> mock = new Mock<IProductRepository>();
     mock.Setup(m => m.Products).Returns(new Product[] { new Product {ProductID = 1, Name = "P1", Category = "Apples"}, }.AsQueryable());
     // Arrange - create a Cart
     Cart cart = new Cart();
     // Arrange - create the controller
     CartController target = new CartController(mock.Object, null);
     // Act - add a product to the cart
     target.AddToCart(cart, 1, null);
     // Assert
     Assert.AreEqual(cart.Lines.Count(), 1);
     Assert.AreEqual(cart.Lines.ToArray()[0].Product.ProductID, 1);
 }
예제 #43
0
 void Start()
 {
     playerController = FindObjectOfType<PlayerController>();
     cartController = FindObjectOfType<CartController>();
     canvas.gameObject.SetActive(false);
 }
예제 #44
0
        public void UpdateQuantity_ItemIsNotInCart_Throws404Exception()
        {
            Guid gameProductId = new Guid("976ACE77-D87C-4EBE-83A0-46F911F6490E");

            PhysicalGameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                NewWebPrice = 12m,
                UsedWebPrice = 8m,
                Platform = new Platform
                {
                    PlatformName = "XBAX",
                }
            };

            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>
                {
                    new CartItem
                    {
                        Product = gameProduct,
                        ProductId = gameProduct.Id,
                        IsNew = true,
                        MemberId = UserId,
                        Quantity = 1
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextStub.Object
            };

            Assert.That(async () => await controller.UpdateQuantity(gameProductId, true, 2), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
예제 #45
0
        public async void UpdateQuantity_InvalidQuantity_RedirectsToIndex(int? quantity)
        {
            CartController controller = new CartController(veilDataAccess: null, idGetter: null, shippingCostService: null);

            var result = await controller.UpdateQuantity(Id, true, quantity) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
        }
예제 #46
0
        public void RemoveItem_NullCart()
        {
            Cart cart = new Cart
            {
                MemberId = new Guid("45B0752E-998B-477A-AAAD-3ED535BA3559"),
                Items = new List<CartItem>(),
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());

            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);

            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextStub.Object
            };

            Assert.That(async () => await controller.RemoveItem(Id, true), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
예제 #47
0
        public async void RemoveItem_CatchesOnSave()
        {
            Game game = new Game()
            {
                Id = GameId,
                Name = "game"
            };

            GameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                NewWebPrice = 79.99m,
                UsedWebPrice = 44.99m,
                Platform = new Platform
                {
                    PlatformName = "PS4",
                },
                Game = game
            };

            CartItem cartItem = new CartItem()
            {
                ProductId = gameProduct.Id
            };

            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>()
                {
                    cartItem
                }
            };

            Member member = new Member()
            {
                UserId = UserId,
                Cart = cart
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            Mock<DbSet<Member>> memberDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Member> { member }.AsQueryable());
            Mock<DbSet<GameProduct>> gameProductDbSetStub =
                TestHelpers.GetFakeAsyncDbSet(new List<GameProduct> { gameProduct }.AsQueryable());

            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            gameProductDbSetStub.Setup(db => db.FindAsync(gameProduct.Id)).ReturnsAsync(gameProduct);
            memberDbSetStub.Setup(db => db.Find(member.UserId)).Returns(member);
            gameProductDbSetStub.SetupForInclude();

            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);
            dbStub.Setup(db => db.GameProducts).Returns(gameProductDbSetStub.Object);
            dbStub.Setup(db => db.Members).Returns(memberDbSetStub.Object);
            dbStub.Setup(db => db.SaveChangesAsync()).Throws<DbUpdateException>();

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<HttpSessionStateBase> sessionStub = new Mock<HttpSessionStateBase>();
            contextStub.Setup(s => s.HttpContext.Session).Returns(sessionStub.Object);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextStub.Object
            };

            var result = await controller.RemoveItem(gameProduct.Id, cartItem.IsNew) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["action"], Is.EqualTo("Index"));
        }
예제 #48
0
        public async void Index_ItemsInCart_ReturnsMatchingModel()
        {
            PhysicalGameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                NewWebPrice = 12m,
                UsedWebPrice = 8m,
                Platform = new Platform
                {
                    PlatformName = "XBAX",
                }
            };

            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>
                {
                    new CartItem
                    {
                        Product = gameProduct,
                        ProductId = gameProduct.Id,
                        IsNew = true,
                        MemberId = UserId,
                        Quantity = 1
                    },
                    new CartItem
                    {
                        Product = gameProduct,
                        ProductId = gameProduct.Id,
                        IsNew = false,
                        MemberId = UserId,
                        Quantity = 2
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, new ShippingCostService())
            {
                ControllerContext = contextStub.Object
            };

            var result = await controller.Index() as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<CartViewModel>());

            var model = (CartViewModel)result.Model;

            Assert.That(model.Cart.Items.Count, Is.EqualTo(2));
            Assert.That(model.Cart.Items.FirstOrDefault(i => i.IsNew).ProductId, Is.EqualTo(Id));
            Assert.That(model.Cart.Items.FirstOrDefault(i => !i.IsNew).ProductId, Is.EqualTo(Id));
            Assert.That(model.Cart.Items.FirstOrDefault(i => i.IsNew).Quantity, Is.EqualTo(1));
            Assert.That(model.Cart.Items.FirstOrDefault(i => !i.IsNew).Quantity, Is.EqualTo(2));
        }
예제 #49
0
        public void RemoveItem_NullId()
        {
            CartController controller = new CartController(veilDataAccess: null, idGetter: null, shippingCostService: null);

            Assert.That(async () => await controller.RemoveItem(null, true), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
예제 #50
0
        public void Can_View_Cart_Contents()
        {
            // Arrange
            Cart cart = new Cart();

            CartController target = new CartController(null, null);

            // Act
            CartIndexViewModel result = (CartIndexViewModel)target.Index(cart, "myUrl").ViewData.Model;

            // Assert
            Assert.AreSame(result.Cart, cart);
            Assert.AreEqual(result.ReturnUrl, "myUrl");
        }
예제 #51
0
        public void AddItem_NullCart()
        {
            Game game = new Game()
            {
                Id = GameId,
                Name = "game"
            };

            GameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                NewWebPrice = 79.99m,
                UsedWebPrice = 44.99m,
                Platform = new Platform
                {
                    PlatformName = "PS4",
                },
                Game = game
            };

            Cart cart = new Cart
            {
                MemberId = new Guid("45B0752E-998B-477A-AAAD-3ED535BA3559"),
                Items = new List<CartItem>(),
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            Mock<DbSet<GameProduct>> gameProductDbSetStub =
                TestHelpers.GetFakeAsyncDbSet(new List<GameProduct> { gameProduct }.AsQueryable());

            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            gameProductDbSetStub.Setup(db => db.FindAsync(gameProduct.Id)).ReturnsAsync(gameProduct);
            gameProductDbSetStub.SetupForInclude();

            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);
            dbStub.Setup(db => db.GameProducts).Returns(gameProductDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, shippingCostService: null)
            {
                ControllerContext = contextStub.Object
            };

            Assert.That(async () => await controller.AddItem(gameProduct.Id, true), Throws.InstanceOf<HttpException>().And.Matches<HttpException>(ex => ex.GetHttpCode() == 404));
        }
예제 #52
0
        private static CartController CreateCartController(List<UserModel> users, List<DealModel> deals = null)
        {
            var userRepository = new FakeUserRepository(users);
            var repositoryFactory = new FakeUnitOfWorkFactory(
                userRepository: userRepository,
                dealRepository: deals != null ? new FakeDealRepository(deals) : null);

            var cartService = new CartService(repositoryFactory);
            var controller = new CartController(cartService);
            return controller;
        }
예제 #53
0
        public async void UpdateQuantity_ItemIsInCart_NotEnoughNewInventory_ReturnsUpdatedModel()
        {
            PhysicalGameProduct gameProduct = new PhysicalGameProduct()
            {
                Id = Id,
                BoxArtImageURL = "boxart",
                SKUNameSuffix = "GameProductName",
                Game = new Game
                {
                    Name = "GameName"
                },
                NewWebPrice = 12m,
                UsedWebPrice = 8m,
                Platform = new Platform
                {
                    PlatformName = "XBAX",
                },
                LocationInventories = new List<ProductLocationInventory>
                {
                    new ProductLocationInventory
                    {
                        NewOnHand = 5,
                        UsedOnHand = 2
                    }
                }
            };

            Cart cart = new Cart
            {
                MemberId = UserId,
                Items = new List<CartItem>
                {
                    new CartItem
                    {
                        Product = gameProduct,
                        ProductId = gameProduct.Id,
                        IsNew = true,
                        MemberId = UserId,
                        Quantity = 1
                    }
                }
            };

            Mock<IVeilDataAccess> dbStub = TestHelpers.GetVeilDataAccessFake();
            Mock<DbSet<Cart>> cartDbSetStub = TestHelpers.GetFakeAsyncDbSet(new List<Cart> { cart }.AsQueryable());
            cartDbSetStub.Setup(db => db.FindAsync(cart.MemberId)).ReturnsAsync(cart);
            dbStub.Setup(db => db.Carts).Returns(cartDbSetStub.Object);

            Mock<ControllerContext> contextStub = new Mock<ControllerContext>();
            contextStub.Setup(c => c.HttpContext.User.Identity).Returns<IIdentity>(null);
            contextStub.Setup(c => c.HttpContext.User.Identity.IsAuthenticated).Returns(true);

            Mock<IGuidUserIdGetter> idGetterStub = new Mock<IGuidUserIdGetter>();
            idGetterStub.Setup(id => id.GetUserId(It.IsAny<IIdentity>())).Returns(UserId);

            CartController controller = new CartController(dbStub.Object, idGetterStub.Object, new ShippingCostService())
            {
                ControllerContext = contextStub.Object
            };

            var result = await controller.UpdateQuantity(gameProduct.Id, true, 8) as ViewResult;

            Assert.That(result != null);
            Assert.That(result.Model, Is.InstanceOf<CartViewModel>());

            var model = (CartViewModel)result.Model;

            Assert.That(model.Cart.Items.Count, Is.EqualTo(1));
            Assert.That(model.Cart.Items.FirstOrDefault().Quantity, Is.EqualTo(8));
        }
예제 #54
0
 private static void SetupControllerWithIdentity(CartController controller, string email)
 {
     controller.User = new GenericPrincipal(new GenericIdentity(email), new string[] { });
 }
예제 #55
0
        public void Can_Checkout_And_Submit()
        {
            // Arrange
            Mock<IOrderProcessor> mock = new Mock<IOrderProcessor>();
            Cart cart = new Cart();
            cart.AddItem(new Product(), 1);
            CartController target = new CartController(null, mock.Object);

            // Act
            ViewResult result = target.Checkout(cart, new ShippingDetails());

            // Assert
            // Passed onto the processor
            mock.Verify(m => m.ProcessOrder(It.IsAny<Cart>(), It.IsAny<ShippingDetails>()), Times.Once());
            // Returning completed view
            Assert.AreEqual("Completed", result.ViewName);
            // Passing valid model
            Assert.AreEqual(true, result.ViewData.ModelState.IsValid);
        }
예제 #56
0
 public void Can_View_Cart_Contents()
 {
     // Arrange - create a Cart
     Cart cart = new Cart();
     // Arrange - create the controller
     CartController target = new CartController(null, null);
     // Act - call the Index action method
     CartIndexView result = (CartIndexView)target.Index(cart, "myUrl").ViewData.Model;
     // Assert
     Assert.AreSame(result.Cart, cart);
     Assert.AreEqual(result.ReturnUrl, "myUrl");
 }
예제 #57
0
        public async void UpdateQuantity_0Quantity_RemovesFromCart()
        {
            CartController controller = new CartController(veilDataAccess: null, idGetter: null, shippingCostService: null);

            var result = await controller.UpdateQuantity(Id, true, 0) as RedirectToRouteResult;

            Assert.That(result != null);
            Assert.That(result.RouteValues["action"], Is.EqualTo("RemoveItem"));
        }