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); }
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); }
public Model.Basket Update(Model.Basket basket) { _dbContext.Baskets.Update(basket); _dbContext.SaveChanges(); return(basket); }
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); }
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)); }
public Model.Basket Add(Model.Basket basket) { _dbContext.Baskets.Add(basket); _dbContext.SaveChanges(); return(basket); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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!"; } }
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(); }
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); }
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); }
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(); }
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; }