public void Returns_number_of_weeks_to_include_from_settings(int numberOfWeeksToInclude, int expected)
        {
            _stubDatetimeService
            .GetDate()
            .Returns(ParseDate("07/01/2019"));

            _stubGetWeeksSettings
            .Value
            .Returns(
                new GetWeekSettings
            {
                NumberOfWeeksToInclude = numberOfWeeksToInclude
            });

            // act
            var sut            = new GetWeeksController(new GetWeeksService(_stubDatetimeService, _stubGetWeeksSettings));
            var result         = sut.GetWeeks();
            var firstDayOfWeek = CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek;

            // assert
            Assert.That(result, Is.TypeOf <OkObjectResult>());
            Assert.That(((OkObjectResult)result).Value, Is.TypeOf <GetWeeksViewModel>());

            var response = (GetWeeksViewModel)((OkObjectResult)result).Value;

            Assert.That(response.Weeks.Count(), Is.EqualTo(expected), $"expected only {expected} weeks");
        }
        public void Return_current_week_selected()
        {
            _stubDatetimeService
            .GetDate()
            .Returns(ParseDate("07/01/2019"));

            _stubGetWeeksSettings
            .Value
            .Returns(
                new GetWeekSettings
            {
                NumberOfWeeksToInclude = 1
            });

            // act
            var sut    = new GetWeeksController(new GetWeeksService(_stubDatetimeService, _stubGetWeeksSettings));
            var result = sut.GetWeeks();

            // assert
            Assert.That(result, Is.TypeOf <OkObjectResult>());
            Assert.That(((OkObjectResult)result).Value, Is.TypeOf <GetWeeksViewModel>());

            var response = (GetWeeksViewModel)((OkObjectResult)result).Value;

            Assert.That(response.Weeks.ElementAt(0).IsCurrentWeek, Is.EqualTo(true), "expected to be current week");
            Assert.That(response.Weeks.ElementAt(0).WeekNo, Is.EqualTo(2), "expected week to be 2");
            Assert.That(response.Weeks.ElementAt(1).IsCurrentWeek, Is.EqualTo(false), "expected to be current week");
            Assert.That(response.Weeks.ElementAt(1).WeekNo, Is.EqualTo(3), "expected week to be 3");
        }
        public void Returns_week_for_date(string currentDate, int weekNo, string startDate, string endDate)
        {
            // arrange
            _stubDatetimeService
            .GetDate()
            .Returns(ParseDate(currentDate));

            // act
            var sut    = new GetWeeksController(new GetWeeksService(_stubDatetimeService, _stubGetWeeksSettings));
            var result = sut.GetWeeks();

            // assert
            Assert.That(result, Is.TypeOf <OkObjectResult>());
            Assert.That(((OkObjectResult)result).Value, Is.TypeOf <GetWeeksViewModel>());

            var response = (GetWeeksViewModel)((OkObjectResult)result).Value;

            Assert.That(response.Weeks.Count(), Is.EqualTo(1), "expected only 1 weeks");

            Assert.That(response.Weeks.ElementAt(0).Year, Is.EqualTo(ParseDate(currentDate).Year));
            Assert.That(response.Weeks.ElementAt(0).WeekNo, Is.EqualTo(weekNo), $"expected week to be {weekNo}");
            Assert.That(response.Weeks.ElementAt(0).StartOfWeek, Is.EqualTo(ParseDate(startDate).Date.ToString("dd-MM-yyyy")));
            Assert.That(response.Weeks.ElementAt(0).EndOfWeek, Is.EqualTo(ParseDate(endDate).Date.ToString("dd-MM-yyyy")));
        }