Exemplo n.º 1
0
        public async Task EditPromoCodeAsyncWorksCorrectlyWhenEditingWithoutCategories()
        {
            await this.PopulateDB();

            var codeId    = 1;
            var promoCode = this.DbContext.PromoCodes.FirstOrDefault(x => x.Id == codeId);
            var editPromoCodeViewModel = new EditPromoCodeViewModel()
            {
                Code                   = "code1",
                ExpirationDate         = promoCode.ExpirationDate.AddDays(1),
                Id                     = codeId,
                MaxUsageTimes          = promoCode.MaxUsageTimes + 5,
                PromoPercent           = promoCode.PromoPercent + 5,
                ValidDishCategoriesId  = new List <int>(),
                ValidDrinkCategoriesId = new List <int>(),
            };

            await this.PromoCodeService.EditPromoCodeAsync(editPromoCodeViewModel);

            var actual = this.DbContext.PromoCodes.FirstOrDefault(x => x.Id == codeId);

            Assert.Equal(editPromoCodeViewModel.Code, actual.Code);
            Assert.Equal(editPromoCodeViewModel.ExpirationDate, actual.ExpirationDate);
            Assert.Equal(editPromoCodeViewModel.MaxUsageTimes, actual.MaxUsageTimes);
            Assert.Equal(editPromoCodeViewModel.PromoPercent, actual.PromoPercent);
            Assert.Equal(0, actual.ValidDishCategories.Count);
            Assert.Equal(0, actual.ValidDishCategories.Count);
        }
Exemplo n.º 2
0
        public async Task EditPromoCodeAsync(EditPromoCodeViewModel editViewModel)
        {
            var promoCode = this.promoCodeRepository.AllWithDeleted().Include(x => x.ValidDrinkCategories).Include(x => x.ValidDishCategories).FirstOrDefault(x => x.Id == editViewModel.Id);

            if (promoCode == null)
            {
                throw new InvalidOperationException("There is no promo code with this id!");
            }

            // Removing the items that are not containted in the new promo code
            for (int i = 0; i < promoCode.ValidDishCategories.Count; i++)
            {
                var dish = promoCode.ValidDishCategories.ToList()[i];
                if (!editViewModel.ValidDishCategoriesId.Contains(dish.Id))
                {
                    promoCode.ValidDishCategories.Remove(dish);
                    i--;
                }
            }
            for (int i = 0; i < promoCode.ValidDrinkCategories.Count; i++)
            {
                var drink = promoCode.ValidDrinkCategories.ToList()[i];
                if (!editViewModel.ValidDrinkCategoriesId.Contains(drink.Id))
                {
                    promoCode.ValidDrinkCategories.Remove(drink);
                    i--;
                }
            }

            // Adding the items that are not containted in the old promo code

            foreach (var id in editViewModel.ValidDishCategoriesId)
            {
                if (!promoCode.ValidDishCategories.Any(x => x.Id == id))
                {
                    var dishType = this.dishTypeService.GetDishTypeById(id);
                    promoCode.ValidDishCategories.Add(dishType);
                }
            }

            foreach (var id in editViewModel.ValidDrinkCategoriesId)
            {
                if (!promoCode.ValidDrinkCategories.Any(x => x.Id == id))
                {
                    var drinkType = this.drinkTypeService.GetDrinkTypeById(id);
                    promoCode.ValidDrinkCategories.Add(drinkType);
                }
            }

            promoCode.ExpirationDate = editViewModel.ExpirationDate;
            promoCode.MaxUsageTimes  = editViewModel.MaxUsageTimes;
            promoCode.PromoPercent   = editViewModel.PromoPercent;

            await this.promoCodeRepository.SaveChangesAsync();
        }
Exemplo n.º 3
0
        public async Task EditPromoCodeAsyncWorksCorrectlyWithManyDishAndDrinkTypes()
        {
            await this.PopulateDB();

            await this.DbContext.DrinkTypes.AddAsync(new DrinkType()
            {
                Id   = 5,
                Name = "new",
            });

            await this.DbContext.DishTypes.AddAsync(new DishType()
            {
                Id   = 5,
                Name = "new",
            });

            await this.DbContext.SaveChangesAsync();

            var codeId    = 1;
            var promoCode = this.DbContext.PromoCodes.FirstOrDefault(x => x.Id == codeId);
            var editPromoCodeViewModel = new EditPromoCodeViewModel()
            {
                Code                  = "code1",
                ExpirationDate        = promoCode.ExpirationDate.AddDays(1),
                Id                    = codeId,
                MaxUsageTimes         = promoCode.MaxUsageTimes + 5,
                PromoPercent          = promoCode.PromoPercent + 5,
                ValidDishCategoriesId = new List <int>()
                {
                    5, 1,
                },
                ValidDrinkCategoriesId = new List <int>()
                {
                    5, 3,
                },
            };

            await this.PromoCodeService.EditPromoCodeAsync(editPromoCodeViewModel);

            var actual = this.DbContext.PromoCodes.FirstOrDefault(x => x.Id == codeId);

            Assert.Equal(editPromoCodeViewModel.Code, actual.Code);
            Assert.Equal(editPromoCodeViewModel.ExpirationDate, actual.ExpirationDate);
            Assert.Equal(editPromoCodeViewModel.MaxUsageTimes, actual.MaxUsageTimes);
            Assert.Equal(editPromoCodeViewModel.PromoPercent, actual.PromoPercent);
            Assert.Equal(2, actual.ValidDishCategories.Count);
            Assert.Equal(2, actual.ValidDishCategories.Count);
        }
Exemplo n.º 4
0
        public EditPromoCodeViewModel GetPromoCodeById(int id)
        {
            var promoCode = this.promoCodeRepository.AllWithDeleted().Include(x => x.ValidDrinkCategories).Include(x => x.ValidDishCategories).FirstOrDefault(x => x.Id == id);

            if (promoCode == null)
            {
                throw new InvalidOperationException("There is no promo code with this id!");
            }

            var toReturn = new EditPromoCodeViewModel()
            {
                ExpirationDate         = promoCode.ExpirationDate,
                MaxUsageTimes          = promoCode.MaxUsageTimes,
                PromoPercent           = promoCode.PromoPercent,
                ValidDishCategoriesId  = promoCode.ValidDishCategories.Select(x => x.Id).ToList(),
                ValidDrinkCategoriesId = promoCode.ValidDrinkCategories.Select(x => x.Id).ToList(),
                Code = promoCode.Code,
            };

            return(toReturn);
        }
Exemplo n.º 5
0
        public async Task GetPromoCodeByIdWorksCorrectly()
        {
            await this.PopulateDB();

            var id        = 1;
            var promoCode = this.DbContext.PromoCodes
                            .Include(x => x.ValidDishCategories)
                            .Include(x => x.ValidDrinkCategories)
                            .FirstOrDefault(x => x.Id == id);

            var actual   = this.PromoCodeService.GetPromoCodeById(id);
            var expected = new EditPromoCodeViewModel()
            {
                ExpirationDate         = promoCode.ExpirationDate,
                MaxUsageTimes          = promoCode.MaxUsageTimes,
                PromoPercent           = promoCode.PromoPercent,
                ValidDishCategoriesId  = promoCode.ValidDishCategories.Select(y => y.Id).ToList(),
                ValidDrinkCategoriesId = promoCode.ValidDrinkCategories.Select(y => y.Id).ToList(),
                Code = promoCode.Code,
            };

            actual.ShouldDeepEqual(expected);
        }
Exemplo n.º 6
0
        public async Task <IActionResult> EditPromoCode(EditPromoCodeViewModel promoCode)
        {
            await this.promoCodeService.EditPromoCodeAsync(promoCode);

            return(this.RedirectToAction("PromoCodes"));
        }