public CreateBasketDTOValidatorTests() { _validator = new CreateBasketDTOValidator(); _DTO = new CreateBasketDTO { Products = new List <CreatBasketItemDTO> { new CreatBasketItemDTO() } }; }
public static Basket Convert(CreateBasketDTO dto) { if (dto == null) { throw new ArgumentNullException(nameof(dto)); } return(new Basket { User = UserConverter.Convert(dto.User), UserId = dto.User.Id }); }
public async Task <ActionResult> CreateBasket(CreateBasketDTO createBasket) { var basketItems = new List <BasketItemDTO>(); var products = await _productService.GetProductsAsync( createBasket.Products.Select(p => p.ProductId)); foreach (var product in products) { basketItems.Add(new BasketItemDTO { Product = _mapper.Map <ProductDTO>(product), Quantity = createBasket.Products.Single(p => p.ProductId == product.Id).Quantity }); } var basket = new BasketDTO(); foreach (var basketItem in basketItems) { basket.BasketTotal += basketItem.Product.Price * basketItem.Quantity; basket.BasketItems.Add(basketItem); } if (!string.IsNullOrEmpty(createBasket.OfferVoucherCode)) { var offerVoucher = await _voucherService.GetOfferVoucherAsync(createBasket.OfferVoucherCode); if (offerVoucher == null) { return(NotFound($"{nameof(offerVoucher)} not found")); } basket.Message = _voucherService.CheckVoucherIsValidAsync(basket, offerVoucher); if (string.IsNullOrEmpty(basket.Message)) { basket.BasketDiscountTotal = basket.BasketTotal - offerVoucher.Amount; } } if (createBasket.GiftVoucherCodes.Any()) { basket.BasketDiscountTotal = await _voucherService.DeductGiftVouchers( createBasket.GiftVoucherCodes, string.IsNullOrEmpty(basket.Message) && string.IsNullOrEmpty(createBasket.OfferVoucherCode)? basket.BasketTotal : basket.BasketDiscountTotal); } return(Ok(basket)); }
public async Task <BasketDTO> Create(long userId) { var user = await unitOfWork.UserRepository.Get(userId); // null var basket = new CreateBasketDTO { User = UserConverter.Convert(user) }; var entity = await unitOfWork.Repository <Basket>().Add(BasketConverter.Convert(basket)); if (entity == null) { return(null); } return(BasketConverter.Convert(entity)); }
public static void UpdateSourceToBasket(bool isAffiliate = false, bool isUpgradeFlow = false) { //Update source, dealer number, dealer name in basket to display in confirmation pdf var basketId = isUpgradeFlow ? BasketHelper.GetUpgradeBasketId() : BasketHelper.GetBasketId(); var loggedUserData = LoggedUser; if (loggedUserData != null && IsDealerOrAgent) { var source = string.Empty; var dealerId = new Guid(); var createdBy = loggedUserData.Name; var createdName = loggedUserData.Name + " " + loggedUserData.Name; if (IsDealer) { source = "Dealer"; var company = Configuration.ConfigurationHelper.**WsConfig.Company; if (company != Company.TVVLAANDEREN && company != Company.TELESAT) { dealerId = GetDealerId(createdBy); } // This is only required for HDAustria for now. As we are yet to map the dealers to correct groups in TVV/TSAT for campaigns. } else if (IsAgent) { source = "Agent"; } if (dealerId == new Guid()) { dealerId = BasketHelper.GetDefaultDealerId(); } var updateBasketInfo = new CreateBasketDTO { BasketId = basketId, Source = source, CreatedBy = createdBy, CreatedName = (isAffiliate ? "Affiliate-" : string.Empty) + createdName, DealerId = dealerId }; **.ServiceBus.Extern.Basket.GetService().UpdateSourceToBasket(updateBasketInfo); } }
public async Task CreateBasket(CreateBasketDTO dto, CancellationToken cancellationToken = default) { var user = new User(dto.ContractNumber, dto.CardNumber); var products = new List <Product>(); // assemble DTO in Domain dto.Products .ToList() .ForEach(product => products.Add(product.Assemble())); // create new basket with CreateBasketCommand var createCommand = new CreateBasketCommand(user, products); var basket = await _basketService.CreateBasket(createCommand, cancellationToken); // save the basket into the cache _cacheService.SetValue($"basket_{user.ContractNumber}_{user.CardNumber}", basket, TimeSpan.FromDays(1)); }
public async Task Post_ThresholdNotMet_ReturnWarningMessage() { var productOneId = Guid.NewGuid(); var productTwoId = Guid.NewGuid(); var offerVoucherCode = "DDD"; var products = new List <ProductEntity> { new ProductEntity { Id = productOneId, Description = "Hat", Price = 25.00M, ProductType = new ProductTypeEntity { Description = "Headwear" } }, new ProductEntity { Id = productTwoId, Description = "Voucher", Price = 30.00M, ProductType = new ProductTypeEntity { Description = "Gift Voucher" } } }; var offerVoucher = new OfferVoucherEntity { Amount = 5.00M, Code = offerVoucherCode, ThresHold = 50.00M, }; using (var context = GivenBasketContext()) { await context.Products.AddRangeAsync(products); await context.OfferVouchers.AddAsync(offerVoucher); await context.SaveChangesAsync(); } var createBasket = new CreateBasketDTO { Products = new List <CreatBasketItemDTO> { new CreatBasketItemDTO { ProductId = productOneId, Quantity = 1 }, new CreatBasketItemDTO { ProductId = productTwoId, Quantity = 1 } }, OfferVoucherCode = offerVoucherCode }; var response = await _sqlLiteTestFactory.CreateClient() .PostAsJsonAsync($"/api/v1/basket", createBasket); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <BasketDTO>(content); result.BasketDiscountTotal.Should().Be(0); result.Message.Should().Be($"You have not reached the spend threshold for voucher {offerVoucherCode}. " + $"Spend another £{offerVoucher.ThresHold - 25.00M + 0.01M} " + $"receive £{offerVoucher.Amount} discount from your basket total."); }
public async Task Post_OfferVoucherAndGiftVoucher_VoucherIsApplied() { var productOneId = Guid.NewGuid(); var productTwoId = Guid.NewGuid(); var productTypeCode = Guid.NewGuid(); var offerVoucherCode = "BBB"; var giftVoucherCode = "CCC"; var products = new List <ProductEntity> { new ProductEntity { Id = productOneId, Description = "Hat", Price = 25.00M, ProductType = new ProductTypeEntity { Description = "Headwear" } }, new ProductEntity { Id = productTwoId, Description = "Jumper", Price = 26.00M, ProductType = new ProductTypeEntity { Description = "Top" } } }; var offerVoucher = new OfferVoucherEntity { Amount = 5.00M, Code = offerVoucherCode, ThresHold = 50.00M, }; var giftVoucher = new GiftVoucherEntity { Amount = 5.00M, Code = giftVoucherCode }; using (var context = GivenBasketContext()) { await context.Products.AddRangeAsync(products); await context.OfferVouchers.AddAsync(offerVoucher); await context.GiftVouchers.AddAsync(giftVoucher); await context.SaveChangesAsync(); } var createBasket = new CreateBasketDTO { Products = new List <CreatBasketItemDTO> { new CreatBasketItemDTO { ProductId = productOneId, Quantity = 1 }, new CreatBasketItemDTO { ProductId = productTwoId, Quantity = 1 } }, OfferVoucherCode = offerVoucherCode, GiftVoucherCodes = new List <string> { giftVoucherCode } }; var response = await _sqlLiteTestFactory.CreateClient() .PostAsJsonAsync($"/api/v1/basket", createBasket); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <BasketDTO>(content); result.BasketDiscountTotal.Should() .Be(products.Select(p => p.Price).Sum() - offerVoucher.Amount - giftVoucher.Amount); result.BasketTotal.Should().Be(result.BasketDiscountTotal + offerVoucher.Amount + giftVoucher.Amount); }
public async Task Post_OfferVoucherNoValidProduct_returnsWarningMessage() { var productOneId = Guid.NewGuid(); var productTwoId = Guid.NewGuid(); var offerVoucherCode = "AAA"; var products = new List <ProductEntity> { new ProductEntity { Id = productOneId, Description = "Hat", Price = 25.00M, ProductType = new ProductTypeEntity { Description = "Headwear" } }, new ProductEntity { Id = productTwoId, Description = "Jumper", Price = 26.00M, ProductType = new ProductTypeEntity { Description = "Top" } } }; var offerVoucher = new OfferVoucherEntity { Amount = 5.00M, Code = offerVoucherCode, ThresHold = 50.00M, ProductType = new ProductTypeEntity { Description = "Head Gear" } }; using (var context = GivenBasketContext()) { await context.Products.AddRangeAsync(products); await context.OfferVouchers.AddAsync(offerVoucher); await context.SaveChangesAsync(); } var createBasket = new CreateBasketDTO { Products = new List <CreatBasketItemDTO> { new CreatBasketItemDTO { ProductId = productOneId, Quantity = 1 }, new CreatBasketItemDTO { ProductId = productTwoId, Quantity = 1 } }, OfferVoucherCode = offerVoucherCode }; var response = await _sqlLiteTestFactory.CreateClient() .PostAsJsonAsync($"/api/v1/basket", createBasket); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <BasketDTO>(content); result.BasketDiscountTotal.Should().Be(0); result.Message.Should().Be($"There are no products in your basket applicable to voucher {offerVoucher.Code}."); }