public async Task AddMealAsyncShouldAddMealProperly( string name, double caloriesPer100Grams, MealType mealType, IEnumerable <SoftGym.Data.Models.Enums.FoodPreference> foodPreferencesData) { var options = new DbContextOptionsBuilder <ApplicationDbContext>() .UseInMemoryDatabase(Guid.NewGuid().ToString()).Options; var db = new ApplicationDbContext(options); var mealsRepository = new EfDeletableEntityRepository <Meal>(db); var mealsPreferencesRepository = new EfRepository <MealPreference>(db); var foodPreferencesRepository = new EfRepository <SoftGym.Data.Models.FoodPreference>(db); var foodPreferences = new List <SoftGym.Data.Models.FoodPreference>(); for (int i = 0; i < Enum.GetValues(typeof(SoftGym.Data.Models.Enums.FoodPreference)).Length; i++) { foodPreferences.Add(new SoftGym.Data.Models.FoodPreference() { Preference = (SoftGym.Data.Models.Enums.FoodPreference)Enum.GetValues(typeof(SoftGym.Data.Models.Enums.FoodPreference)).GetValue(i), }); await foodPreferencesRepository.AddAsync(foodPreferences[i]); } await foodPreferencesRepository.SaveChangesAsync(); var cloudinaryService = new Mock <ICloudinaryService>(); var fileMock = new Mock <IFormFile>(); var service = new MealsService( mealsRepository, mealsPreferencesRepository, cloudinaryService.Object, foodPreferencesRepository); var inputModel = new AddMealInputModel() { Name = name, CaloriesPer100Grams = caloriesPer100Grams, PictureFile = fileMock.Object, Type = mealType, FoodPreferences = foodPreferencesData, }; var result = await service.AddMealAsync(inputModel); Assert.NotNull(result); }
public async Task <IActionResult> Add(AddMealInputModel inputModel) { if (!this.cloudinaryService.IsFileValid(inputModel.PictureFile) || !this.ModelState.IsValid) { if (!this.cloudinaryService.IsFileValid(inputModel.PictureFile)) { this.ModelState.AddModelError("PictureFile", "Plese enter valid image format!"); } return(this.View(inputModel)); } var meal = await this.mealsService.AddMealAsync(inputModel); return(this.Redirect($"/Trainers/Meals/Details/{meal.Id}")); }
public async Task <Meal> AddMealAsync(AddMealInputModel inputModel) { Meal meal = new Meal { Name = inputModel.Name, CaloriesPer100Grams = inputModel.CaloriesPer100Grams, PictureUrl = await this.cloudinaryService.UploudAsync(inputModel.PictureFile), Type = inputModel.Type, }; if (inputModel.FoodPreferences != null) { foreach (var foodPreference in inputModel.FoodPreferences) { FoodPreference currentPreference; currentPreference = await this.foodPreferenceRepository .All() .FirstAsync(x => x.Preference == foodPreference); MealPreference mealPreference = new MealPreference { Meal = meal, MealId = meal.Id, Preference = currentPreference, PreferenceId = currentPreference.Id, }; await this.mealsPreferencesRepository.AddAsync(mealPreference); meal.FoodPreferences.ToList().Add(mealPreference); currentPreference.Meals.ToList().Add(mealPreference); } } await this.mealsRepository.AddAsync(meal); await this.mealsRepository.SaveChangesAsync(); return(meal); }