public void Initialize_ShouldFillAllWeeks(IFixture fixture, DateTime startDate, byte dayCount, TimesheetInitializer sut)
        {
            // arrange..
            startDate = startDate.Date;
            var endDate = startDate.AddDays(dayCount);

            var workDays = new List <IWorkDay>();

            for (var d = startDate; d <= endDate; d = d.AddDays(1))
            {
                workDays.Add(fixture.Build <TestWorkDay>()
                             .With(wd => wd.Date, d)
                             .Create());
            }

            // act..
            var actual = sut.Initialize(workDays);

            // assert..
            actual.Weeks.ShouldAllBe(tw => tw.WorkDays.Length == 7);
        }
        public void Initialize_ShouldAddAllWeekDaysToTimesheetWeeks(IFixture fixture, TimesheetInitializer sut)
        {
            // arrange..
            var startDate = new DateTime(2017, 12, 19);
            var endDate   = startDate.AddDays(10);

            var workDays = new List <IWorkDay>();

            for (var d = startDate; d <= endDate; d = d.AddDays(1))
            {
                workDays.Add(fixture.Build <TestWorkDay>()
                             .With(wd => wd.Date, d)
                             .Create());
            }

            // act..
            var actual = sut.Initialize(workDays);

            // assert..
            actual.Weeks.Count().ShouldBe(2);
            actual.Weeks.ElementAt(0).WorkDays.Length.ShouldBe(7);

            actual.Weeks.ElementAt(0).WorkDays.ElementAt(0).Date.ShouldBe(new DateTime(2017, 12, 18), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(1).Date.ShouldBe(new DateTime(2017, 12, 19), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(2).Date.ShouldBe(new DateTime(2017, 12, 20), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(3).Date.ShouldBe(new DateTime(2017, 12, 21), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(4).Date.ShouldBe(new DateTime(2017, 12, 22), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(5).Date.ShouldBe(new DateTime(2017, 12, 23), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(0).WorkDays.ElementAt(6).Date.ShouldBe(new DateTime(2017, 12, 24), TimeSpan.FromSeconds(3));

            actual.Weeks.ElementAt(1).WorkDays.Length.ShouldBe(7);
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(0).Date.ShouldBe(new DateTime(2017, 12, 25), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(1).Date.ShouldBe(new DateTime(2017, 12, 26), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(2).Date.ShouldBe(new DateTime(2017, 12, 27), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(3).Date.ShouldBe(new DateTime(2017, 12, 28), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(4).Date.ShouldBe(new DateTime(2017, 12, 29), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(5).Date.ShouldBe(new DateTime(2017, 12, 30), TimeSpan.FromSeconds(3));
            actual.Weeks.ElementAt(1).WorkDays.ElementAt(6).Date.ShouldBe(new DateTime(2017, 12, 31), TimeSpan.FromSeconds(3));
        }