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); }
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."); }