public void BrowseToFoodLogEntryIndex()
        {
            var foodLogEntryList = new List <FoodLogEntry>()
            {
                new FoodLogEntry
                {
                    Id          = 12,
                    Description = "Donut"
                },
                new FoodLogEntry
                {
                    Id          = 13,
                    Description = "Apple"
                }
            };

            ///repository.GetAll().ToList()
            var foodLogRepoMock = new StubIFoodLogEntryRepository
            {
                GetAll = () => foodLogEntryList.AsQueryable()
            };

            var controller = new FoodLogEntriesController(foodLogRepoMock);
            var viewResult = controller.Index() as ViewResult;
            var vm         = viewResult.Model as List <FoodLogEntry>;

            // assert the view model returned is the list i just created
            Assert.AreEqual(2, vm.Count(), "View model should have 2 food items");
            Assert.AreEqual(12, vm.ElementAt(0).Id, "First element is wrong");
            Assert.AreEqual(13, vm.ElementAt(1).Id, "Second element is worng");
        }
        public void SaveNewFoodLogEntryTest()
        {
            FoodLogEntry savedFood    = null;
            bool         createCalled = false;
            var          fakeRepo     = new StubIFoodLogEntryRepository()
            {
                CreateFoodLogEntry = (food) =>
                {
                    savedFood    = food;
                    createCalled = true;
                }
            };

            var fakeFoodEntry = new FoodLogEntry
            {
                Id = 12
            };
            var controller = new FoodLogEntriesController(fakeRepo);

            var viewResult   = controller.Create(fakeFoodEntry) as RedirectToRouteResult;
            var redirectPage = viewResult.RouteValues["action"] as string;

            // assert that my create was called in my repo and that the save
            // object is correct
            Assert.IsTrue(createCalled);
            Assert.AreEqual(fakeFoodEntry, savedFood);
            Assert.AreEqual("Index", redirectPage);
        }
        public void DisplayFoodLogEntryWhenNullDetailsTest()
        {
            var foodLogRepoMock = new StubIFoodLogEntryRepository
            {
                GetNullableOfInt32 = (id) => null
            };

            var controller = new FoodLogEntriesController(foodLogRepoMock);
            var result     = controller.Details(32) as HttpNotFoundResult;

            // making sure not found happens when food log repo returns back null
            Assert.AreEqual(404, result.StatusCode);
        }
        public void DisplayFoodLogEntryDetailsTest()
        {
            var foodLogRepoMock = new StubIFoodLogEntryRepository
            {
                GetNullableOfInt32 = (id) => new FoodLogEntry
                {
                    Id          = (int)id,
                    Description = "Donut"
                }
            };

            var controller = new FoodLogEntriesController(foodLogRepoMock);
            var result     = controller.Details(32) as ViewResult;
            var viewModel  = result.Model as FoodLogEntry;

            Assert.AreEqual("Donut", viewModel.Description);
        }
        public void BrowseToCreatePageTest()
        {
            var controller = new FoodLogEntriesController(new StubIFoodLogEntryRepository());
            var viewResult = controller.Create() as ViewResult;
            var viewModel  = viewResult.Model as FoodLogEntry;

            // make sure model is correct
            Assert.AreEqual(1, viewModel.Quantity);
            Assert.AreEqual("Apple", viewModel.Description);
            Assert.AreEqual(Convert.ToDateTime("8/25/2105"), viewModel.MealTime);
            Assert.AreEqual(116, viewModel.Calories);
            Assert.AreEqual("fruit, snack", viewModel.Tags);
            Assert.AreEqual(Convert.ToDecimal("0.6"), viewModel.ProteinInGrams);
            Assert.AreEqual(Convert.ToDecimal("0.4"), viewModel.FatInGrams);
            Assert.AreEqual(Convert.ToDecimal("38.8"), viewModel.CarbohydratesInGrams);
            Assert.AreEqual(Convert.ToDecimal("2.0"), viewModel.SodiumInGrams);
        }
        public void SaveNewFoodLogEntryBadModelStateTest()
        {
            using (ShimsContext.Create())
            {
                ShimModelStateDictionary.AllInstances.IsValidGet = (self) => false;

                var foodLogEntry = new FoodLogEntry
                {
                    Id = 10
                };
                var controller = new FoodLogEntriesController(new StubIFoodLogEntryRepository());
                var viewResult = controller.Create(foodLogEntry) as ViewResult;
                var viewModel  = viewResult.Model as FoodLogEntry;

                Assert.AreEqual("", viewResult.ViewName);
                Assert.AreEqual(foodLogEntry, viewModel);
            }
        }