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;
}
}
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); }