예제 #1
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);
        }