AdventureWorks.WebServices.Controllers.ShoppingCartController.MergeShoppingCarts C# (CSharp) Method

MergeShoppingCarts() private method

private MergeShoppingCarts ( string id, string anonymousShoppingCartId ) : bool
id string
anonymousShoppingCartId string
return bool
        public bool MergeShoppingCarts(string id, string anonymousShoppingCartId)
        {
            var shoppingCartMerged = false;
            lock (_lock)
            {
                if (id == anonymousShoppingCartId) return false;
                var anonymousShoppingCart = _shoppingCartRepository.GetById(anonymousShoppingCartId);
                var authenticatedShoppingCart = _shoppingCartRepository.GetById(id);
                if ((authenticatedShoppingCart != null && authenticatedShoppingCart.ShoppingCartItems.Count > 0) 
                    && (anonymousShoppingCart != null && anonymousShoppingCart.ShoppingCartItems.Count > 0))
                {
                    shoppingCartMerged = true;
                }

                if (anonymousShoppingCart != null)
                {
                    //Merge shopping carts by adding items from anonymous cart to authenticated cart.
                    foreach (var shoppingCartItem in anonymousShoppingCart.ShoppingCartItems)
                    {
                        for (int i = 0; i < shoppingCartItem.Quantity; i++)
                        {
                            _shoppingCartRepository.AddProductToCart(id, shoppingCartItem.Product);
                        }
                    }

                    //Delete anonymous cart
                    _shoppingCartRepository.Delete(anonymousShoppingCartId);
                }
                return shoppingCartMerged;
            }
        }

Usage Example

        public void MergeShoppingCarts_Merges()
        {
            var addProductToCartCalled = false;
            var deleteCartCalled = false;
            var shoppingCartRepository = new MockShoppingCartRepository();
            shoppingCartRepository.GetByIdDelegate = userId =>
                                                         {
                                                             switch (userId)
                                                             {
                                                                 case "newId":
                                                                     return
                                                                         new ShoppingCart(
                                                                             new Collection<ShoppingCartItem>
                                                                                 {new ShoppingCartItem {Id = "item1", Product = new Product()}});
                                                                 case "oldId":
                                                                     return
                                                                         new ShoppingCart(
                                                                             new Collection<ShoppingCartItem>
                                                                                 {new ShoppingCartItem {Id = "item2", Quantity = 1, Product = new Product{ProductNumber = "product1"}}});
                                                                 default:
                                                                     return null;
                                                             }
                                                         };
            shoppingCartRepository.AddProductToCartDelegate = (shoppingCartId, product) =>
                                                                  {
                                                                      Assert.AreEqual("newId", shoppingCartId);
                                                                      Assert.AreEqual("product1", product.ProductNumber);
                                                                      addProductToCartCalled = true;
                                                                  };
            shoppingCartRepository.DeleteDelegate = shoppingCartId =>
                                                        {
                                                            Assert.AreEqual("oldId", shoppingCartId);
                                                            deleteCartCalled = true;
                                                            return true;
                                                        };
            var target = new ShoppingCartController(shoppingCartRepository, new MockProductRepository());

            Assert.IsTrue(target.MergeShoppingCarts("newId", "oldId"));
            Assert.IsTrue(addProductToCartCalled);
            Assert.IsTrue(deleteCartCalled);
        }
All Usage Examples Of AdventureWorks.WebServices.Controllers.ShoppingCartController::MergeShoppingCarts