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); }
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(); }
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); }
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); }
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); }
public async Task <IActionResult> EditPromoCode(EditPromoCodeViewModel promoCode) { await this.promoCodeService.EditPromoCodeAsync(promoCode); return(this.RedirectToAction("PromoCodes")); }