public async Task Edit_WithAddingNewAllergens_ShouldBeSuccessful()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();

            await SeedData(dbContext);

            var service = new IngredientsService(dbContext);

            var entityBeforeEdit = dbContext.Ingredients.First();
            var countBeforeEdit  = entityBeforeEdit.IngredientAllergens.Count();
            var newAllergen      = dbContext.Allergens.Last();

            var test = new IngredientEditInputModel
            {
                Id            = entityBeforeEdit.Id,
                AllergenNames = new List <string> {
                    newAllergen.Name
                }
            };

            var entityAfterEdit = await service.EditAsync(test);

            var countAfterEdit = entityAfterEdit.IngredientAllergens.Count();

            Assert.True(countAfterEdit == (countBeforeEdit + 1));
        }
예제 #2
0
        public async Task <IActionResult> Edit(IngredientEditInputModel model)
        {
            if (!ModelState.IsValid)
            {
                this.ViewData["allergens"] = this.allergensService.GetAllToViewModel <IngredientCreateAllergenViewModel>();

                return(this.View(model));
            }

            if (model.NewImageFile != null && model.NewImageFile.Length != 0)
            {
                if (model.ImagePath != null)
                {
                    model.ImagePath = this.imageService.ReplaceImage(model.NewImageFile, model.ImagePath, model.Name);
                }
                else
                {
                    model.ImagePath = this.imageService.UploadImage(model.NewImageFile, model.Name);
                }
            }

            var ingredient = await this.ingredientService.EditAsync(model);

            if (ingredient == null)
            {
                throw new NullReferenceException();
            }

            return(this.RedirectToAction("Details", new { id = ingredient.Id }));
        }
        public async Task GetViewModelById_ShouldReturnNull_IfIdDoesntExists()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();

            var service = new IngredientsService(dbContext);
            IngredientEditInputModel actual = await service.GetViewModelByIdAsync <IngredientEditInputModel>(1);

            Assert.True(actual == null);
        }
예제 #4
0
        public async Task <Ingredient> EditAsync(IngredientEditInputModel model)
        {
            var ingredientFromDb = this.dbContext.Ingredients
                                   .Include(x => x.IngredientAllergens)
                                   .FirstOrDefault(x => x.Id == model.Id);

            if (ingredientFromDb == null)
            {
                return(null);
            }

            ingredientFromDb.Name        = model.Name;
            ingredientFromDb.Description = model.Description;
            ingredientFromDb.ImagePath   = model.ImagePath;
            ingredientFromDb.ModifiedOn  = DateTime.UtcNow;

            if (model.AllergenNames != null)
            {
                var oldallergens = this.dbContext.IngredientAllergen
                                   .Include(x => x.Allergen)
                                   .Where(x => x.IngredientId == ingredientFromDb.Id)
                                   .ToList();

                foreach (var item in model.AllergenNames)
                {
                    if (item == "RemoveOlds")
                    {
                        this.dbContext.RemoveRange();
                        continue;
                    }

                    var allergen = this.dbContext.Allergens.FirstOrDefault(x => x.Name == item);

                    if (allergen == null)
                    {
                        continue;
                    }

                    IngredientAllergen ingredientAllergen = new IngredientAllergen
                    {
                        Ingredient = ingredientFromDb,
                        Allergen   = allergen,
                    };

                    if (oldallergens.Select(x => x.Allergen).Contains(allergen))
                    {
                        continue;
                    }

                    ingredientAllergen = this.dbContext.IngredientAllergen.Add(ingredientAllergen).Entity;
                }
            }

            await this.dbContext.SaveChangesAsync();

            return(ingredientFromDb);
        }
        public async Task Edit_WithNonExistingId_ShouldReturnNull()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();
            var service   = new IngredientsService(dbContext);

            var tested = new IngredientEditInputModel {
                Id = 1
            };

            var result = await service.EditAsync(tested);

            Assert.Null(result);
        }
        public async Task GetViewModelByIdShouldReturnCorrectViewModel()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();

            await SeedData(dbContext);

            IngredientEditInputModel expectedVM = dbContext.Ingredients.First().To <IngredientEditInputModel>();

            var service = new IngredientsService(dbContext);
            IngredientEditInputModel actual = await service.GetViewModelByIdAsync <IngredientEditInputModel>(expectedVM.Id);


            Assert.IsType <IngredientEditInputModel>(actual);
        }
        public async Task Edit_WithExistingId_ShouldReturnTheRightResult()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();

            await SeedData(dbContext);

            var service = new IngredientsService(dbContext);

            var actual = dbContext.Ingredients.First();

            var tested = new IngredientEditInputModel {
                Id = actual.Id
            };

            var result = await service.EditAsync(tested);

            Assert.True(actual.Id == result.Id);
        }
        public async Task Edit_WithNoNewAllergens_ShouldNotChangeTheOldOnes()
        {
            var dbContext = WantoeatDbContextInMemoryFactory.InitializeContext();

            await SeedData(dbContext);

            var service = new IngredientsService(dbContext);

            var actual = dbContext.Ingredients.First();

            actual.Name      = "Wheat flour";
            actual.ImagePath = "www";
            await dbContext.SaveChangesAsync();

            var tested = new IngredientEditInputModel {
                Id = actual.Id
            };

            var result = await service.EditAsync(tested);

            Assert.True(actual.IngredientAllergens.Count() == result.IngredientAllergens.Count());
        }