public void can_locate_default_strategies()
 {
     string name = "foo";
     DateTimeCultureInfo workingdayCultureInfo = new DateTimeCultureInfo(name);
     Assert.IsTrue(name == workingdayCultureInfo.Name);
     Assert.IsInstanceOf<DefaultHolidayStrategy>(workingdayCultureInfo.LocateHolidayStrategy(name));
     Assert.IsInstanceOf<DefaultWorkingDayOfWeekStrategy>(workingdayCultureInfo.LocateWorkingDayOfWeekStrategy(name));
 }
        public void check_working_day()
        {
            var ptWorkingDayCultureInfo = new DateTimeCultureInfo("pt-PT");
            var carnationRevolution = new DateTime(2011, 4, 25);
            var nextDay = carnationRevolution.AddDays(1);

            Assert.IsTrue(carnationRevolution.IsWorkingDay() == false);
            Assert.IsTrue(carnationRevolution.DayOfWeek == DayOfWeek.Monday);

            Assert.IsTrue(nextDay.IsWorkingDay() == true);
            Assert.IsTrue(nextDay.DayOfWeek == DayOfWeek.Tuesday);
        }
        public void get_year_prior_2012_holidays_in_portugal()
        {
            var portugalWorkingDayCultureInfo = new DateTimeCultureInfo("pt-PT");
            var today = new DateTime(2010,2,1);
            var holidays = today.AllYearHolidays();

            Assert.IsTrue(holidays.Count == 13, "expecting 13 holidays but got {0}", holidays.Count);

            foreach (DateTime holidayDate in holidays.Keys) {
                var holiday = holidays[holidayDate];
                Assert.IsTrue(holidayDate.IsWorkingDay(portugalWorkingDayCultureInfo) == false, "holiday {0} shouln't be working day in Portugal", holiday.Name);
            }
        }
        public void can_provide_custom_locator_dayOfWeek_strategy()
        {
            dynamicMockDayOfWeek.ExpectAndReturn("IsWorkingDay", false, new object[] { DayOfWeek.Thursday });

            DateTimeCultureInfo workingdayCultureInfo = new DateTimeCultureInfo() {
                LocateWorkingDayOfWeekStrategy = (n) => {
                    return (IWorkingDayOfWeekStrategy)dynamicMockDayOfWeek.MockInstance;
                }
            };

            DateTime aThursday = new DateTime(2011, 5, 12);
            Assert.IsFalse(aThursday.IsWorkingDay(workingdayCultureInfo));
        }
        public void can_provide_custom_locator_dayOfWeek_strategy()
        {
            var mockDayOfWeekStartegy = Substitute.For<IWorkingDayOfWeekStrategy>();
            mockDayOfWeekStartegy.IsWorkingDay(Arg.Any<DayOfWeek>()).Returns(false);

            DateTimeCultureInfo workingdayCultureInfo = new DateTimeCultureInfo() {
                LocateWorkingDayOfWeekStrategy = (n) => {
                    return mockDayOfWeekStartegy;
                }
            };

            DateTime aThursday = new DateTime(2011, 5, 12);
            Assert.IsFalse(aThursday.IsWorkingDay(workingdayCultureInfo));
            Assert.IsFalse(aThursday.IsHoliday(workingdayCultureInfo));
            mockDayOfWeekStartegy.Received().IsWorkingDay(aThursday.DayOfWeek);
        }
        public void can_provide_custom_locator_holiday_dayOfWeek_strategy()
        {
            dynamicMockHoliday.ExpectAndReturn("IsHoliDay", true, new object[] { new DateTime(1991, 3, 1) });
            dynamicMockDayOfWeek.ExpectAndReturn("IsWorkingDay", true, new object[] { DayOfWeek.Friday });
            dynamicMockDayOfWeek.ExpectAndReturn("IsWorkingDay", true, new object[] { DayOfWeek.Friday });

            DateTimeCultureInfo workingdayCultureInfo = new DateTimeCultureInfo() {
                LocateHolidayStrategy = (n) => {
                    return (IHolidayStrategy)dynamicMockHoliday.MockInstance;
                },
                LocateWorkingDayOfWeekStrategy = (n) => {
                    return (IWorkingDayOfWeekStrategy)dynamicMockDayOfWeek.MockInstance;
                }
            };

            DateTime marchFirst = new DateTime(1991, 3, 1);
            Assert.IsFalse(marchFirst.IsWorkingDay(workingdayCultureInfo));
        }
        public void can_provide_custom_locator_holiday_dayOfWeek_strategy()
        {
            var mockHolidayStrategy = Substitute.For<IHolidayStrategy>();
            mockHolidayStrategy.IsHoliDay(Arg.Any<DateTime>()).Returns(true);
            var mockDayOfWeekStartegy = Substitute.For<IWorkingDayOfWeekStrategy>();
            mockDayOfWeekStartegy.IsWorkingDay(Arg.Any<DayOfWeek>()).Returns(true);

            DateTimeCultureInfo workingdayCultureInfo = new DateTimeCultureInfo() {
                LocateHolidayStrategy = (n) => {
                    return mockHolidayStrategy;
                },
                LocateWorkingDayOfWeekStrategy = (n) => {
                    return mockDayOfWeekStartegy;
                }
            };

            DateTime marchFirst = new DateTime(1991, 3, 1);
            Assert.IsTrue(marchFirst.IsHoliday(workingdayCultureInfo));
            Assert.IsFalse(marchFirst.IsWorkingDay(workingdayCultureInfo));
            mockHolidayStrategy.Received().IsHoliDay(marchFirst);
            mockDayOfWeekStartegy.Received().IsWorkingDay(marchFirst.DayOfWeek);
        }
        public void holidays()
        {
            var ptWorkingDayCultureInfo = new DateTimeCultureInfo("pt-PT");
            var enWorkingDayCultureInfo = new DateTimeCultureInfo("default");

            var thursday = new DateTime(2011, 4, 21); // A thursday
            var thursday_plus_two_working_days_pt = thursday.AddWorkingDays(2, ptWorkingDayCultureInfo); // friday + 2 working days on PT
            var thursday_plus_two_working_days_en = thursday.AddWorkingDays(2, enWorkingDayCultureInfo); // friday + 2 working days on Default

            //Default doesn't have supported holidays
            Assert.IsTrue(thursday_plus_two_working_days_en == thursday.AddDays(4));
            Assert.IsTrue(thursday_plus_two_working_days_en.DayOfWeek == DayOfWeek.Monday);

            //Portuguese Holidays are supported
            Assert.IsTrue(thursday_plus_two_working_days_pt == thursday.AddDays(6)); // + Good Friday (22-4-2011) + Carnation Revolution (25-4-2011)
            Assert.IsTrue(thursday_plus_two_working_days_pt.DayOfWeek == DayOfWeek.Wednesday);
        }
        public void recomended_calculation()
        {
            var workingDayCultureInfo = new DateTimeCultureInfo("pt-PT");
            var friday = new DateTime(2011, 5, 13); // A friday
            var friday_plus_two_working_days = friday.AddWorkingDays(2, workingDayCultureInfo); // friday + 2 working days

            Assert.IsTrue(friday_plus_two_working_days == friday.AddDays(4));
            Assert.IsTrue(friday_plus_two_working_days.DayOfWeek == DayOfWeek.Tuesday);
        }
        public void provide_custom_strategies()
        {
            var customWorkingDayCultureInfo = new DateTimeCultureInfo() {
                LocateHolidayStrategy = (name) => new CustomHolidayStrategy() ,
                LocateWorkingDayOfWeekStrategy = (name) => new CustomeWorkingDayOfWeekStrategy()
            };

            Assert.IsTrue(DateTime.Today.IsWorkingDay(customWorkingDayCultureInfo) == false);
            Assert.IsTrue(DateTime.Today.AddDays(1).IsWorkingDay(customWorkingDayCultureInfo) == true);
        }
 public static bool IsWorkingDay(this DateTime day)
 {
     var workingDayCultureInfo = new DateTimeCultureInfo();
     return IsWorkingDay(day, workingDayCultureInfo);
 }
 public static IDictionary<DateTime, Holiday> AllYearHolidays(this DateTime day)
 {
     var workingDayCultureInfo = new DateTimeCultureInfo();
     return AllYearHolidays(day, workingDayCultureInfo);
 }
        public static IDictionary <DateTime, Holiday> AllYearHolidays(this DateTime day)
        {
            var workingDayCultureInfo = new DateTimeCultureInfo();

            return(AllYearHolidays(day, workingDayCultureInfo));
        }
        public static bool IsWorkingDay(this DateTime day)
        {
            var workingDayCultureInfo = new DateTimeCultureInfo();

            return(IsWorkingDay(day, workingDayCultureInfo));
        }