예제 #1
0
        public void BusinessDaysBetweenTwoDatesCustomHolidays_WhenPasseValidDatesAndCustomHoliday_ThenReturnsCorrectCount()
        {
            // Arrange
            var firstDate       = new DateTime(2020, 4, 20);
            var secondDate      = new DateTime(2020, 4, 30);
            var anzacDayHoliday = new PublicHoliday {
                Name = "Anzac Day", Month = 4, Day = 25, MustHappenOnAWeekDay = true
            };
            var holidayList = new List <PublicHoliday> {
                anzacDayHoliday
            };
            var anzacDayDateIn2020 = new List <DateTime> {
                new DateTime(2020, 4, 27)
            };
            var year = new List <int> {
                2020
            };
            var calculator = new FixedDayCalculator();

            _dateHelper.GetYearsBetweenDates(firstDate, secondDate).Returns(year);
            _publicHolidayCalculatorFactory.GetCalculator(anzacDayHoliday).Returns(calculator);

            var target = new DateCounter(_publicHolidayCalculatorFactory, _dateHelper, _logger);

            // Act
            var actual = target.BusinessDaysBetweenTwoDates(firstDate, secondDate, holidayList);

            // Assert
            actual.Should().Be(6);
            _dateHelper.Received(1).GetYearsBetweenDates(firstDate, secondDate);
            _publicHolidayCalculatorFactory.Received(1).GetCalculator(anzacDayHoliday);
        }
예제 #2
0
        public IPublicHolidayCalculator GetCalculator(PublicHoliday holiday)
        {
            IPublicHolidayCalculator calculator = null;

            switch (holiday.HolidayType)
            {
            case PublicHolidayType.FixedDate:
                calculator = new FixedDayCalculator();
                break;

            case PublicHolidayType.BasedOnAnotherHoliday:
                calculator = new BasedOnOtherHolidayCalculator();
                break;

            case PublicHolidayType.RepeatEveryXYear:
                calculator = new YearRepetitionCalculator();
                break;

            case PublicHolidayType.Easter:
                calculator = new EasterCalculator();
                break;

            case PublicHolidayType.SpecificDayInWeek:
                calculator = new SpecificWeekDayCalculator();
                break;

            default:
                throw new ArgumentException();
            }

            return(calculator);
        }
        public void GetPublicHolidayByYears_WhenPassedYearsAndHOlidays_ThenReturnsExpectedDateList(List<int> years, PublicHoliday holiday, List<DateTime> expectedResult)
        {
            // Arrange
            var target = new FixedDayCalculator();

            // Act
            var actual = target.GetPublicHolidayByYears(years, holiday);

            // Assert
            actual.Should().BeEquivalentTo(expectedResult);
        }
        public void GetPublicHolidayByYears_WhenNullName_ThenThrows()
        {
            // Arrange
            var target = new FixedDayCalculator();
            var holiday = new PublicHoliday { Name = null };

            // Act
            Action actual = () => target.GetPublicHolidayByYears(null, holiday);

            // Assert
            actual.Should().Throw<ArgumentException>().WithMessage("Cannot process a custom holidays without a name.");
        }