public async Task ShouldReturnActiveCart()
        {
            var configBuilder = new ConfigurationBuilder()
                                .AddJsonFile("appsettings.json")
                                .Build();
            var connectionString = configBuilder.GetConnectionString("SalesConnection");
            var optionsBuilder   = new DbContextOptionsBuilder <SalesContext>().UseSqlServer(connectionString).UseLoggerFactory(LoggerFactory.Create(builder => builder.AddDebug()));
            var db = new SalesContext(optionsBuilder.Options);

            var cartID     = Guid.NewGuid();
            var pID        = Guid.NewGuid();
            var amount     = 10m;
            var currency   = "EUR";
            var lastAmount = 5m;

            db.Database.ExecuteSqlRaw("TRUNCATE TABLE Items");
            db.Database.ExecuteSqlRaw("DELETE FROM Carts");
            db.Carts.Add(new Cart(cartID)
            {
                State = CartState.Active, Items = new List <Item> {
                    new Item(pID, currentPrice: new Price(amount, currency), lastPrice: new Price(lastAmount, currency), 1)
                }
            });
            db.SaveChanges();

            var handler = new ActiveCartHandler(db);

            var expected = new ActiveCart
            {
                CartID = cartID,
                Items  = new List <ActiveCart.Item>
                {
                    new ActiveCart.Item
                    {
                        ProductID    = pID,
                        Quantity     = 1,
                        CurrentPrice = new ActiveCart.Price {
                            Amount = amount, Currency = currency
                        },
                        LastPrice = new ActiveCart.Price {
                            Amount = lastAmount, Currency = currency
                        }
                    }
                }
            };

            var response = await handler.Handle(new ActiveCartQuery(), CancellationToken.None);

            response.Should().Be(expected);
        }
Beispiel #2
0
        public IActionResult AddToCart([FromBody] CartItemViewModel model)
        {
            Product ProductToAdd = _context.product.Where(p => p.ProductId == model.ProductId).SingleOrDefault();
            Cart    ActiveCart;
            Cart    ExistingCart = _context.cart.Include(c => c.CartItems).Where(c => c.UserId == model.UserId && c.Status == "active").SingleOrDefault();

            if (ExistingCart == null)
            {
                Cart NewCart = new Cart {
                    UserId = model.UserId, Status = "active"
                };
                _context.Add(NewCart);
                _context.SaveChanges();
                ActiveCart = NewCart;
            }
            else
            {
                ActiveCart = ExistingCart;
            }
            if (ActiveCart.ContainsCartItem(ProductToAdd) == false)
            {
                if (model.Quantity <= ProductToAdd.Quantity)
                {
                    CartItem NewCartItem = new CartItem {
                        Quantity = model.Quantity, Cart = ActiveCart, Product = ProductToAdd
                    };
                    _context.Add(NewCartItem);
                    _context.SaveChanges();
                    return(StatusCode(201));
                }
                else
                {
                    string response = "This quantity is not available";
                    return(Json(response));
                }
            }
            else
            {
                string response = "This product is already in your cart. Please update quantity in cart.";
                return(Json(response));
            }
        }