Exemple #1
0
        public void GiftVoucherProduct_NotIncludedDiscountableTotal()
        {
            //Arrange
            var basket = new Model.Basket();

            var hat = new BasketItem(1, "Hat", ProductCategoryHat, 25.00m);

            basket.AddBasketItem(hat);

            var jumper = new BasketItem(4, "� Gift Voucher", ProductCategoryGiftCard, 30.00m);

            basket.AddBasketItem(jumper);

            var offerVoucher = new OfferVoucher("111-333", "�00 off baskets over �.00 Offer Voucher", 5.00m, 50.00m);

            //Act
            var addOfferVoucherResult = basket.AddVoucher(offerVoucher);

            //Assert
            Assert.AreEqual(addOfferVoucherResult, false);
            Assert.AreEqual(basket.BasketItems.Count, 2);
            Assert.AreEqual(basket.Vouchers.Count, 0);
            Assert.That(basket.VoucherNotAppliedMessage, Is.Not.Null);
            Assert.AreEqual(basket.VoucherNotAppliedMessage, "You have not reached the spend threshold for voucher 111-333. Spend another �.01 to receive �00 discount from your basket total.");
            Assert.AreEqual(basket.GetSubTotal(), 55.00m);
        }
Exemple #2
0
        public void OfferVoucher_PartRedeemed_OK()
        {
            //Arrange
            var basket = new Model.Basket();

            var hat = new BasketItem(1, "Hat", ProductCategoryHat, 25.00m);

            basket.AddBasketItem(hat);

            var jumper = new BasketItem(2, "Jumper", ProductCategoryTops, 26.00m);

            basket.AddBasketItem(jumper);

            var headLight = new BasketItem(3, "Head Light", ProductCategoryHeadGear, 3.50m);

            basket.AddBasketItem(headLight);

            var headGearVoucher = new OfferVoucher("111-333", "�00 off Head Gear in baskets over �.00 Offer Voucher", 5.00m, 50.00m, new List <int> {
                ProductCategoryHeadGear
            });

            //Act
            var addVoucherResult = basket.AddVoucher(headGearVoucher);

            //Assert
            Assert.AreEqual(addVoucherResult, true);
            Assert.AreEqual(basket.BasketItems.Count, 3);
            Assert.AreEqual(basket.Vouchers.Count, 1);
            Assert.That(basket.VoucherNotAppliedMessage, Is.Null);
            Assert.AreEqual(basket.GetSubTotal(), 51.00m);
        }
Exemple #3
0
        public Model.Basket Update(Model.Basket basket)
        {
            _dbContext.Baskets.Update(basket);
            _dbContext.SaveChanges();

            return(basket);
        }
Exemple #4
0
        public void OfferGiftVoucher_Redeemed_OK()
        {
            //Arrange
            var basket = new Model.Basket();

            var hat = new BasketItem(1, "Hat", ProductCategoryHat, 25.00m);

            basket.AddBasketItem(hat);

            var jumper = new BasketItem(2, "Jumper", ProductCategoryTops, 26.00m);

            basket.AddBasketItem(jumper);

            var offerVoucher = new OfferVoucher("111-333", "�00 off baskets over �.00 Offer Voucher", 5.00m, 50.00m);
            var giftVoucher  = new GiftVoucher("111-222", "�00 Gift Voucher", 5.00m);

            //Act
            var addGiftVoucherResult  = basket.AddVoucher(giftVoucher);
            var addOfferVoucherResult = basket.AddVoucher(offerVoucher);

            //Assert
            Assert.AreEqual(addGiftVoucherResult, true);
            Assert.AreEqual(addOfferVoucherResult, true);
            Assert.AreEqual(basket.BasketItems.Count, 2);
            Assert.AreEqual(basket.Vouchers.Count, 2);
            Assert.That(basket.VoucherNotAppliedMessage, Is.Null);
            Assert.AreEqual(basket.GetSubTotal(), 41.00m);
        }
Exemple #5
0
        public async Task <UpdateBasketPayload> ClearBasketByOwnerIdAsync(
            Guid id,
            [ScopedService] ApplicationDbContext dbContext)
        {
            Model.Basket basket = await dbContext
                                  .Baskets.Where(b => b.OwnerId == id)
                                  .Include(b => b.BasketItems)
                                  .FirstOrDefaultAsync();

            if (basket == null)
            {
                var extensions = new Dictionary <string, object?>()
                {
                    { "code", "1001" },
                    { "id", id }
                };

                Error error = new("Invalid basket owner id", extensions : extensions);
                throw new QueryException(error);
            }

            basket.BasketItems.Clear();

            await dbContext.SaveChangesAsync();

            return(new UpdateBasketPayload(basket));
        }
Exemple #6
0
        public Model.Basket Add(Model.Basket basket)
        {
            _dbContext.Baskets.Add(basket);
            _dbContext.SaveChanges();

            return(basket);
        }
Exemple #7
0
 public async Task Post([FromBody] Model.Basket value)
 {
     var name = value.BasketItems[0].Name;
     await managerService.AddBasket(value.Id, new Model.BasketItem {
         Name = name
     });
 }
        public Model.Basket CreateBasket()
        {
            var basket = new Model.Basket();

            _basketRepository.Add(basket);
            return(basket);
        }
Exemple #9
0
        public async Task <Model.Basket> GetBasketByOwnerId(
            Guid id,
            [ScopedService] ApplicationDbContext dbContext,
            CancellationToken cancellationToken)
        {
            // Look for a basket in the DB
            Guid ownerId = id;

            Model.Basket basket = await dbContext.Baskets
                                  .Where(b => b.OwnerId == ownerId)
                                  .Include(b => b.BasketItems)
                                  .FirstOrDefaultAsync(cancellationToken);

            // If we found one and it was correct, use it
            if (basket != null)
            {
                return(basket);
            }

            // Otherwise create a new one for the user in the db and return that
            // Todo Check for authenticated user and use that to say the basket is for an owner
            basket = new Model.Basket {
                Id = Guid.NewGuid(), OwnerId = ownerId, BasketType = BasketTypes.Anonymous
            };

            await dbContext.Baskets.AddAsync(basket, cancellationToken);

            await dbContext.SaveChangesAsync(cancellationToken);

            return(basket);
        }
Exemple #10
0
        public void OfferVoucher_NotRedeemed_InvalidBasketItems()
        {
            //Arrange
            var basket = new Model.Basket();

            var hat = new BasketItem(1, "Hat", ProductCategoryHat, 25.00m);

            basket.AddBasketItem(hat);

            var jumper = new BasketItem(2, "Jumper", ProductCategoryTops, 26.00m);

            basket.AddBasketItem(jumper);

            var headGearVoucher = new OfferVoucher("111-333", "�00 off Head Gear in baskets over �.00 Offer Voucher", 5.00m, 50.00m, new List <int> {
                ProductCategoryHeadGear
            });

            //Act
            var addVoucherResult = basket.AddVoucher(headGearVoucher);

            //Assert
            Assert.AreEqual(addVoucherResult, false);
            Assert.AreEqual(basket.BasketItems.Count, 2);
            Assert.AreEqual(basket.Vouchers.Count, 0);
            Assert.That(basket.VoucherNotAppliedMessage, Is.Not.Null);
            Assert.AreEqual(basket.VoucherNotAppliedMessage, "There are no products in your basket applicable to voucher Voucher 111-333.");
            Assert.AreEqual(basket.GetSubTotal(), 51.00m);
        }
Exemple #11
0
        public void GiftVoucher_Redeemed_OK()
        {
            //Arrange
            var basket = new Model.Basket();

            var giftVoucher = new GiftVoucher("111-222", "�00 Gift Voucher", 5.00m);

            var hat = new BasketItem(1, "Hat", ProductCategoryHat, 10.50m);

            basket.AddBasketItem(hat);

            var jumper = new BasketItem(2, "Jumper", ProductCategoryTops, 54.65m);

            basket.AddBasketItem(jumper);

            //Act
            var addVoucherResult = basket.AddVoucher(giftVoucher);

            //Assert
            Assert.AreEqual(addVoucherResult, true);
            Assert.AreEqual(basket.BasketItems.Count, 2);
            Assert.AreEqual(basket.Vouchers.Count, 1);
            Assert.That(basket.VoucherNotAppliedMessage, Is.Null);
            Assert.AreEqual(basket.GetSubTotal(), 60.15m);
        }
Exemple #12
0
        public async Task Post([FromBody] Model.Basket value)
        {
            var actor = ActorProxy.Create <IManagerActor>(new ActorId(value.Id), new Uri("fabric:/Basket/ManagerActorService"));

            var name = value.BasketItems[0].Name;
            var xx   = new ManagerActor.Interfaces.BasketItem {
                Name = name
            };
            await actor.AddBasketAsync(xx, CancellationToken.None);
        }
Exemple #13
0
        protected async Task CreateEmptyBasket(Guid basketId, Guid ownerId)
        {
            ApplicationDbContext dbContext = GetDbContext();
            var basket = new Model.Basket {
                Id = basketId, OwnerId = ownerId, BasketType = BasketTypes.Anonymous
            };
            await dbContext.Baskets.AddAsync(basket);

            await dbContext.SaveChangesAsync();
        }
        public async Task <UpdateBasketPayload> UpdateBasketItemAsync(
            BasketItemInput input,
            [ScopedService] ApplicationDbContext dbContext)
        {
            (Guid ownerId, Guid itemId, var quantity) = input;

            Model.Basket basket = await dbContext
                                  .Baskets.Where(b => b.OwnerId == ownerId)
                                  .Include(b => b.BasketItems)
                                  .FirstOrDefaultAsync();

            if (basket == null)
            {
                var extensions = new Dictionary <string, object?>()
                {
                    { "code", "1001" },
                    { "id", ownerId }
                };

                Error error = new("Invalid basket owner id", extensions : extensions);
                throw new QueryException(error);
            }

            // Check that the item exists
            BasketItem?item = basket.BasketItems.FirstOrDefault(i => i.ItemId == itemId);

            if (item == null)
            {
                var extensions = new Dictionary <string, object?>()
                {
                    { "code", "1002" },
                    { "id", itemId }
                };

                Error error = new("Invalid basket item id", extensions : extensions);

                throw new QueryException(error);
            }

            if (quantity > 0)
            {
                item.Quantity = quantity;
            }
            else
            {
                basket.BasketItems.Remove(item);
                dbContext.Remove(item);
            }

            await dbContext.SaveChangesAsync();

            return(new UpdateBasketPayload(basket));
        }
        public async Task <UpdateBasketPayload> AddBasketItemAsync(
            BasketItemInput input,
            [ScopedService] ApplicationDbContext dbContext)
        {
            (Guid ownerId, Guid itemId, var quantity) = input;

            if (quantity == 0)
            {
                Error error = new("Invalid item quantity", "1003");
                throw new QueryException(error);
            }

            Model.Basket basket = await dbContext
                                  .Baskets.Where(b => b.OwnerId == ownerId)
                                  .Include(b => b.BasketItems)
                                  .FirstOrDefaultAsync();

            if (basket == null)
            {
                var extensions = new Dictionary <string, object?>()
                {
                    { "code", "1001" },
                    { "id", ownerId }
                };

                Error error = new("Invalid basket owner id", extensions : extensions);
                throw new QueryException(error);
            }

            // See if there is an item with this ID already, if so then increase it's quantity
            BasketItem?item = basket.BasketItems.FirstOrDefault(i => i.ItemId == itemId);

            if (item != null)
            {
                item.Quantity += quantity;
            }
            else
            {
                item = new BasketItem
                {
                    BasketId = basket.Id,
                    ItemId   = itemId,
                    Quantity = quantity
                };

                basket.BasketItems.Add(item);
            }

            await dbContext.SaveChangesAsync();

            return(new UpdateBasketPayload(basket));
        }
Exemple #16
0
        public async Task <ActionResult <Model.Basket> > Get(int id)
        {
            var actor = ActorProxy.Create <IManagerActor>(new ActorId(id), new Uri("fabric:/Basket/ManagerActorService"));

            var result = await actor.GetBasketAsync(CancellationToken.None);

            var bskt = new Model.Basket();

            bskt.Id = id;
            bskt.BasketItems.Add(new Model.BasketItem {
                Name = result.Name
            });
            return(bskt);
        }
Exemple #17
0
        private void AddToBasket_Click(object sender, RoutedEventArgs e)
        {
            var select = db.Baskets.Where(bask => bask.CustomerID == Login.CustomerID);

            View.Basket basket  = new View.Basket();
            var         product = (Product)((Button)sender).Tag;

            if (Login.CustomerID != 0)
            {
                var checkbasket = db.Baskets.Where(bs => bs.ProductID == product.ProductID && bs.CustomerID == Login.CustomerID);
                if (checkbasket.Count() != 0)
                {
                    MainWindow.Snackbar.IsActive       = true;
                    MainWindow.SnackbarMessage.Content = "Product already added to cart!";
                }
                else
                {
                    Model.Basket basketModel = new Model.Basket()
                    {
                        CustomerID = Login.CustomerID,
                        ProductID  = product.ProductID,
                        Amount     = 1,
                        Price      = product.Price
                    };
                    db.Baskets.Add(basketModel);

                    db.SaveChanges();
                    MainWindow.CountBasket.Text = Convert.ToString(select.LongCount());
                    Model.OrderHistory orderHistory = new OrderHistory()
                    {
                        CustomerID     = Login.CustomerID,
                        ProductID      = product.ProductID,
                        Date           = DateTime.Now,
                        Status         = "In basket",
                        KeyFindProduct = basketModel.BasketID,
                        Amount         = 1,
                        Price          = product.Price
                    };
                    db.OrderHistories.Add(orderHistory);
                    db.SaveChanges();
                    MainWindow.Snackbar.IsActive       = true;
                    MainWindow.SnackbarMessage.Content = "Add to cart!";
                }
            }
            else if (Login.CustomerID == 0)
            {
                MainWindow.Snackbar.IsActive       = true;
                MainWindow.SnackbarMessage.Content = "To add to the basket you need to register or log in to your account!";
            }
        }
Exemple #18
0
        protected async Task AddItem(Guid basketId, Guid itemId, int quantity = 1)
        {
            var item = new BasketItem
            {
                BasketId = basketId,
                ItemId   = itemId,
                Quantity = quantity
            };

            ApplicationDbContext dbContext = GetDbContext();

            Model.Basket basket = await dbContext.Baskets.FindAsync(basketId);

            basket.BasketItems.Add(item);
            await dbContext.SaveChangesAsync();
        }
Exemple #19
0
        protected async Task CreateBasketWithItem(Guid basketId, Guid ownerId, Guid itemId)
        {
            ApplicationDbContext dbContext = GetDbContext();

            var basket = new Model.Basket {
                Id = basketId, OwnerId = ownerId, BasketType = BasketTypes.Anonymous
            };
            await dbContext.Baskets.AddAsync(basket);

            await dbContext.SaveChangesAsync();

            var item = new BasketItem {
                BasketId = basketId, ItemId = itemId, Quantity = 1
            };
            await dbContext.BasketItems.AddAsync(item);

            await dbContext.SaveChangesAsync();
        }
        public async Task clear_Empty_Basket_DB()
        {
            var basketId = Guid.Parse("8d404353-ecb6-4aee-8a54-ff85e0f7332a");
            var ownerId  = Guid.Parse("0ead61d8-dc83-4530-9518-7acbbf090824");

            await CreateEmptyBasket(basketId, ownerId);

            await ClearBasket(ownerId);

            ApplicationDbContext dbContext = GetDbContext();

            Model.Basket basket = await dbContext
                                  .Baskets.Where(b => b.Id == basketId)
                                  .Include(b => b.BasketItems)
                                  .FirstOrDefaultAsync();

            Assert.Equal(ownerId, basket.OwnerId);
            Assert.Equal(0, basket.BasketItems.Count);
        }
Exemple #21
0
        public async Task <Model.Basket> GetBasket(int id)
        {
            var result  = new Model.Basket();
            var baskets = await this.stateManager.GetOrAddAsync <IReliableDictionary <int, Model.Basket> >("shoppingbaskets");

            var newBasket = new Model.Basket
            {
                Id = id
            };

            using (var tx = this.stateManager.CreateTransaction())
            {
                result = await baskets.GetOrAddAsync(tx, id, newBasket);

                await tx.CommitAsync();
            }

            return(result);
        }
Exemple #22
0
        static async Task Main(string[] args)
        {
            using (var client = new HttpClient())
            {
                var timer = new Stopwatch();
                try
                {
                    timer.Start();

                    for (int counter = 1; counter < 1000; counter++)
                    {
                        var basket = new Model.Basket
                        {
                            Id = counter
                        };
                        basket.BasketItems.Add(new Model.BasketItem {
                            Name = "item"
                        });

                        var json    = JsonConvert.SerializeObject(basket);
                        var content = new StringContent(json);
                        content.Headers.ContentType.MediaType = "application/json";

                        var response = await client.PostAsync("http://kesdev2:8326/api/Basket", content);

                        Console.WriteLine($"Response {response.StatusCode.ToString()}");
                    }

                    timer.Stop();
                    Console.WriteLine($"Timer {timer.ElapsedMilliseconds / 1000}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
            Console.ReadKey();
        }
Exemple #23
0
        public async Task <IActionResult> Post([FromBody] Model.Basket value)
        {
            var basket = await _repository.updateBasketAsync(value);

            return(Ok(basket));
        }
 public UpdateBasketPayload(Model.Basket basket)
 {
     Basket = basket;
 }