public DailyGoalsWindow(DateTime date, IGoalTrackerService gtService)
        {
            DailyGoalsWindowViewModel vm = new DailyGoalsWindowViewModel(date, gtService);

            vm.RequestClose += Close;
            DataContext      = vm;

            InitializeComponent();
        }
        public void TrackDailyGoalsCommand_CanExecute_ReturnsFalse_WhenNoDailyGoalsExist()
        {
            Mock <IGoalTrackerService> mockGts = new Mock <IGoalTrackerService>();

            mockGts.Setup(mock => mock.DailyGoals).Returns(new List <DailyGoal>().AsReadOnly());

            DailyGoalsWindowViewModel vm = new DailyGoalsWindowViewModel(date, mockGts.Object);

            Assert.That(vm.TrackDailyGoalsCommand.CanExecute(null), Is.False);
        }
        public void TrackDailyGoalsCommand_CreatesDayForDate()
        {
            Mock <IGoalTrackerService> mockGts = new Mock <IGoalTrackerService>();

            mockGts.Setup(mock => mock.DailyGoals).Returns(new List <DailyGoal>()
            {
                new DailyGoal("goal")
            }.AsReadOnly());

            DailyGoalsWindowViewModel vm = new DailyGoalsWindowViewModel(date, mockGts.Object);

            vm.TrackDailyGoalsCommand.Execute(null);

            mockGts.Verify(mock => mock.CreateDay(date), Times.Once);
        }
        public void DailyGoals_ContainsExistingDayGoals()
        {
            List <DailyGoal> goals = new List <DailyGoal>()
            {
                new DailyGoal("goal"), new DailyGoal("goal2", true)
            };
            Day day = new Day(date);

            day.Goals.Add(goals[0]);
            day.Goals.Add(goals[1]);

            Mock <IGoalTrackerService> mockGts = new Mock <IGoalTrackerService>();

            mockGts.Setup(mock => mock.GetDayForDate(date)).Returns(day);
            DailyGoalsWindowViewModel vm = new DailyGoalsWindowViewModel(date, mockGts.Object);

            List <DailyGoal> vmGoals = vm.DailyGoals.Select(dailyVm => new DailyGoal(dailyVm.Name, dailyVm.Done)).ToList();

            Assert.That(goals, Is.EquivalentTo(vmGoals));
        }
        public void WeeklyGoals_ContainsExistingWeekGoals()
        {
            List <WeeklyGoal> goals = new List <WeeklyGoal>()
            {
                new WeeklyGoal("goal", 1), new WeeklyGoal("goal2", 2)
            };

            goals[0].DaysCompleted[(int)date.DayOfWeek] = true;
            Week week = new Week(FirstDayOfWeek(date));

            week.Goals.Add(goals[0]);
            week.Goals.Add(goals[1]);

            Mock <IGoalTrackerService> mockGts = new Mock <IGoalTrackerService>();

            mockGts.Setup(mock => mock.DailyGoals).Returns(new List <DailyGoal>().AsReadOnly());
            mockGts.Setup(mock => mock.GetWeekForDate(date)).Returns(week);
            DailyGoalsWindowViewModel vm = new DailyGoalsWindowViewModel(date, mockGts.Object);

            List <Tuple <string, bool> > goalsPerDay   = goals.Select(goal => new Tuple <string, bool>(goal.Name, goal.DaysCompleted[(int)date.DayOfWeek])).ToList();
            List <Tuple <string, bool> > vmGoalsPerDay = vm.WeeklyGoals.Select(goalVm => new Tuple <string, bool>(goalVm.Name, goalVm.Done)).ToList();

            Assert.That(goalsPerDay, Is.EquivalentTo(vmGoalsPerDay));
        }