public void MealForTodayAddedToChildrenWhenAddedToRepository()
        {
            var dataRepositoryMock = new Mock<IDataRepository>();
             var data = new MockData();
             var allMeals = data.Meals();

             dataRepositoryMock.Setup( x => x.GetAllMealsForDate( DateTime.Now.Date ) ).Returns(
            new ReadOnlyCollection<Meal>( (from meal in allMeals
                                           where meal.DateAndTimeOfMeal.Date == DateTime.Now.Date
                                           select meal).ToList() ) );
             dataRepositoryMock.Setup( x => x.GetAllMealsForDate( DateTime.Now.Date.AddDays( MockData.DaysToAddForFutureMeals ) ) ).Returns(
            new ReadOnlyCollection<Meal>( (from meal in allMeals
                                           where meal.DateAndTimeOfMeal.Date == DateTime.Now.Date.AddDays( MockData.DaysToAddForFutureMeals )
                                           select meal).ToList() ) );

             var mealNodeViewModel = new MealNodeViewModel( dataRepositoryMock.Object, null );
             Assert.AreEqual( 3, mealNodeViewModel.Children.Count );

             var newMeal = new Meal(
            Guid.NewGuid(), new MealType( Guid.NewGuid(), "Doesn't Matter", "", DateTime.Now, false ), DateTime.Now, "Test Meal", "Just a test" );
             newMeal.FoodItemServings.Add( new Serving<FoodItem>( new FoodItem( Guid.NewGuid(), "test", "", 42 ), 1 ) );
             allMeals.Add( newMeal );
             dataRepositoryMock.Raise( e => e.ItemAdded += null, new RepositoryObjectEventArgs( newMeal ) );
             Assert.AreEqual( 4, mealNodeViewModel.Children.Count );

             foreach (ClickableTreeNodeViewModel node in mealNodeViewModel.Children)
             {
            Meal meal = allMeals.Find( m => m.ID == (Guid)node.Parameter );
            Assert.IsNotNull( meal );
            Assert.AreEqual( meal.Name, node.Name );
             }
        }
Beispiel #2
0
 public void MealDefault()
 {
     // Create a mealTemplate.  It should be invalid and empty with the exception of an ID.
      // Other tests handle making a valid object, so ignore that with this one.
      Meal meal = new Meal();
      Assert.IsFalse( meal.IsValid );
      Assert.IsNotNull( meal.ID );
      Assert.IsNull( meal.TypeOfMeal );
      Assert.AreEqual( meal.DateAndTimeOfMeal, default( DateTime ) );
      Assert.AreEqual( 0, meal.FoodItemServings.Count );
      Assert.AreEqual( 0, meal.FoodGroupServings.Count );
      Assert.AreEqual( 0, meal.Calories );
      Assert.AreEqual( Messages.Error_No_MealType, meal["TypeOfMeal"] );
      Assert.AreEqual( Messages.Error_No_MealTime, meal["TimeOfMeal"] );
      Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );
 }
Beispiel #3
0
        public void MealCopy()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             var dataRepository = new DataRepository( configurationMock.Object );

             DateTime theTime = DateTime.Now;
             Meal mealModel = new Meal(
            new Guid( "d88a6942-663d-4f6f-831d-ea9127ccc0e9" ),
            dataRepository.FindMealType( mt => mt.Name == "Lunch" ),
            theTime, "Lunch", null );

             mealModel.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Baby Carrots" ), 2.5M ) );
             mealModel.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Deluxe Bacon Cheese Burger" ), 1 ) );
             mealModel.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Glass of Skim Milk" ), 2 ) );

             Assert.IsTrue( mealModel.IsValid );

             Meal meal = new Meal( mealModel );
             Assert.IsNotNull( meal.ID );
             Assert.AreEqual( mealModel.ID, meal.ID );
             Assert.IsTrue( meal.IsValid );
             Assert.AreEqual( mealModel.TypeOfMeal, meal.TypeOfMeal );
             Assert.AreEqual( mealModel.DateAndTimeOfMeal, meal.DateAndTimeOfMeal );
             Assert.AreEqual( mealModel.Calories, meal.Calories );
             Assert.AreEqual( mealModel.FoodItemServings.Count, meal.FoodItemServings.Count );
             for (Int32 idx = 0; idx < mealModel.FoodItemServings.Count; idx++)
             {
            Assert.AreEqual( mealModel.FoodItemServings[idx].Quantity, meal.FoodItemServings[idx].Quantity );
            Assert.AreEqual( mealModel.FoodItemServings[idx].Entity, meal.FoodItemServings[idx].Entity );
             }
             Assert.AreEqual( mealModel.FoodGroupServings.Count, meal.FoodGroupServings.Count );
        }
Beispiel #4
0
 /// <summary>
 /// Creates a new meal using the passed in meal as a model.
 /// </summary>
 /// <param name="meal">The meal to use as a model</param>
 public Meal( Meal meal )
     : base(meal)
 {
 }
Beispiel #5
0
        public void MealIdTypeAndTime()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             var dataRepository = new DataRepository( configurationMock.Object );

             DateTime theTime = DateTime.Now;
             Meal meal = new Meal(
            new Guid( "d678325f-6bd0-4fae-8847-ebb07323b9bc" ),
            dataRepository.FindMealType( mt => mt.Name == "Lunch" ),
            theTime, "Lunch", null );

             // Should be invalid when instantiated since there is a lot of missing data
             Assert.IsFalse( meal.IsValid );
             Assert.IsNull( meal["TypeOfMeal"] );
             Assert.IsNull( meal["TimeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );
             Assert.AreEqual( new Guid( "d678325f-6bd0-4fae-8847-ebb07323b9bc" ), meal.ID );
             Assert.AreEqual( "Lunch", meal.TypeOfMeal.Name );
             Assert.ReferenceEquals( dataRepository.FindMealType( mt => mt.Name == "Lunch" ), meal.TypeOfMeal );
             Assert.AreEqual( theTime, meal.DateAndTimeOfMeal );
             Assert.AreEqual( 0, meal.FoodItemServings.Count );
             Assert.AreEqual( 0, meal.Calories );
             Assert.AreEqual( 0, meal.FoodGroupServings.Count );

             // Add missing data, show that it is now valid
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Baby Carrots" ), 2.5M ) );
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Deluxe Bacon Cheese Burger" ), 1 ) );
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Glass of Skim Milk" ), 2 ) );

             Assert.IsTrue( meal.IsValid );
             Assert.IsNull( meal["TypeOfMeal"] );
             Assert.IsNull( meal["TimeOfMeal"] );
             Assert.IsNull( meal["FoodItemServings"] );
             Assert.AreEqual( (2.5M * 40) + 650 + (2 * 90), meal.Calories );
             Assert.AreEqual( 4, meal.FoodGroupServings.Count );
             Assert.AreEqual( 3, meal.FoodGroupServings.Find( fg => fg.Entity.Name == "Vegetable" ).Quantity );
             Assert.AreEqual( 1, meal.FoodGroupServings.Find( fg => fg.Entity.Name == "Grain" ).Quantity );
             Assert.AreEqual( 1.5M, meal.FoodGroupServings.Find( fg => fg.Entity.Name == "Meat" ).Quantity );
             Assert.AreEqual( 5, meal.FoodGroupServings.Find( fg => fg.Entity.Name == "Dairy" ).Quantity );
        }
 public MealTemplate( Meal meal )
     : base(meal)
 {
 }
        public void AddingMealForDateToRepositoryUpdatesCaloriesAndFoodGroups()
        {
            PropertyChangedHandler propertyChangedHandler = new PropertyChangedHandler();

             var loggerMock = new Mock<ILoggerFacade>();
             var dataRepositoryMock = new Mock<IDataRepository>();
             var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var navigationServiceMock = new Mock<IRegionNavigationService>();

             var data = new MockData();
             var fullMealList = data.Meals();
             var todaysMeals = (from meal in fullMealList
                            where meal.DateAndTimeOfMeal.Date == DateTime.Today
                            select meal).ToList();
             dataRepositoryMock.Setup( x => x.GetAllMealsForDate( DateTime.Today ) ).Returns(
            new ReadOnlyCollection<Meal>( todaysMeals ) );

             var viewModel = new DailyLogViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );
             viewModel.CurrentDate = DateTime.Today;
             viewModel.PropertyChanged += propertyChangedHandler.OnPropertyChanged;

             Int32 originalFoodGroupCount = viewModel.FoodGroupServings.Count;
             Decimal originalFoodGroupServings = (from foodGroupServing in viewModel.FoodGroupServings
                                              select foodGroupServing.Quantity).Sum();
             Decimal originalCalories = viewModel.Calories;

             var foodGroupServings = viewModel.FoodGroupServings;
             Assert.AreEqual( 5, foodGroupServings.Count );
             var serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Fruit" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 2.5M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Starch" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 5.0M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Dairy" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 4.75M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Meat" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 2.5M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Vegetable" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 3.5M, serving.Quantity );

             var foodItem = new FoodItem( Guid.NewGuid(), "test", "", 42 );
             foodItem.FoodGroupsPerServing.Add( new Serving<FoodGroup>( new FoodGroup( Guid.NewGuid(), "Test1", "" ), 2 ) );
             foodItem.FoodGroupsPerServing.Add( new Serving<FoodGroup>( new FoodGroup( Guid.NewGuid(), "Test2", "" ), 1 ) );
             var newMeal = new Meal(
            Guid.NewGuid(), new MealType( Guid.NewGuid(), "Doesn't Matter", "", DateTime.Now, false ), DateTime.Now, "Test Meal", "Just a test" );
             newMeal.FoodItemServings.Add( new Serving<FoodItem>( foodItem, 1 ) );
             todaysMeals.Add( newMeal );
             dataRepositoryMock.Raise( e => e.ItemAdded += null, new RepositoryObjectEventArgs( newMeal ) );
             Assert.AreEqual( originalCalories + 42, viewModel.Calories );
             Assert.AreEqual( originalFoodGroupCount + 2, viewModel.FoodGroupServings.Count );
             Assert.AreEqual( originalFoodGroupServings + 3, (from foodGroupServing in viewModel.FoodGroupServings
                                                          select foodGroupServing.Quantity).Sum() );

             foodGroupServings = viewModel.FoodGroupServings;
             Assert.AreEqual( 7, foodGroupServings.Count );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Fruit" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 2.5M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Starch" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 5.0M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Dairy" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 4.75M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Meat" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 2.5M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Vegetable" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 3.5M, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Test1" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 2, serving.Quantity );
             serving = foodGroupServings.ToList().Find( x => x.Entity.Name == "Test2" );
             Assert.IsNotNull( serving );
             Assert.AreEqual( 1, serving.Quantity );

             Assert.AreEqual( 2, propertyChangedHandler.PropertiesChanged.Count );
             Assert.AreEqual( viewModel, propertyChangedHandler.Sender );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "Calories" ) );
             Assert.IsTrue( propertyChangedHandler.PropertiesChanged.Contains( "FoodGroupServings" ) );
        }
        public override void OnNavigatedTo( NavigationContext navigationContext )
        {
            if (Model == null)
             {
            String idParameter = navigationContext.Parameters["ID"];
            Guid myID;
            Meal meal = null;

            if (idParameter != null && Guid.TryParse( idParameter, out myID ))
            {
               meal = this.DataRepository.GetMeal( myID );
            }
            else
            {
               meal = new Meal();
               meal.DateAndTimeOfMeal = DateTime.Now;
            }
            Model = meal;

            base.OnNavigatedTo( navigationContext );
             }
        }
        public void SaveNotCalledForNonChangedMeal()
        {
            var dataRepositoryMock = new Mock<IDataRepository>();

             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "Meal Type", "", DateTime.Now, false ), DateTime.Now, "Meal", "Test Meal" );
             meal.FoodItemServings.Add( new Serving<FoodItem>( new FoodItem( Guid.NewGuid(), "Test Item", "", 420 ), 1 ) );

             dataRepositoryMock.Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );
             dataRepositoryMock.Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );
             dataRepositoryMock.Setup( x => x.Contains( It.IsAny<Meal>() ) ).Returns( true );

             var mealViewModel = CreateViewModelForMeal( new Meal( meal ), dataRepositoryMock );

             Assert.IsTrue( mealViewModel.IsValid );
             Assert.IsFalse( mealViewModel.IsDirty );
             Assert.IsFalse( mealViewModel.IsNew );

             mealViewModel.SaveCommand.Execute( null );

             dataRepositoryMock.Verify( x => x.SaveItem( It.IsAny<Meal>() ), Times.Never() );
        }
        public void DeleteMeal()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             var dataRepository = new HealthTracker.DataRepository.Services.DataRepository( configurationMock.Object );

             // Make a deep copy of a meal
             var chzBurgerMealID = new Guid( "FEB4A1B2-796F-11E0-BB69-31B74724019B" );
             var chzBurgerMeal = new Meal();
             chzBurgerMeal.InitializeData( dataRepository.FindMeal( m => m.ID == chzBurgerMealID ) );
             Assert.IsNotNull( chzBurgerMeal );

             // Delete the meal.  Show that the meal has been deleted, but none of the
             // other data repository items have not been effected.
             Int32 origFoodGroupCount = dataRepository.GetAllFoodGroups().Count;
             Int32 origFoodItemCount = dataRepository.GetAllFoodItems().Count;
             Int32 origMealTypeCount = dataRepository.GetAllMealTypes().Count;
             Int32 origMealTemplateCount = dataRepository.GetAllMealTemplates().Count;
             Int32 origMealCount = dataRepository.GetAllMeals().Count;
             dataRepository.Remove( chzBurgerMeal );
             Assert.AreEqual( origFoodGroupCount, dataRepository.GetAllFoodGroups().Count );
             Assert.AreEqual( origFoodItemCount, dataRepository.GetAllFoodItems().Count );
             Assert.AreEqual( origMealTypeCount, dataRepository.GetAllMealTypes().Count );
             Assert.AreEqual( origMealTemplateCount, dataRepository.GetAllMealTemplates().Count );
             Assert.AreEqual( origMealCount - 1, dataRepository.GetAllMeals().Count );
             Assert.IsNotNull( chzBurgerMeal.ID );
             Assert.IsNull( dataRepository.FindMealTemplate( mt => mt.ID == chzBurgerMeal.ID ) );
        }
        public void SaveMeal()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             HealthTracker.DataRepository.Services.DataRepository dataRepository = new HealthTracker.DataRepository.Services.DataRepository( configurationMock.Object );

             // Get some food items that we can use for the new meal.
             FoodItem fruitSalad = dataRepository.FindFoodItem( f => f.ID == FullTestData.FruitSaladID );
             FoodItem glassOfMilk = dataRepository.FindFoodItem( f => f.ID == FullTestData.GlassOfMilkID );
             FoodItem glassOfWater = dataRepository.FindFoodItem( f => f.ID == FullTestData.GlassOfWaterID );

             MealType breakfast = dataRepository.FindMealType( f => f.ID == FullTestData.BreakfastID );

             // Create one new meal, and get a deep copy of one out of the repository.
             // When the new one is saved, a meal should be added to the repository.
             // When the deep copy of the existing one is modified, the modifications should not be applied to the repository
             // until the copy is saved, at which time a new meal should not be created, but the meal object with the same
             // ID should have the modifications applied to it.
             Guid breakfastMealID = new Guid( "12ed06f0-2251-44c3-bced-b656e6fbe558" );
             Guid lunchMealID = new Guid( "53edb94e-3b15-497e-9907-34de41c9bc8d" );
             Meal fruitBreakfast = new Meal( breakfastMealID, breakfast, DateTime.Now, "Fruit Breakfast", "Fruit Salad and some milk" );
             fruitBreakfast.FoodItemServings.Add( new Serving<FoodItem>( fruitSalad, 1 ) );
             fruitBreakfast.FoodItemServings.Add( new Serving<FoodItem>( glassOfMilk, 1 ) );
             Assert.IsTrue( fruitBreakfast.IsValid );

             Meal repositoryChzBurgerLunch = dataRepository.FindMeal( m => m.ID == lunchMealID );
             Assert.IsNotNull( repositoryChzBurgerLunch );
             Meal chzBurgerLunch = new Meal();
             chzBurgerLunch.InitializeData( repositoryChzBurgerLunch );
             Int32 origMealCount = dataRepository.GetAllMeals().Count;

             // Verifiy the copies are the same
             Assert.AreEqual( repositoryChzBurgerLunch.ID, chzBurgerLunch.ID );
             Assert.AreEqual( repositoryChzBurgerLunch.Name, chzBurgerLunch.Name );
             Assert.AreEqual( repositoryChzBurgerLunch.Description, chzBurgerLunch.Description );
             Assert.AreEqual( repositoryChzBurgerLunch.Calories, chzBurgerLunch.Calories );
             Assert.AreEqual( repositoryChzBurgerLunch.FoodItemServings.Count, chzBurgerLunch.FoodItemServings.Count );

             // Replace the glasses of milk with a glass of water, and only have one burger
             chzBurgerLunch.FoodItemServings.Remove( chzBurgerLunch.FoodItemServings.Find( f => f.Entity.ID == FullTestData.GlassOfMilkID ) );
             chzBurgerLunch.FoodItemServings.Add( new Serving<FoodItem>( glassOfWater, 1.5M ) );
             chzBurgerLunch.FoodItemServings.Find( f => f.Entity.ID == FullTestData.CheeseBurgerID ).Quantity = 1;
             chzBurgerLunch.Description = "A typical cheese burger lunch, made a bit healthier";

             repositoryChzBurgerLunch = dataRepository.FindMeal( m => m.ID == lunchMealID );
             Assert.AreEqual( repositoryChzBurgerLunch.ID, chzBurgerLunch.ID );
             Assert.AreEqual( repositoryChzBurgerLunch.Name, chzBurgerLunch.Name );
             Assert.AreNotEqual( repositoryChzBurgerLunch.Description, chzBurgerLunch.Description );
             Assert.AreNotEqual( repositoryChzBurgerLunch.Calories, chzBurgerLunch.Calories );

             // Save the changes and verify the changes were saved
             dataRepository.SaveItem( chzBurgerLunch );
             repositoryChzBurgerLunch = dataRepository.FindMeal( m => m.ID == lunchMealID );
             Assert.AreEqual( chzBurgerLunch.Name, repositoryChzBurgerLunch.Name );
             Assert.AreEqual( chzBurgerLunch.Description, repositoryChzBurgerLunch.Description );
             Assert.AreEqual( chzBurgerLunch.FoodItemServings.Count, repositoryChzBurgerLunch.FoodItemServings.Count );
             Assert.AreEqual( chzBurgerLunch.Calories, repositoryChzBurgerLunch.Calories );
             Assert.AreEqual( origMealCount, dataRepository.GetAllMeals().Count );

             // Save the breakfast
             dataRepository.SaveItem( fruitBreakfast );
             Assert.AreEqual( origMealCount + 1, dataRepository.GetAllMeals().Count );
             var repositoryFruitBreakfast = dataRepository.FindMeal( f => f.ID == breakfastMealID );
             Assert.IsNotNull( repositoryFruitBreakfast );
             Assert.AreEqual( fruitBreakfast.ID, repositoryFruitBreakfast.ID );
             Assert.AreEqual( fruitBreakfast.Name, repositoryFruitBreakfast.Name );
             Assert.AreEqual( fruitBreakfast.Description, repositoryFruitBreakfast.Description );
             Assert.AreEqual( fruitBreakfast.FoodItemServings.Count, repositoryFruitBreakfast.FoodItemServings.Count );
             Assert.AreEqual( fruitBreakfast.Calories, repositoryFruitBreakfast.Calories );
        }
        // This is really, really ugly.  It works, but it is not pretty.  Look into changing this.
        private void LoadRepository( String dataFileName )
        {
            XDocument xmlDoc;

             using (FileStream stream = new FileStream( dataFileName, FileMode.Open ))
             {
            using (XmlReader xmlRdr = new XmlTextReader( stream ))
            {
               xmlDoc = XDocument.Load( xmlRdr );

               // If we don't have the root element
               if (xmlDoc.Element( rootNodeTag ) == null)
               {
                  _foodGroups = new List<FoodGroup>();
                  _foodItems = new List<FoodItem>();
                  _mealTypes = new List<MealType>();
                  _mealTemplates = new List<MealTemplate>();
                  _meals = new List<Meal>();
               }
               else
               {
                  if (xmlDoc.Element( rootNodeTag ).Element( foodGroupsNodeTag ) != null)
                  {
                     _foodGroups =
                        (from foodGroupElement in xmlDoc.Element( rootNodeTag ).Element( foodGroupsNodeTag ).Elements( foodGroupNodeTag )
                         select new FoodGroup(
                            (Guid)foodGroupElement.Attribute( idAttribute ),
                            (String)foodGroupElement.Attribute( nameAttribute ),
                            foodGroupElement.Element( descriptionNodeTag ) == null ? null :
                            (String)foodGroupElement.Element( descriptionNodeTag ).Value )).ToList();
                  }
                  else
                  {
                     _foodGroups = new List<FoodGroup>();
                  }

                  // FoodItems
                  _foodItems = new List<FoodItem>();
                  if (xmlDoc.Element( rootNodeTag ).Element( foodItemsNodeTag ) != null)
                  {
                     foreach (XElement foodItemElement in xmlDoc.Element( rootNodeTag ).Element( foodItemsNodeTag ).Elements( foodItemNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        FoodItem foodItem = new FoodItem( (Guid)foodItemElement.Attribute( idAttribute ),
                           (String)foodItemElement.Attribute( nameAttribute ),
                           foodItemElement.Element( descriptionNodeTag ) == null ? null :
                           (String)foodItemElement.Element( descriptionNodeTag ).Value,
                           (Decimal)foodItemElement.Attribute( caloriesAttribute ) ); // TODO: Should probably do a tryparse on that...
                        _foodItems.Add( foodItem );

                        // Loop through the FoodGroupServings to build that list
                        if (foodItemElement.Element( foodGroupServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in foodItemElement.Element( foodGroupServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodGroup> foodGroupServing = new Serving<FoodGroup>(
                                 _foodGroups.Find( fg => fg.ID == (Guid)servingElement.Attribute( foodGroupIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              foodItem.FoodGroupsPerServing.Add( foodGroupServing );
                           }
                        }
                     }
                  }

                  if (xmlDoc.Element( rootNodeTag ).Element( mealTypesNodeTag ) != null)
                  {
                     _mealTypes =
                        (from mealTypeElement in xmlDoc.Element( rootNodeTag ).Element( mealTypesNodeTag ).Elements( mealTypeNodeTag )
                         select new MealType(
                            (Guid)mealTypeElement.Attribute( idAttribute ),
                            (String)mealTypeElement.Attribute( nameAttribute ),
                            mealTypeElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealTypeElement.Element( descriptionNodeTag ).Value,
                            (DateTime)mealTypeElement.Attribute( dateTimeAttribute ),
                            (Boolean)mealTypeElement.Attribute( useDefaultDateTimeAttribute ) )).ToList();
                  }
                  else
                  {
                     _mealTypes = new List<MealType>();
                  }

                  // Meal Templates
                  _mealTemplates = new List<MealTemplate>();
                  if (xmlDoc.Element( rootNodeTag ).Element( mealTemplatesNodeTag ) != null)
                  {
                     foreach (XElement mealTemplateElement in xmlDoc.Element( rootNodeTag ).Element( mealTemplatesNodeTag ).Elements( mealNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        MealTemplate mealTemplate = new MealTemplate(
                           (Guid)mealTemplateElement.Attribute( idAttribute ),
                           _mealTypes.Find( mt => mt.ID == (Guid)mealTemplateElement.Attribute( mealTypeIdAttribute ) ),
                           (DateTime)mealTemplateElement.Attribute( dateTimeAttribute ),
                           (String)mealTemplateElement.Attribute( nameAttribute ),
                            mealTemplateElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealTemplateElement.Element( descriptionNodeTag ).Value );
                        _mealTemplates.Add( mealTemplate );

                        // Loop through the FoodItemServings to build that list
                        if (mealTemplateElement.Element( foodItemServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in mealTemplateElement.Element( foodItemServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodItem> foodItem = new Serving<FoodItem>(
                                 _foodItems.Find( fi => fi.ID == (Guid)servingElement.Attribute( foodItemIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              mealTemplate.FoodItemServings.Add( foodItem );
                           }
                        }
                     }
                  }

                  // Meals
                  _meals = new List<Meal>();
                  if (xmlDoc.Element( rootNodeTag ).Element( mealsNodeTag ) != null)
                  {
                     foreach (XElement mealElement in xmlDoc.Element( rootNodeTag ).Element( mealsNodeTag ).Elements( mealNodeTag ))
                     {
                        // Construct a food item and add it to the collection
                        var meal = new Meal(
                           (Guid)mealElement.Attribute( idAttribute ),
                           _mealTypes.Find( mt => mt.ID == (Guid)mealElement.Attribute( mealTypeIdAttribute ) ),
                           (DateTime)mealElement.Attribute( dateTimeAttribute ),
                           (String)mealElement.Attribute( nameAttribute ),
                            mealElement.Element( descriptionNodeTag ) == null ? null :
                            (String)mealElement.Element( descriptionNodeTag ).Value );
                        _meals.Add( meal );

                        // Loop through the FoodItemServings to build that list
                        if (mealElement.Element( foodItemServingsNodeTag ) != null)
                        {
                           foreach (XElement servingElement in mealElement.Element( foodItemServingsNodeTag ).Elements( servingNodeTag ))
                           {
                              Serving<FoodItem> foodItem = new Serving<FoodItem>(
                                 _foodItems.Find( fi => fi.ID == (Guid)servingElement.Attribute( foodItemIdAttribute ) ),
                                 (Decimal)servingElement.Attribute( quantityAttribute ) );
                              meal.FoodItemServings.Add( foodItem );
                           }
                        }
                     }
                  }
               }
            }
             }
        }
        public void SaveItem( Meal meal )
        {
            if (meal == null)
             {
            throw new ArgumentNullException( "meal" );
             }

             if (!Contains( meal ))
             {
            _meals.Add( new Meal( meal ) );
            if (ItemAdded != null)
            {
               ItemAdded( this, new RepositoryObjectEventArgs( meal ) );
            }
             }
             else
             {
            var repositoryMeal = _meals.Find( m => m.ID == meal.ID );
            Debug.Assert( repositoryMeal != null );
            repositoryMeal.InitializeData( meal );
            if (ItemModified != null)
            {
               ItemModified( this, new RepositoryObjectEventArgs( meal ) );
            }
             }

             this.SaveRepository();
        }
        public void Remove( Meal meal )
        {
            Debug.Assert( meal != null );

             if (Contains( meal ))
             {
            _meals.Remove( _meals.Find( mt => mt.ID == meal.ID ) );
            if (ItemDeleted != null)
            {
               ItemDeleted( this, new RepositoryObjectEventArgs( meal ) );
            }

            SaveRepository();
             }
        }
 /// <summary>
 /// Determine if the repository contains the given mealTemplate
 /// </summary>
 /// <param name="mealTemplate">The mealTemplate to look for</param>
 /// <returns>True of the mealTemplate is in the repository, false otherwise</returns>
 public Boolean Contains( Meal meal )
 {
     return (_meals.Find( item => item.ID == meal.ID ) != null);
 }
        public void IsNavigationTargetTrueWhenIDMatches()
        {
            var loggerMock = new Mock<ILoggerFacade>();
             var regionNavigationServiceMock = new Mock<IRegionNavigationService>();
             var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var dataRepositoryMock = new Mock<IDataRepository>();

             dataRepositoryMock
            .Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );
             dataRepositoryMock
            .Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );

             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "Test", "", DateTime.Now, false ), DateTime.Now, "Test", "This is a test meal" );
             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );

             var viewModel =
            new MealViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );

             var query = new UriQuery();
             query.Add( "ID", meal.ID.ToString() );
             var navigationContext =
            new NavigationContext( regionNavigationServiceMock.Object, new Uri( "MealView" + query.ToString(), UriKind.Relative ) );
             viewModel.OnNavigatedTo( navigationContext );

             Assert.IsTrue( viewModel.IsNavigationTarget( navigationContext ) );
        }
        public void NavigateToNewMealCreatesEmptyMeal()
        {
            var loggerMock = new Mock<ILoggerFacade>();
             var regionNavigationServiceMock = new Mock<IRegionNavigationService>();
             var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var dataRepositoryMock = new Mock<IDataRepository>();

             dataRepositoryMock
            .Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );
             dataRepositoryMock
            .Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );

             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "Test", "", DateTime.Now, false ), DateTime.Now, "Test", "This is a test meal" );
             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );

             var viewModel =
            new MealViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );

             var navigationContext =
            new NavigationContext( regionNavigationServiceMock.Object, new Uri( "MealView", UriKind.Relative ) );
             viewModel.OnNavigatedTo( navigationContext );
             Assert.AreNotEqual( meal.ID, viewModel.ID );
             Assert.IsNull( viewModel.Name );
             Assert.IsNull( viewModel.Description );
             Assert.AreEqual( 0, viewModel.FoodItemServings.Count );
             Assert.IsFalse( viewModel.IsDirty );
        }
        public void UndoRedoMealViewModel()
        {
            // Create a meal and then navigate to it to bring it into the view model
             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "Test", "", DateTime.Now, false ), DateTime.Now, "Bob", "Battery Operated Buddy" );
             var glassOfWater = new FoodItem( Guid.NewGuid(), "Glass of Water", "", 0 );
             glassOfWater.FoodGroupsPerServing.Add( new Serving<FoodGroup>( new FoodGroup( Guid.NewGuid(), "Water", "" ), 1 ) );
             meal.FoodItemServings.Add( new Serving<FoodItem>( glassOfWater, 1.0M ) );

             var mealViewModel = CreateViewModelForMeal( meal );

             Assert.IsFalse( mealViewModel.IsDirty );
             Assert.IsFalse( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );

             // Make changes as such:
             //   o name changed from Bob to Pete
             //   o name changed from Pete to Peter
             //   o Description changed from "Battery Operated Buddy" to "The Rock"
             //   o name changed from Peter to Simon
             //   o name changed from Simon to Saul
             //   o description changed from "The Rock" to "The Persecutor"
             //   o description changed from "The Persecutor" to "The Apostle"
             //   o name changed from Saul to Paul
             // Verify can undo, cannot redo at each step
             mealViewModel.Name = "Pete";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Name += "r";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Description = "The Rock";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Name = "Simon";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Name = "Saul";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Description = "The Persecutor";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Description = "The Apostle";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.Name = "Paul";
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );

             Assert.AreEqual( "Paul", mealViewModel.Name );
             Assert.AreEqual( "The Apostle", mealViewModel.Description );

             // Undo once.  Verify last thing done is undone, and we can redo.
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Apostle", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );

             // Redo.  Verify last thing undone is redone, can no longer redo, can still undo.
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Paul", mealViewModel.Name );
             Assert.AreEqual( "The Apostle", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsFalse( mealViewModel.RedoCommand.CanExecute( null ) );

             // Undo 4 times, verify undo worked
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Apostle", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Persecutor", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Simon", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );

             // Redo 2 times, verify
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Persecutor", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );

             // Undo 6 times.  Back to original, cannot undo, can redo
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Saul", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Simon", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Peter", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Peter", mealViewModel.Name );
             Assert.AreEqual( "Battery Operated Buddy", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Pete", mealViewModel.Name );
             Assert.AreEqual( "Battery Operated Buddy", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.UndoCommand.Execute( null );
             Assert.AreEqual( "Bob", mealViewModel.Name );
             Assert.AreEqual( "Battery Operated Buddy", mealViewModel.Description );
             Assert.IsFalse( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );

             // Redo 3 times, verify
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Pete", mealViewModel.Name );
             Assert.AreEqual( "Battery Operated Buddy", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Peter", mealViewModel.Name );
             Assert.AreEqual( "Battery Operated Buddy", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
             mealViewModel.RedoCommand.Execute( null );
             Assert.AreEqual( "Peter", mealViewModel.Name );
             Assert.AreEqual( "The Rock", mealViewModel.Description );
             Assert.IsTrue( mealViewModel.UndoCommand.CanExecute( null ) );
             Assert.IsTrue( mealViewModel.RedoCommand.CanExecute( null ) );
        }
        public void TimeOfMealForExistingMealResetBasedOnMealTypeIfTimeNeverManuallySet()
        {
            double mealHour = 12.5;
             var mealType = new MealType( Guid.NewGuid(), "test", "test", DateTime.Today.AddDays( -42 ).AddHours( mealHour ), true );
             var meal = new Meal( Guid.NewGuid(), mealType, DateTime.Today.AddHours( mealHour ), "test", "test" );
             var viewModel = CreateViewModelForMeal( new Meal( meal ) );

             viewModel.TypeOfMeal = new MealType( Guid.NewGuid(), "Another Test", "d00d", DateTime.Today.AddDays( -345 ).AddHours( mealHour + 2.0 ), true );

             Assert.AreEqual( DateTime.Today.AddHours( mealHour + 2.0 ), viewModel.TimeOfMeal );
        }
        private MealViewModel CreateViewModelForMeal(
         Meal meal, Mock<IDataRepository> dataRepositoryMock, Mock<IRegionManager> regionManagerMock, Mock<IInteractionService> interactionServiceMock )
        {
            var loggerMock = new Mock<ILoggerFacade>();
             var regionNavigationServiceMock = new Mock<IRegionNavigationService>();

             var viewModel =
            new MealViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );

             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );

             var navigationContext = new NavigationContext(
            regionNavigationServiceMock.Object, new Uri( "MealView?ID=" + meal.ID.ToString(), UriKind.Relative ) );
             viewModel.OnNavigatedTo( navigationContext );

             return viewModel;
        }
        public void AddingMealForOtherDateToRepositoryDoesNotUpdateCaloriesAndFoodGroups()
        {
            PropertyChangedHandler propertyChangedHandler = new PropertyChangedHandler();

             var loggerMock = new Mock<ILoggerFacade>();
             var dataRepositoryMock = new Mock<IDataRepository>();
             var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var navigationServiceMock = new Mock<IRegionNavigationService>();

             var data = new MockData();
             var fullMealList = data.Meals();
             var todaysMeals = (from meal in fullMealList
                            where meal.DateAndTimeOfMeal.Date == DateTime.Today
                            select meal).ToList();
             dataRepositoryMock.Setup( x => x.GetAllMealsForDate( DateTime.Today ) ).Returns(
            new ReadOnlyCollection<Meal>( todaysMeals ) );

             var viewModel = new DailyLogViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );
             viewModel.CurrentDate = DateTime.Today;
             viewModel.PropertyChanged += propertyChangedHandler.OnPropertyChanged;

             Int32 originalFoodGroupCount = viewModel.FoodGroupServings.Count;
             Decimal originalFoodGroupServings = (from foodGroupServing in viewModel.FoodGroupServings
                                              select foodGroupServing.Quantity).Sum();
             Decimal originalCalories = viewModel.Calories;

             var foodItem = new FoodItem( Guid.NewGuid(), "test", "", 42 );
             foodItem.FoodGroupsPerServing.Add( new Serving<FoodGroup>( new FoodGroup( Guid.NewGuid(), "Test1", "" ), 2 ) );
             foodItem.FoodGroupsPerServing.Add( new Serving<FoodGroup>( new FoodGroup( Guid.NewGuid(), "Test2", "" ), 1 ) );
             var newMeal = new Meal(
            Guid.NewGuid(), new MealType( Guid.NewGuid(), "Doesn't Matter", "", DateTime.Now, false ), DateTime.Now.AddDays( 1 ), "Test Meal", "Just a test" );
             newMeal.FoodItemServings.Add( new Serving<FoodItem>( foodItem, 1 ) );
             dataRepositoryMock.Raise( e => e.ItemAdded += null, new RepositoryObjectEventArgs( newMeal ) );
             Assert.AreEqual( originalCalories, viewModel.Calories );
             Assert.AreEqual( originalFoodGroupCount, viewModel.FoodGroupServings.Count );
             Assert.AreEqual( originalFoodGroupServings, (from foodGroupServing in viewModel.FoodGroupServings
                                                      select foodGroupServing.Quantity).Sum() );

             Assert.AreEqual( 0, propertyChangedHandler.PropertiesChanged.Count );
        }
        private MealViewModel CreateViewModelForMeal( Meal meal, Mock<IDataRepository> dataRepositoryMock )
        {
            var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();

             return CreateViewModelForMeal( meal, dataRepositoryMock, regionManagerMock, interactionServiceMock );
        }
        public void ModifyingMealNotOnDateDoesNotUpdateCaloriesAndFoodGroups()
        {
            PropertyChangedHandler propertyChangedHandler = new PropertyChangedHandler();

             var loggerMock = new Mock<ILoggerFacade>();
             var dataRepositoryMock = new Mock<IDataRepository>();
             var regionManagerMock = new Mock<IRegionManager>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var navigationServiceMock = new Mock<IRegionNavigationService>();

             var data = new MockData();
             var fullMealList = data.Meals();
             var todaysMeals = (from meal in fullMealList
                            where meal.DateAndTimeOfMeal.Date == DateTime.Today
                            select meal).ToList();
             dataRepositoryMock.Setup( x => x.GetAllMealsForDate( DateTime.Today ) )
            .Returns( new ReadOnlyCollection<Meal>( todaysMeals ) );

             var viewModel = new DailyLogViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );
             viewModel.CurrentDate = DateTime.Today;
             viewModel.PropertyChanged += propertyChangedHandler.OnPropertyChanged;

             Decimal originalFoodGroupServings = (from foodGroupServing in viewModel.FoodGroupServings
                                              select foodGroupServing.Quantity).Sum();
             Decimal originalCalories = viewModel.Calories;

             var mealToModify = new Meal( fullMealList.Find( x => x.TypeOfMeal.Name == "Breakfast" && x.DateAndTimeOfMeal.Date != DateTime.Today ) );
             Assert.IsNotNull( mealToModify );
             mealToModify.FoodItemServings.Remove( mealToModify.FoodItemServings.Find( x => x.Entity.Name == "Orange Juice" ) );
             dataRepositoryMock.Raise( x => x.ItemModified += null, new RepositoryObjectEventArgs( mealToModify ) );

             Assert.AreEqual( originalFoodGroupServings,
                          (from foodGroupServing in viewModel.FoodGroupServings
                           select foodGroupServing.Quantity).Sum() );
             Assert.AreEqual( originalCalories, viewModel.Calories );

             Assert.AreEqual( 0, propertyChangedHandler.PropertiesChanged.Count );
        }
        private MealViewModel CreateViewModelForMeal( Meal meal )
        {
            var dataRepositoryMock = new Mock<IDataRepository>();

             dataRepositoryMock.Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );
             dataRepositoryMock.Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );

             return CreateViewModelForMeal( meal, dataRepositoryMock );
        }
Beispiel #25
0
        public void MealValidationTest()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             var dataRepository = new DataRepository( configurationMock.Object );

             DateTime theTime = DateTime.Now;
             Meal meal = new Meal( Guid.NewGuid(), default( MealType ), default( DateTime ), null, null );

             Assert.IsFalse( meal.IsValid );
             Assert.IsNull( meal["ID"] );
             Assert.AreEqual( Messages.Error_No_Name, meal["Name"] );
             Assert.AreEqual( Messages.Error_No_MealType, meal["TypeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_MealTime, meal["TimeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );

             // Add a name
             meal.Name = "A nice little lunch";
             Assert.IsNull( meal["ID"] );
             Assert.IsNull( meal["Name"] );
             Assert.AreEqual( Messages.Error_No_MealType, meal["TypeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_MealTime, meal["TimeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );

             // Add a valid mealTemplate type
             meal.TypeOfMeal = dataRepository.FindMealType( mt => mt.Name == "Lunch" );
             Assert.IsFalse( meal.IsValid );
             Assert.IsNull( meal["ID"] );
             Assert.IsNull( meal["Name"] );
             Assert.IsNull( meal["TypeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_MealTime, meal["TimeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );

             // Add a valid time for the mealTemplate
             meal.DateAndTimeOfMeal = theTime;
             Assert.IsFalse( meal.IsValid );
             Assert.IsNull( meal["ID"] );
             Assert.IsNull( meal["Name"] );
             Assert.IsNull( meal["TypeOfMeal"] );
             Assert.IsNull( meal["TimeOfMeal"] );
             Assert.AreEqual( Messages.Error_No_FoodItems, meal["FoodItemServings"] );

             // Add a food item serving
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Baby Carrots" ), 2.5M ) );
             Assert.IsTrue( meal.IsValid );
             Assert.IsNull( meal["ID"] );
             Assert.IsNull( meal["Name"] );
             Assert.IsNull( meal["TypeOfMeal"] );
             Assert.IsNull( meal["TimeOfMeal"] );
             Assert.IsNull( meal["FoodItemServings"] );
        }
        /// <summary>
        /// Close test meal.  All of the close tests follow this based pattern, so they all call this rather than repeating everything
        /// </summary>
        private void RunCloseTest( Boolean makeDirty, Boolean makeInvalid, MessageBoxResult messageResponse, Boolean expectRemove, Boolean expectSave )
        {
            var loggerMock = new Mock<ILoggerFacade>();
             Mock<IDataRepository> dataRepositoryMock = new Mock<IDataRepository>();
             Mock<IRegionNavigationService> regionNavigationServiceMock = new Mock<IRegionNavigationService>();
             Mock<IRegionManager> regionManagerMock = new Mock<IRegionManager>();
             Mock<IRegion> regionWithoutViewMock = new Mock<IRegion>();
             Mock<IRegion> regionMock = new Mock<IRegion>();
             Mock<IInteractionService> interactionServiceMock = new Mock<IInteractionService>();

             // Set up the food group list in the data repository mock.
             FoodGroup testFoodGroup = new FoodGroup( Guid.NewGuid(), "test", "The only food group in the mock data repository" );
             List<FoodGroup> foodGroups = new List<FoodGroup>();
             foodGroups.Add( testFoodGroup );
             dataRepositoryMock.Setup( x => x.GetAllFoodGroups() ).Returns( new ReadOnlyCollection<FoodGroup>( foodGroups ) );
             FoodItem testFoodItem = new FoodItem( Guid.NewGuid(), "Test Food Item", "Test Food Item Description", 42.0M );
             testFoodItem.FoodGroupsPerServing.Add( new Serving<FoodGroup>( testFoodGroup, 5.0M ) );
             Assert.IsTrue( testFoodItem.IsValid );
             List<FoodItem> foodItems = new List<FoodItem>();
             foodItems.Add( testFoodItem );
             dataRepositoryMock.Setup( x => x.GetAllFoodItems() ).Returns( new ReadOnlyCollection<FoodItem>( foodItems ) );
             MealType testMealType = new MealType( Guid.NewGuid(), "Lunch", "A lunch for testing", DateTime.Now, false );
             Assert.IsTrue( testMealType.IsValid );
             List<MealType> mealTypes = new List<MealType>();
             mealTypes.Add( testMealType );
             dataRepositoryMock.Setup( x => x.GetAllMealTypes() ).Returns( new ReadOnlyCollection<MealType>( mealTypes ) );

             var meal = new Meal( Guid.NewGuid(), testMealType, DateTime.Now, "test meal", "This is a test" );
             meal.FoodItemServings.Add( new Serving<FoodItem>( testFoodItem, 1.5M ) );

             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );
             dataRepositoryMock.Setup( x => x.Contains( meal ) ).Returns( true );

             // Create the view model under test and associate it with a view
             var viewModel = new MealViewModel( dataRepositoryMock.Object, regionManagerMock.Object, interactionServiceMock.Object, loggerMock.Object );
             UserControl view = new UserControl();
             view.DataContext = viewModel;

             // Set up two regions each with their own set of views.
             List<UserControl> views = new List<UserControl>();
             views.Add( new UserControl() );
             views.Add( view );
             views.Add( new UserControl() );
             views.Add( new UserControl() );

             List<UserControl> viewsWithoutView = new List<UserControl>();
             viewsWithoutView.Add( new UserControl() );
             viewsWithoutView.Add( new UserControl() );

             List<IRegion> regions = new List<IRegion>();
             regions.Add( regionMock.Object );

             regionManagerMock.Setup( x => x.Regions.GetEnumerator() ).Returns( regions.GetEnumerator() );
             regionWithoutViewMock.Setup( x => x.Views.GetEnumerator() ).Returns( viewsWithoutView.GetEnumerator() );
             regionMock.Setup( x => x.Views.GetEnumerator() ).Returns( views.GetEnumerator() );

             // Navigate to the view that "displays" our food foodGroup.  This loads the view model
             NavigationContext navigationContext =
            new NavigationContext( regionNavigationServiceMock.Object, new Uri( "MealView?ID=" + meal.ID.ToString(), UriKind.Relative ) );
             viewModel.OnNavigatedTo( navigationContext );

             if (makeDirty)
             {
            if (makeInvalid)
            {
               interactionServiceMock
                  .Setup( x => x.ShowMessageBox( Messages.Question_Meal_Close, DisplayStrings.CloseCaption, MessageBoxButton.YesNo, MessageBoxImage.Question ) )
                  .Returns( messageResponse );
               viewModel.Name = "";
               Assert.IsTrue( viewModel.IsDirty );
               Assert.IsFalse( viewModel.IsValid );
            }
            else
            {
               interactionServiceMock
                  .Setup( x => x.ShowMessageBox( Messages.Question_Meal_Save, DisplayStrings.SaveChangesCaption, MessageBoxButton.YesNoCancel, MessageBoxImage.Question ) )
                  .Returns( messageResponse );
               viewModel.Name = "Something Else";
               Assert.IsTrue( viewModel.IsDirty );
               Assert.IsTrue( viewModel.IsValid );
            }
             }
             else
             {
            // This will fail if we have passed in the non-sensical makeDirty == false, makeInvalid == true
            Assert.AreEqual( makeDirty, viewModel.IsDirty );
             }

             // Attempt a close.
             viewModel.CloseCommand.Execute( null );

             // If we were dirty, then we need to verify that the correct interaction was done, otherwise, that no interaction was done
             if (makeDirty)
             {
            interactionServiceMock.VerifyAll();
             }
             else
             {
            interactionServiceMock.Verify(
               x => x.ShowMessageBox( It.IsAny<String>(), It.IsAny<String>(), It.IsAny<MessageBoxButton>(), It.IsAny<MessageBoxImage>() ), Times.Never() );
             }

             if (expectRemove)
             {
            regionMock.Verify( x => x.Remove( view ), Times.Exactly( 1 ) );
            regionMock.Verify( x => x.Remove( It.IsAny<UserControl>() ), Times.Exactly( 1 ) );
             }
             else
             {
            regionMock.Verify( x => x.Remove( It.IsAny<UserControl>() ), Times.Never() );
             }

             if (expectSave)
             {
            dataRepositoryMock.Verify( x => x.SaveItem( meal ), Times.Exactly( 1 ) );
            dataRepositoryMock.Verify( x => x.SaveItem( It.IsAny<Meal>() ), Times.Exactly( 1 ) );
             }
             else
             {
            dataRepositoryMock.Verify( x => x.SaveItem( It.IsAny<Meal>() ), Times.Never() );
             }
        }
        public void CannotSaveAfterFoodItemModificationSaved()
        {
            var dataRepositoryMock = new Mock<IDataRepository>();

             dataRepositoryMock.Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );
             dataRepositoryMock.Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );

             var foodGroupOne = new FoodGroup( Guid.NewGuid(), "Food Group One", "" );
             var foodGroupTwo = new FoodGroup( Guid.NewGuid(), "Food Group Two", "" );

             var foodItemOne = new FoodItem( Guid.NewGuid(), "Food Item #1", "", 100 );
             foodItemOne.FoodGroupsPerServing.Add( new Serving<FoodGroup>( foodGroupOne, 1.5M ) );

             var foodItemTwo = new FoodItem( Guid.NewGuid(), "Food Item #2", "", 150 );
             foodItemTwo.FoodGroupsPerServing.Add( new Serving<FoodGroup>( foodGroupTwo, 2.25M ) );

             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "Test", "", DateTime.Now, false ), DateTime.Now, "Test Meal", "This is a test" );
             meal.FoodItemServings.Add( new Serving<FoodItem>( foodItemOne, 1 ) );
             meal.FoodItemServings.Add( new Serving<FoodItem>( foodItemTwo, 2 ) );

             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );
             dataRepositoryMock.Setup( x => x.Contains( meal ) ).Returns( true );

             var viewModel = CreateViewModelForMeal( meal, dataRepositoryMock );

             Assert.IsFalse( viewModel.IsDirty );
             Assert.IsFalse( viewModel.SaveCommand.CanExecute( null ) );

             viewModel.FoodItemServings[0].Quantity += 1.5M;
             Assert.IsTrue( viewModel.IsDirty );
             Assert.IsTrue( viewModel.SaveCommand.CanExecute( null ) );

             viewModel.SaveCommand.Execute( null );
             Assert.IsFalse( viewModel.IsDirty );
             Assert.IsFalse( viewModel.SaveCommand.CanExecute( null ) );
        }
        public void DeleteMealNotPerformedIfAnswerIsNo()
        {
            var dataRepositoryMock = new Mock<IDataRepository>();
             var interactionServiceMock = new Mock<IInteractionService>();
             var regionManagerMock = new Mock<IRegionManager>();

             var meal = new Meal( Guid.NewGuid(), new MealType( Guid.NewGuid(), "test", "test", DateTime.Now, false ), DateTime.Now, "test", "This is a test" );
             meal.FoodItemServings.Add( new Serving<FoodItem>( new FoodItem( Guid.NewGuid(), "test", "test", 100.0M ), 1.5M ) );

             dataRepositoryMock.Setup( x => x.Contains( meal ) ).Returns( true );
             dataRepositoryMock.Setup( x => x.GetMeal( meal.ID ) ).Returns( meal );
             dataRepositoryMock
            .Setup( x => x.GetAllMealTypes() )
            .Returns( new ReadOnlyCollection<MealType>( new List<MealType>() ) );
             dataRepositoryMock
            .Setup( x => x.GetAllFoodItems() )
            .Returns( new ReadOnlyCollection<FoodItem>( new List<FoodItem>() ) );

             var viewModel = CreateViewModelForMeal( meal, dataRepositoryMock, regionManagerMock, interactionServiceMock );

             // Setup the regions so we can determine if the view has been removed or not
             var regionMock = new Mock<IRegion>();
             var view = CreateViewInRegion( viewModel, regionMock, regionManagerMock );

             interactionServiceMock
            .Setup( x => x.ShowMessageBox(
               Messages.Question_Meal_Delete, DisplayStrings.DeleteCaption, MessageBoxButton.YesNo, MessageBoxImage.Question ) )
            .Returns( MessageBoxResult.No );

             Assert.IsTrue( viewModel.DeleteCommand.CanExecute( null ) );
             viewModel.DeleteCommand.Execute( null );

             interactionServiceMock.VerifyAll();
             dataRepositoryMock.VerifyAll();
             dataRepositoryMock.Verify( x => x.Remove( meal ), Times.Never() );
             regionMock.Verify( x => x.Remove( It.IsAny<Object>() ), Times.Never() );
        }
        public void MealTemplateMeal()
        {
            var configurationMock = new Mock<IConfiguration>();
             configurationMock.Setup( x => x.DataSource ).Returns( DataSourceType.XMLFile );
             configurationMock.Setup( x => x.FileName ).Returns( FullTestData.DataFileName );

             FullTestData.Reset();
             var dataRepository = new DataRepository( configurationMock.Object );

             DateTime theTime = DateTime.Now;
             Meal meal = new Meal( Guid.NewGuid(), dataRepository.FindMealType( mt => mt.Name == "Lunch" ), theTime, "Lunch", null );
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Baby Carrots" ), 2.5M ) );
             meal.FoodItemServings.Add( new Serving<FoodItem>( dataRepository.FindFoodItem( food => food.Name == "Deluxe Bacon Cheese Burger" ), 1 ) );
             Assert.IsTrue( meal.IsValid );
             Assert.AreEqual( 750, meal.Calories );

             MealTemplate mealTemplate = new MealTemplate( meal );
             Assert.AreEqual( meal.ID, mealTemplate.ID );
             Assert.AreEqual( meal.TypeOfMeal, mealTemplate.TypeOfMeal );
             Assert.AreEqual( meal.DateAndTimeOfMeal, mealTemplate.DateAndTimeOfMeal );
             Assert.AreEqual( 2, mealTemplate.FoodItemServings.Count );
             Assert.IsNotNull( mealTemplate.FoodItemServings.Find( s => s.Entity.Name == "Baby Carrots" ) );
             Assert.IsNotNull( mealTemplate.FoodItemServings.Find( s => s.Entity.Name == "Deluxe Bacon Cheese Burger" ) );
             Assert.IsTrue( mealTemplate.IsValid );
             Assert.IsNull( mealTemplate["Name"] );
        }
Beispiel #30
0
        public List<Meal> Meals()
        {
            var fruit = FoodGroups().Find( fg => fg.ID == fruitID );
             var dairy = FoodGroups().Find( fg => fg.ID == dairyID );
             var meat = FoodGroups().Find( fg => fg.ID == meatID );
             var vegetable = FoodGroups().Find( fg => fg.ID == vegetableID );
             var starch = FoodGroups().Find( fg => fg.ID == starchID );

             var breakfast = MealTypes().Find( mt => mt.ID == breakfastID );
             var lunch = MealTypes().Find( mt => mt.ID == lunchID );
             var dinner = MealTypes().Find( mt => mt.ID == dinnerID );

             // drinks
             var milk = Foods().Find( f => f.ID == milkID );
             var oj = Foods().Find( f => f.ID == ojID );
             var friedEgg = Foods().Find( f => f.ID == friedEggID );
             var hashBrowns = Foods().Find( f => f.ID == hashBrownsID );
             var bacon = Foods().Find( f => f.ID == baconID );
             var cereal = Foods().Find( f => f.ID == cerealID );
             var hamSandwich = Foods().Find( f => f.ID == hamSandwichID );
             var baconCheeseBurger = Foods().Find( f => f.ID == baconCheeseBurgerID );
             var frenchFries = Foods().Find( f => f.ID == frenchFriesID );
             var carrotSticks = Foods().Find( f => f.ID == carrotSticksID );
             var chickenDinner = Foods().Find( f => f.ID == chickenDinnerID );
             var steakDinner = Foods().Find( f => f.ID == steakDinnerID );

             if (_meals == null)
             {
            _meals = new List<Meal>();

            // Meals for Today
            //
            // Breakfast:
            // 2.5 glasses of Orange Juice
            //    Calories: 100 * 2.5 = 250
            //    Food Groups:
            //       Fruit: 2.5
            // 1.0 Cereal
            //    Calories: 125
            //    Food Groups:
            //      Starch: 2.0
            // 0.75 Milk
            //    Calories: 90 * 0.75 = 67.5
            //    Food Groups:
            //       Dairy: 0.75
            //
            // Lunch:
            // 1.0 Ham Sandwich
            //    Calories: 320
            //    Food Groups:
            //       Meat: 1.0
            //       Vegetable: 0.5
            //       Dairy: 0.5
            //       Starch: 2.0
            // 2.0 Carrot Sticks
            //    Calories: 2 * 40 = 80
            //    Food Groups:
            //       Vegetable: 2.0
            // 1.5 Glasses of Milk
            //    Calories: 1.5 * 90 = 135
            //    Food Groups:
            //       Dairy: 1.5
            //
            // Dinner:
            // 1.0 Steak Dinner
            //    Calories: 1200
            //    Food Groups:
            //       Meat: 1.5
            //       Vegetable: 1.0
            //       Starch: 1.0
            // 2.0 Glasses of Milk
            //    Calories: 2.0 * 90 = 180
            //    Food Groups:
            //       Dairy: 2.0
            //
            // Totals:
            //    Calories: 250 + 125 + 67.5 + 320 + 80 + 135 + 1200 + 180 = 2357.5
            //    Food Groups:
            //       Fruit: 2.5
            //       Starch: 2.0 + 2.0 + 1.0 = 5.0
            //       Dairy: 0.75 + 0.5 + 1.5 + 2.0 = 4.75
            //       Meat: 1.0 + 1.5 = 2.5
            //       Vegetable: 0.5 + 2.0 + 1.0 = 3.5
            var meal = new Meal( DayOneBreakfastID, breakfast, DateTime.Today.AddHours( 6.5 ), "Breakfast", "" );
            meal.FoodItemServings.Add( new Serving<FoodItem>( oj, 2.5M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( cereal, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( milk, 0.75M ) );
            _meals.Add( meal );

            meal = new Meal( DayOneLunchID, lunch, DateTime.Today.AddHours( 12 ), "Lunch", "" );
            meal.FoodItemServings.Add( new Serving<FoodItem>( hamSandwich, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( carrotSticks, 2.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( milk, 1.5M ) );
            _meals.Add( meal );

            meal = new Meal( DayOneDinnerID, dinner, DateTime.Today.AddHours( 17.75 ), "Dinner", "" );
            meal.FoodItemServings.Add( new Serving<FoodItem>( steakDinner, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( milk, 2.0M ) );
            _meals.Add( meal );

            // Meals for DaysToAddForFutureMeals days into the future.
            //
            // Breakfast:
            // 2.0 Eggs
            //    Calories: 2 * 60.0 = 120.0
            //    Food Groups:
            //       Meat: 2.0
            // 1.0 Hash Browns
            //    Calories: 125.5
            //    Food Groups:
            //       Starch: 1.0
            // 1.0 Bacon
            //    Calories: 100
            //    Food Groups:
            //       Meat: 1.0
            // 2.0 oj
            //    Calories: 200
            //    Food Groups:
            //       Fruit: 2.0
            //
            // Lunch:
            //    None
            //
            // Dinner:
            // 1.0 Chicken Dinner
            //    Calories: 700
            //    Food Groups:
            //       Meat: 1.0
            //       Vegetable: 1.0
            //       Starch: 1.0
            // 2.0 Glasses of Milk
            //    Calories: 2.0 * 90 = 180
            //    Food Groups:
            //       Dairy: 2.0
            //
            // Totals:
            //    Calories: 700 + 180 + 120 + 125.5 + 100 + 200 = 1425.5
            //    Food Groups:
            //       Meat: 1.0 + 1.0 + 1.0 = 3.0
            //       Vegetable: 1.0
            //       Starch: 1.0 + 1.0 = 2.0
            //       Dairy: 2.0
            //       Fruit: 2.0
            meal = new Meal( DayTwoBreakfastID, breakfast, DateTime.Today.AddDays( DaysToAddForFutureMeals ).AddHours( 6 ), "Breakfast", "" );
            meal.FoodItemServings.Add( new Serving<FoodItem>( friedEgg, 2.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( hashBrowns, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( bacon, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( oj, 2.0M ) );
            _meals.Add( meal );

            meal = new Meal( DayTwoDinnerID, dinner, DateTime.Today.AddDays( DaysToAddForFutureMeals ).AddHours( 18 ), "Dinner", "" );
            meal.FoodItemServings.Add( new Serving<FoodItem>( chickenDinner, 1.0M ) );
            meal.FoodItemServings.Add( new Serving<FoodItem>( milk, 2.0M ) );
            _meals.Add( meal );
             }

             return _meals;
        }