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