Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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");
        }
Ejemplo n.º 4
0
        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]);
        }
Ejemplo n.º 5
0
        /// <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));
        }
Ejemplo n.º 6
0
        /// <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);
        }