public void AddItemToCartShouldAddItemIfNotExists()
        {
            Product prod = new Product {
                ProductName = "testprod", ProductPrice = 1
            };
            Location loc = new Location {
                LocationName = "testloc", LocationAddress = "asdf"
            };
            User user = new User {
                UserName = "******", isManager = false
            };

            using (var ctx = new StoreContext(options))
            {
                StoreRepoDB repo = new StoreRepoDB(ctx);
                ctx.Products.Add(prod);
                ctx.Locations.Add(loc);
                ctx.Users.Add(user);
                ctx.SaveChanges();
                Order cart = new Order {
                    UserId = user.UserId, CheckoutTimestamp = null
                };
                ctx.SaveChanges();
                repo.AddItemToCart(user.UserId, prod.ProductId, loc.LocationId, 5, true);
                ctx.SaveChanges();
            }
            using (var assertCtx = new StoreContext(options))
            {
                StoreRepoDB repo = new StoreRepoDB(assertCtx);
                var         cart = assertCtx.Orders.Include(order => order.orderItems).FirstOrDefault(order => order.UserId == user.UserId && order.CheckoutTimestamp == null);
                Assert.NotNull(cart);
                Assert.Single(cart.orderItems);
                Assert.Equal(5, cart.orderItems[0].Quantity);
            }
        }
 public bool AddItemToCart(int userId, int productId, int locationId, int n)
 {
     if (!repo.SetLocationInventory(productId, locationId, -n, true))
     {
         return(false);
     }
     return(repo.AddItemToCart(userId, productId, locationId, n, true));
 }
        public void CheckOutShouldApplyTimestamp()
        {
            Product prod = new Product {
                ProductName = "testprod", ProductPrice = 1
            };
            Location loc = new Location {
                LocationName = "testloc", LocationAddress = "asdf"
            };
            User user = new User {
                UserName = "******", isManager = false
            };
            DateTime before = DateTime.Now;

            using (var ctx = new StoreContext(options))
            {
                StoreRepoDB repo = new StoreRepoDB(ctx);
                ctx.Products.Add(prod);
                ctx.Locations.Add(loc);
                ctx.Users.Add(user);
                ctx.SaveChanges();
                Order cart = new Order {
                    UserId = user.UserId, CheckoutTimestamp = null
                };
                ctx.SaveChanges();
                repo.AddItemToCart(user.UserId, prod.ProductId, loc.LocationId, 5, true);
                ctx.SaveChanges();
                repo.CheckOut(user.UserId);
                ctx.SaveChanges();
            }
            using (var assertCtx = new StoreContext(options))
            {
                StoreRepoDB repo = new StoreRepoDB(assertCtx);
                var         cart = assertCtx.Orders.Include(order => order.orderItems).FirstOrDefault(order => order.UserId == user.UserId);
                Assert.NotNull(cart);
                Assert.NotNull(cart.CheckoutTimestamp);
                DateTime after = DateTime.Now;
                Assert.True(before <= cart.CheckoutTimestamp);
                Assert.True(cart.CheckoutTimestamp <= after);
            }
        }