public void ShouldEditMealCorrectly()
        {
            // Arrange
            Mock <IMealRepository>    mealMock    = new Mock <IMealRepository>();
            Mock <IStudentRepository> studentMock = new Mock <IStudentRepository>();

            Student student = new Student()
            {
                Id        = "101",
                FirstName = "Ginni",
                LastName  = "Wassell"
            };

            Meal meal = new Meal()
            {
                Id          = 100,
                Title       = "Compound - Strawberry",
                Description = " ",
                Price       = 1.50,
                Date        = DateTime.Now.AddDays(6),
                MaxGuests   = 1,
            };

            ClaimsPrincipal identity = new ClaimsPrincipal(new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.NameIdentifier, student.Id) }));

            meal.Cook = student;
            student.CookAtMeals.Add(meal);

            mealMock.Setup(m => m.Meals).Returns(new List <Meal>()
            {
                meal
            });

            mealMock.Setup(m => m.Update(It.IsAny <Meal>())).Returns((int mealId) =>
            {
                if (meal.Cook.Id == student.Id && meal.Title != null && meal.MaxGuests > 0 && meal.Price >= 0)
                {
                    return(true);
                }

                return(false);
            });

            MealController controller = new MealController(mealMock.Object, studentMock.Object)
            {
                ControllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        User = identity
                    }
                }
            };

            // Act
            ViewResult viewResult = controller.Edit(meal.Id) as ViewResult;

            // Assert
            Assert.True(viewResult.ViewData.ModelState.IsValid);
        }
        public void CannotEditMealWithNoTitle()
        {
            Mock <IMealRepository>    mealMock    = new Mock <IMealRepository>();
            Mock <IStudentRepository> studentMock = new Mock <IStudentRepository>();

            Meal meal = new Meal()
            {
                Id          = 100,
                Title       = null,
                Description = " ",
                Price       = 1.50,
                Date        = DateTime.Now.AddDays(-1),
                MaxGuests   = 1
            };

            mealMock.Setup(m => m.Meals).Returns(new List <Meal>()
            {
                meal
            });

            mealMock.Setup(m => m.Create(It.IsAny <Meal>())).Returns((Meal model) =>
            {
                if (meal.Date > DateTime.Now)
                {
                    return(true);
                }

                return(false);
            });

            mealMock.Setup(m => m.Update(It.IsAny <Meal>())).Returns((Meal model) =>
            {
                if (meal.Title != null && meal.MaxGuests > 0 && meal.Price >= 0)
                {
                    return(true);
                }

                return(false);
            });

            MealController controller = new MealController(mealMock.Object, studentMock.Object);

            // Act
            controller.Create(meal);
            meal.Title = null;
            ViewResult viewResult = controller.Edit(meal) as ViewResult;

            // Assert
            Assert.Null(viewResult.ViewName);
        }
        public void CannotEditSomeoneElseMeal()
        {
            // Arrange
            Mock <IMealRepository>    mealMock    = new Mock <IMealRepository>();
            Mock <IStudentRepository> studentMock = new Mock <IStudentRepository>();

            Student student = new Student()
            {
                Id        = "101",
                FirstName = "Ginni",
                LastName  = "Wassell"
            };

            Meal meal = new Meal()
            {
                Id          = 100,
                Title       = "Compound - Strawberry",
                Description = " ",
                Price       = 1.50,
                Date        = DateTime.Now.AddDays(6),
                MaxGuests   = 1,
            };

            ClaimsPrincipal identity = new ClaimsPrincipal(new ClaimsIdentity(new Claim[]
            {
                new Claim(ClaimTypes.NameIdentifier, student.Id)
            }));

            meal.Cook = student;
            student.CookAtMeals.Add(meal);

            studentMock.Setup(s => s.Students).Returns(new List <Student>()
            {
                student
            });

            mealMock.Setup(m => m.Meals).Returns(new List <Meal>()
            {
                meal
            });

            mealMock.Setup(m => m.Update(It.IsAny <Meal>())).Returns((int mealId) =>
            {
                if (meal.Cook.Id == student.Id)
                {
                    return(true);
                }

                return(false);
            });

            MealController controller = new MealController(mealMock.Object, studentMock.Object)
            {
                ControllerContext = new ControllerContext()
                {
                    HttpContext = new DefaultHttpContext()
                    {
                        User = identity
                    }
                }
            };

            // Act
            meal.Cook = new Student()
            {
                Id = "abc"
            };
            ViewResult viewResult = controller.Edit(meal.Id) as ViewResult;

            // Assert
            Assert.Equal("Error", viewResult?.ViewName);
        }