/// <summary> /// Attempt to update the retained quantity of a given product /// </summary> /// <param name="quantity"></param> /// <param name="productId"></param> /// <param name="product"></param> /// <param name="error"></param> /// <returns></returns> public bool TryUpdateRetained(int quantity, int productId, out Product product, out CartOperationError error) { error = new CartOperationError(); product = null; var productCacheKey = ProductCacheKey(productId); if (!memoryCache.TryGetValue(productCacheKey, out product)) { error.StatusCode = 404; error.Message = "Product not found"; return(false); } var remaining = product.Stock - product.Retained; if (quantity > 0 && quantity > remaining) { error.StatusCode = 400; error.Message = "Quantity too large requested"; return(false); } product.Retained += quantity; memoryCache.Set(productCacheKey, product); return(true); }
public void RemoveCartItemTestCaseOk() { var cart = new Cart { Id = "123", CartItems = new Dictionary <int, CartItem> { { 42, new CartItem { ProductId = 42, Quantity = 2 } }, { 43, new CartItem { ProductId = 43, Quantity = 2 } } } }; var obj = (object)cart; memoryCache.Setup(x => x.TryGetValue(It.IsAny <string>(), out obj)).Returns(true); var product = new Product(); var error = new CartOperationError(); productCacheService .Setup(x => x.TryUpdateRetained(It.IsAny <int>(), It.IsAny <int>(), out product, out error)) .Returns(true); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); Assert.NotNull(service.RemoveCartItem("123", 42, out error)); Assert.AreEqual(1, cart.CartItems.Count); }
public void SetCartItemCaseInvalidQuantity() { var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); var error = new CartOperationError(); Assert.Null(service.SetCartItem("123", new CartItem { Quantity = 0 }, out error)); Assert.AreEqual(400, error.StatusCode); }
public void ClearCartTestCaseNotFound() { var cart = new Cart(); var obj = (object)cart; memoryCache.Setup(x => x.TryGetValue(It.IsAny <string>(), out obj)).Returns(false); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); var error = new CartOperationError(); Assert.Null(service.ClearCart("123", out error)); }
public void SetCartItemCaseProductNotFound() { repository.Setup(x => x.Find(It.IsAny <int>())).Returns((Product)null); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); var error = new CartOperationError(); Assert.Null(service.SetCartItem("123", new CartItem { Quantity = 1, ProductId = 42 }, out error)); Assert.AreEqual(400, error.StatusCode); }
public void RemoveCartItemTestCaseCartNotFound() { var cart = new Cart(); var obj = (object)cart; memoryCache.Setup(x => x.TryGetValue(It.IsAny <string>(), out obj)).Returns(false); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); var error = new CartOperationError(); Assert.Null(service.RemoveCartItem("123", 42, out error)); Assert.AreEqual(404, error.StatusCode); }
public void RemoveCartItemTestCaseProductNotInCart() { var cart = new Cart { Id = "123", CartItems = new Dictionary <int, CartItem>() }; var obj = (object)cart; memoryCache.Setup(x => x.TryGetValue(It.IsAny <string>(), out obj)).Returns(true); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); var error = new CartOperationError(); Assert.Null(service.RemoveCartItem("123", 42, out error)); Assert.AreEqual(400, error.StatusCode); }
public void ClearCartTestCaseOk() { var cart = new Cart { CartItems = new Dictionary <int, CartItem> { { 42, new CartItem() } } }; var obj = (object)cart; var error = new CartOperationError(); var product = new Product(); memoryCache.Setup(x => x.TryGetValue(It.IsAny <string>(), out obj)).Returns(true); productCacheService .Setup(x => x.TryUpdateRetained(It.IsAny <int>(), It.IsAny <int>(), out product, out error)) .Returns(true); var service = new CustomerCartService(memoryCache.Object, hub.Object, productCacheService.Object); Assert.NotNull(service.ClearCart("123", out error)); Assert.IsEmpty(cart.CartItems); }