public CreateBasketDTOValidatorTests()
 {
     _validator = new CreateBasketDTOValidator();
     _DTO       = new CreateBasketDTO
     {
         Products = new List <CreatBasketItemDTO>
         {
             new CreatBasketItemDTO()
         }
     };
 }
Пример #2
0
        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
            });
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }
Пример #5
0
        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);
            }
        }
Пример #6
0
        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}.");
        }