public void GetDetailsViewModelById_WithNoData_ShouldReturnCorrectResult()
        {
            this.habitsRepository.Setup(x => x.All()).Returns(new List <Habit> {
            }.AsQueryable());
            var result         = this.habitService.GetDetailsViewModelById("TestId");
            var expectedResult = new HabitDetailsViewModel();

            this.habitsRepository.Verify(x => x.All(), Times.Once);
            Assert.Equal(expectedResult.Id, result.Id);
            Assert.Equal(expectedResult.Title, result.Title);
            Assert.Equal(expectedResult.StartDateTime, result.StartDateTime);
            Assert.Equal(expectedResult.EndDateTime, result.EndDateTime);
            Assert.Equal(expectedResult.GoalId, result.GoalId);
            Assert.Equal(expectedResult.GoalColorHex, result.GoalColorHex);
            Assert.Equal(expectedResult.GoalCalendarTitle, result.GoalCalendarTitle);
            Assert.Equal(expectedResult.IsCompleted, result.IsCompleted);
        }
        public void GetDetailsViewModelById_WithCorrectData_ShouldReturnCorrectResult()
        {
            var color = new Color
            {
                Id   = 1,
                Name = "Test",
                Hex  = "TestHex",
            };

            var calendar = new Calendar
            {
                Id    = "CalendarId",
                Title = "Default",
                DefaultCalendarColor   = color,
                DefaultCalendarColorId = color.Id,
            };

            var goal = new Goal
            {
                Id         = "TestId",
                Title      = "Test",
                Calendar   = calendar,
                CalendarId = calendar.Id,
                IsActive   = true,
                Color      = color,
                ColorId    = color.Id,
            };

            var habit = new Habit
            {
                Id            = "TestId",
                Title         = "Test",
                StartDateTime = new DateTime(2020, 02, 02, 12, 0, 0),
                EndDateTime   = new DateTime(2020, 02, 02, 12, 30, 0),
                GoalId        = goal.Id,
                Goal          = goal,
                IsCompleted   = false,
            };

            var completedHabitsForWeeks = new Dictionary <string, int> {
                { "test", 1 },
            };

            var detailsModel = new HabitDetailsViewModel
            {
                Id                      = "TestId",
                Title                   = "Test",
                StartDateTime           = new DateTime(2020, 02, 02, 12, 0, 0),
                EndDateTime             = new DateTime(2020, 02, 02, 12, 30, 0),
                GoalId                  = goal.Id,
                GoalCalendarTitle       = calendar.Title,
                GoalColorHex            = color.Hex,
                IsCompleted             = false,
                GoalFrequencyInt        = 1,
                GoalDayTime             = "dayTime",
                GoalDuration            = "duration",
                GoalFrequency           = "frequency",
                CompletedHabitsForWeeks = completedHabitsForWeeks,
            };

            this.habitsRepository.Setup(x => x.All()).Returns(new List <Habit> {
                habit
            }.AsQueryable());
            var result         = this.habitService.GetDetailsViewModelById(habit.Id);
            var expectedResult = detailsModel;

            this.habitsRepository.Verify(x => x.All(), Times.Exactly(3));
            Assert.Equal(expectedResult.Id, result.Id);
            Assert.Equal(expectedResult.Title, result.Title);
            Assert.Equal(expectedResult.StartDateTime, result.StartDateTime);
            Assert.Equal(expectedResult.EndDateTime, result.EndDateTime);
            Assert.Equal(expectedResult.GoalId, result.GoalId);
            Assert.Equal(expectedResult.GoalColorHex, result.GoalColorHex);
            Assert.Equal(expectedResult.GoalCalendarTitle, result.GoalCalendarTitle);
            Assert.Equal(expectedResult.IsCompleted, result.IsCompleted);
        }