public void Add_ValidObjectPassed_ReturnsOk()
        {
            // Arrange
            var item = new DishRequest()
            {
                Description  = "Bife a Bolonhesa",
                Price        = 10.5,
                RestaurantId = 1,
            };

            // Act
            var okResult = _controller.Save(item) as ObjectResult;

            // Assert
            Assert.IsType <DishResponse>(okResult.Value);
        }
        public void Save_ReturnsViewWithModelStateError_WhenSaveDishWithoutName([Frozen] IMealService mealService, [Frozen] Dish dish)
        {
            //Arrange
            dish.Name = "";

            var mealMock       = Mock.Get(mealService);
            var dishController = new DishController(mealMock.Object);

            dishController.ModelState.AddModelError("Name", "Required");

            //Act

            var sut = dishController.Save(dish);


            //Assert

            sut.Should().BeAssignableTo <IActionResult>().And.BeOfType <ViewResult>()
            .Which.ViewData.ModelState["Name"].Errors.Should().HaveCount(1);
        }
        public void Save_ReturnsToIndexWithDish_WhenSaveExistingDish([Frozen] IMealService mealService, [Frozen] Dish dish)
        {
            //Arrange

            var mealMock = Mock.Get(mealService);

            mealMock.Setup(m => m.UpdateDish(dish)).Verifiable();
            var dishController = new DishController(mealMock.Object);

            //Act

            var sut = dishController.Save(dish);

            //Assert
            sut.Should().BeOfType <RedirectToActionResult>().Which.ActionName.Should().Be("Index");
            sut.Should().BeAssignableTo <IActionResult>().And.BeOfType <RedirectToActionResult>()
            .Which.RouteValues.Should().NotBeNull().And.ContainValue(dish.Id);


            mealMock.Verify();
        }