public void CreateHolidaysTest()
        {
            var originalFactoryMock = new Mock <IHolidaysFactory>();
            var startDate           = new DateTime(2012, 12, 28);
            var endDate             = new DateTime(2018, 1, 27);

            originalFactoryMock.Setup(f => f.CreateHolidays(It.Is <DateTime>(d => d.Equals(startDate)), It.Is <DateTime>(d => d.Equals(endDate))))
            .Returns(new List <DateTime>()
            {
                new DateTime(2017, 1, 1),
                new DateTime(2018, 1, 1),
                new DateTime(2018, 1, 6),
                new DateTime(2018, 1, 27),
            });

            IHolidaysFactory sut = new FirstWeekdayHolidayShiftingDecorator(originalFactoryMock.Object);

            var expected = new List <DateTime>()
            {
                new DateTime(2017, 1, 2),
                new DateTime(2018, 1, 1),
                new DateTime(2018, 1, 8),
            };

            Assert.That(sut.CreateHolidays(startDate, endDate), Is.EquivalentTo(expected));
            originalFactoryMock.VerifyAll();
        }
        public void BusinessDayCounterIntegrationWithAnnualHolidaysTests()
        {
            var newYear   = new FirstWeekdayHolidayShiftingDecorator(new FixedDateHolidaysFactory(1, 1));
            var christmas = new FixedDateHolidaysFactory(12, 25);
            var boxing    = new FixedDateHolidaysFactory(12, 26);
            var queenDay  = new DayOfMonthHolidaysFactory(6, DayOfWeek.Monday, 2);

            var aggregator = new HolidaysAggregator(new List <IHolidaysFactory>()
            {
                newYear,
                christmas,
                boxing,
                queenDay
            });

            var counter = new BusinessDayCounter();

            Assert.That(counter.BusinessDaysBetweenTwoDates(new DateTime(2016, 12, 20), new DateTime(2018, 2, 1), aggregator), Is.EqualTo(291 - 6));
        }