public HttpResponseMessage Delete(string id) { var cartContext = this.CreateCartContext(); var items = new Dictionary <Guid, CartItemModel>(); if (!cartItems.TryGetValue(cartContext.UserToken, out items)) { throw CartException.UserHasNoItemsInCart(); } Guid itemId = Guid.Empty; if (!Guid.TryParse(id, out itemId)) { throw new HttpResponseException( new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent("invalid item id exception") }); } if (!cartItems[cartContext.UserToken].ContainsKey(itemId)) { throw new HttpResponseException( new HttpResponseMessage(HttpStatusCode.NotFound) { Content = new StringContent("item not in user collection exception") }); } cartItems[cartContext.UserToken].Remove(itemId); return(new HttpResponseMessage(HttpStatusCode.OK)); }
public async Task Returns_BadRequest_When_Exc_Thrown_Async() { var serviceMock = new Mock <ICartItemService>(); string message = "Test Exception"; var exc = new CartException(CartErrorCode.InvalidProduct, message); serviceMock.Setup(s => s.AddCartItemAsync(It.IsAny <NewCartItem>())).Throws(exc); var controler = new CartItemController(serviceMock.Object); var result = await controler.PostAsync(new AddCartItemRequest()); Assert.IsType <BadRequestObjectResult>(result); Assert.Equal(message, ((BadRequestObjectResult)result).Value); }
public static uint GetVersionRequestHeader(this HttpRequestHeaders headers) { var version = headers.Where(header => header.Key.Equals(VersionHeader, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); ValidateHeader(version, CartException.InvalidVersionHeader()); uint parsed = 0; if (UInt32.TryParse(version.Value.FirstOrDefault(), out parsed)) { return(parsed); } throw new ArgumentException("could not parse version"); }
public static string GetAuthorizationHeader(this HttpRequestHeaders headers) { var authHeader = headers.Where(header => header.Key.Equals(Authorization, StringComparison.OrdinalIgnoreCase)).FirstOrDefault(); var exception = CartException.InvalidAuthorizationHeader(); ValidateHeader(authHeader, exception); var headerValue = authHeader.Value.FirstOrDefault().Split(' '); if (headerValue.Count() != 2 || !headerValue[0].Equals(AuthenticationHeader, StringComparison.OrdinalIgnoreCase)) { throw exception; } return(headerValue[1]); }
/// <summary> /// This will get all of the items in your cart /// </summary> /// <returns>A list of all items in the cart</returns> public Task <HttpResponseMessage> Get() { var cartContext = this.CreateCartContext(); var items = new Dictionary <Guid, CartItemModel>(); if (!cartItems.TryGetValue(cartContext.UserToken, out items)) { throw CartException.UserHasNoItemsInCart(); } var returnMessage = new HttpResponseMessage(); switch (cartContext.Version) { case 1: var userItems = items.Select(fx => fx.Value); break; default: throw CartException.InvalidVersionHeader(); } return(Task.FromResult(returnMessage)); }
/// <summary> /// Handler to Add an Item to the Cart /// </summary> /// <returns>Returns the item that was added.</returns> public async Task <HttpResponseMessage> Post() { const string MethodName = "CartService_Post"; var correlationId = Guid.NewGuid(); var stopWatch = Stopwatch.StartNew(); CartServiceEventLogger.Instance.LogMethodStartEvent(correlationId, MethodName, stopWatch.ElapsedTicks); var cartContext = this.CreateCartContext(); CartItemBase cartRequestBody = null; var returnMessage = new HttpResponseMessage(); var bodyContent = await this.Request.Content.ReadAsStringAsync(); switch (cartContext.Version) { case 1: cartRequestBody = JsonConvert.DeserializeObject <CartItemV1>(bodyContent); break; case 2: cartRequestBody = JsonConvert.DeserializeObject <CartItemV2>(bodyContent); break; default: throw CartException.InvalidVersionHeader(); } if (cartRequestBody == null) { CartServiceEventLogger.Instance.LogInvalidCartItemEvent(correlationId, "CartService_Post"); throw CartException.InvalidCartItem(); } var userItems = default(Dictionary <Guid, CartItemModel>); if (!cartItems.TryGetValue(cartContext.UserToken, out userItems)) { userItems = new Dictionary <Guid, CartItemModel>(); cartItems.Add(cartContext.UserToken, userItems); } if (userItems.ContainsKey(cartRequestBody.Id)) { userItems[cartRequestBody.Id].Quantity++; } else { var item = default(CartItemBase); switch (cartContext.Version) { case 1: item = cartRequestBody as CartItemV1; returnMessage = new HttpResponseMessage { Content = new JsonContent <CartItemV1>(item as CartItemV1) }; break; case 2: item = cartRequestBody as CartItemV2; returnMessage = new HttpResponseMessage { Content = new JsonContent <CartItemV2>(item as CartItemV2) }; break; } userItems.Add(item.Id, item.ToModel()); } CartServiceEventLogger.Instance.LogMethodEndEvent(correlationId, MethodName, stopWatch.ElapsedTicks); return(returnMessage); }