예제 #1
0
        public void TestTurkey()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2017, CountryCode.TR).ToArray();

            //New Year's Day
            Assert.AreEqual(new DateTime(2017, 1, 1), publicHolidays[0].Date);

            //National Independence & Children's Day
            Assert.AreEqual(new DateTime(2017, 4, 23), publicHolidays[1].Date);

            //Labour Day
            Assert.AreEqual(new DateTime(2017, 5, 1), publicHolidays[2].Date);

            //Atatürk Commemoration & Youth Day
            Assert.AreEqual(new DateTime(2017, 5, 19), publicHolidays[3].Date);

            //Democracy Day
            Assert.AreEqual(new DateTime(2017, 7, 15), publicHolidays[4].Date);

            //Victory Day
            Assert.AreEqual(new DateTime(2017, 8, 30), publicHolidays[5].Date);

            //Republic Day
            Assert.AreEqual(new DateTime(2017, 10, 29), publicHolidays[6].Date);
        }
예제 #2
0
        public void Check_AutumnalEquinoxDay(int year, int expectedYear, int expectedMonth, int expectedDay)
        {
            var publicHolidays = DateSystem.GetPublicHolidays(year, CountryCode.JP).ToArray();
            var publicHoliday  = publicHolidays.Where(o => o.Name == "Autumnal Equinox Day").SingleOrDefault();

            Assert.AreEqual(new DateTime(expectedYear, expectedMonth, expectedDay), publicHoliday.Date);
        }
예제 #3
0
        public void TestChina2019()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2019, CountryCode.CN).ToArray();

            Assert.IsTrue(publicHolidays.Any(o => o.Date == new DateTime(2019, 9, 13) && o.Name == "Mid-Autumn Festival"));
            Assert.IsTrue(publicHolidays.Any(o => o.Date == new DateTime(2019, 4, 5) && o.Name == "Qingming Festival (Tomb-Sweeping Day)"));
        }
예제 #4
0
        public void TestCanada()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2017, CountryCode.CA).ToArray();

            //New Year's Day
            Assert.AreEqual(new DateTime(2017, 1, 1), publicHolidays[0].Date);
        }
예제 #5
0
        public void TestHungaryHoliday2018()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2018, CountryCode.HU).ToArray();

            //New Year's Day
            Assert.AreEqual(new DateTime(2018, 1, 1), publicHolidays[0].Date);
            //1848 Revolution Memorial Day
            Assert.AreEqual(new DateTime(2018, 3, 15), publicHolidays[1].Date);
            //Good Friday
            Assert.AreEqual(new DateTime(2018, 3, 30), publicHolidays[2].Date);
            //Easter Sunday
            Assert.AreEqual(new DateTime(2018, 4, 1), publicHolidays[3].Date);
            //Easter Monday
            Assert.AreEqual(new DateTime(2018, 4, 2), publicHolidays[4].Date);
            //Labour day
            Assert.AreEqual(new DateTime(2018, 5, 1), publicHolidays[5].Date);
            //Pentecost
            Assert.AreEqual(new DateTime(2018, 5, 20), publicHolidays[6].Date);
            //Whit Monday
            Assert.AreEqual(new DateTime(2018, 5, 21), publicHolidays[7].Date);
            //State Foundation Day
            Assert.AreEqual(new DateTime(2018, 8, 20), publicHolidays[8].Date);
            //1956 Revolution Memorial Day
            Assert.AreEqual(new DateTime(2018, 10, 23), publicHolidays[9].Date);
            //All Saints Day
            Assert.AreEqual(new DateTime(2018, 11, 1), publicHolidays[10].Date);
            //Christmas Day
            Assert.AreEqual(new DateTime(2018, 12, 25), publicHolidays[11].Date);
            //St. Stephen's Day
            Assert.AreEqual(new DateTime(2018, 12, 26), publicHolidays[12].Date);
        }
예제 #6
0
        public ActionResult <IEnumerable <RegionStatisticDto> > RegionStatistic()
        {
            var countryCodes = (CountryCode[])Enum.GetValues(typeof(CountryCode));

            var availableCountryCodes = from CountryCode countryCode in countryCodes
                                        where DateSystem.GetPublicHolidays(DateTime.Today.Year, countryCode).Any()
                                        select countryCode;

            var missingCountryCodes = countryCodes.Except(availableCountryCodes);

            var availableCountries = availableCountryCodes.Select(o => this._countryProvider.GetCountry(o.ToString()));
            var missingCountries   = missingCountryCodes.Select(o => this._countryProvider.GetCountry(o.ToString()));

            var regions = (Region[])Enum.GetValues(typeof(Region));

            var regionStatistic = from Region region in regions
                                  where region != Region.None
                                  select new RegionStatisticDto
            {
                RegionName         = region.ToString(),
                AvailableCountries = availableCountries.Where(o => o.Region == region)
                                     .Select(o => CountryHelper.Convert(o))
                                     .OrderBy(o => o.CommonName)
                                     .ToArray(),
                MissingCountries = missingCountries.Where(o => o.Region == region)
                                   .Select(o => CountryHelper.Convert(o))
                                   .OrderBy(o => o.CommonName)
                                   .ToArray(),
            };

            return(View(regionStatistic));
        }
예제 #7
0
        public void CheckCounties()
        {
            foreach (CountryCode countryCode in Enum.GetValues(typeof(CountryCode)))
            {
                var provider = DateSystem.GetPublicHolidayProvider(countryCode);
                if (provider is ICountyProvider countyProvider)
                {
                    var counties = countyProvider.GetCounties();

                    var publicHolidays = DateSystem.GetPublicHolidays(DateTime.Now.Year, countryCode);
                    foreach (var publicHoliday in publicHolidays)
                    {
                        if (publicHoliday.Counties == null)
                        {
                            continue;
                        }

                        if (publicHoliday.Counties.Count(o => counties.Keys.Contains(o)) != publicHoliday.Counties.Length)
                        {
                            var diff = publicHoliday.Counties.Except(counties.Keys);
                            Assert.Fail($"Unknown countie in {provider} {string.Join(",", diff)}");
                        }
                    }
                }
            }
        }
예제 #8
0
        public void TestAustria()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2017, CountryCode.AT).ToArray();

            //New Year's Day
            Assert.AreEqual(new DateTime(2017, 1, 1), publicHolidays[0].Date);
            //Epiphany
            Assert.AreEqual(new DateTime(2017, 1, 6), publicHolidays[1].Date);
            //Easter Monday
            Assert.AreEqual(new DateTime(2017, 4, 17), publicHolidays[2].Date);
            //National Holiday
            Assert.AreEqual(new DateTime(2017, 5, 1), publicHolidays[3].Date);
            //Ascension Day
            Assert.AreEqual(new DateTime(2017, 5, 25), publicHolidays[4].Date);
            //Whit Monday
            Assert.AreEqual(new DateTime(2017, 6, 5), publicHolidays[5].Date);
            //Corpus Christi
            Assert.AreEqual(new DateTime(2017, 6, 15), publicHolidays[6].Date);
            //Assumption Day
            Assert.AreEqual(new DateTime(2017, 8, 15), publicHolidays[7].Date);
            //National Holiday
            Assert.AreEqual(new DateTime(2017, 10, 26), publicHolidays[8].Date);
            //All Saints' Day
            Assert.AreEqual(new DateTime(2017, 11, 1), publicHolidays[9].Date);
            //Immaculate Conception
            Assert.AreEqual(new DateTime(2017, 12, 8), publicHolidays[10].Date);
            //Christmas Day
            Assert.AreEqual(new DateTime(2017, 12, 25), publicHolidays[11].Date);
            //St. Stephen's Day
            Assert.AreEqual(new DateTime(2017, 12, 26), publicHolidays[12].Date);
        }
예제 #9
0
        public void CheckQueensBirthdayFor2021()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2021, CountryCode.PG).ToArray();

            var publicHoliday = publicHolidays.FirstOrDefault(holiday => holiday.Name.Equals("Queen's Birthday"));

            Assert.AreEqual(new DateTime(2021, 6, 14), publicHoliday.Date);
        }
예제 #10
0
        private void CheckPublicHolidayWithDateFilter1(DateTime startDate, DateTime endDate)
        {
            var items = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.DE);

            Assert.AreEqual(43, items.Count());
            Assert.IsTrue(items.First().Date > new DateTime(2016, 4, 28));
            Assert.IsTrue(items.Last().Date < new DateTime(2018, 6, 1));
        }
예제 #11
0
 public void TestSwitzerland()
 {
     for (var year = DateTime.Now.Year; year < 3000; year++)
     {
         var publicHolidays = DateSystem.GetPublicHolidays(year, CountryCode.CH);
         Assert.AreEqual(16, publicHolidays.Count());
     }
 }
예제 #12
0
 public void HolidayCount()
 {
     for (var year = 2018; year <= 2022; year++)
     {
         var publicHolidays = DateSystem.GetPublicHolidays(year, CountryCode.SG).ToArray();
         Assert.AreEqual(7, publicHolidays.Length);
     }
 }
예제 #13
0
 public void TestSpain()
 {
     for (var year = DateTime.Now.Year; year < 3000; year++)
     {
         var publicHolidays = DateSystem.GetPublicHolidays(year, CountryCode.ES);
         Assert.AreEqual(34, publicHolidays.Count());
     }
 }
예제 #14
0
        private static void Test2()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2017, CountryCode.CH);

            foreach (var publicHoliday in publicHolidays)
            {
                Console.WriteLine("{0:dd.MM.yyyy} {1} {2}", publicHoliday.Date, publicHoliday.LocalName, publicHoliday.Global);
            }
        }
예제 #15
0
        public void TestGermanyCorpusChristi2026()
        {
            var yearToTest       = 2026;
            var publicHolidays   = DateSystem.GetPublicHolidays(yearToTest, CountryCode.DE);
            var corpusChristi    = publicHolidays.First(x => x.LocalName == "Fronleichnam").Date;
            var expectedDate2026 = new DateTime(yearToTest, 6, 4);

            Assert.AreEqual(expectedDate2026, corpusChristi);
        }
예제 #16
0
        public void TestGermanyCorpusChristi()
        {
            var yearToTest       = 2017;
            var catholicProvider = new MockPublicHolidayProvider(new CatholicProvider());
            var publicHolidays   = DateSystem.GetPublicHolidays(yearToTest, CountryCode.DE);
            var easterSunday     = catholicProvider.EasterSunday(yearToTest);
            var corpusChristi    = publicHolidays.First(x => x.LocalName == "Fronleichnam").Date;

            Assert.AreEqual(easterSunday.AddDays(60), corpusChristi);
        }
예제 #17
0
        public void CheckDayOfMadridIsThirdMayIn2021()
        {
            var yearToTest       = 2021;
            var expectedDate2021 = new DateTime(2021, 5, 3);

            var publicHolidays = DateSystem.GetPublicHolidays(yearToTest, CountryCode.ES);
            var dayOfMadrid    = publicHolidays.Where(publicHoliday => publicHoliday.Name == "Day of Madrid").FirstOrDefault();

            Assert.AreEqual(expectedDate2021, dayOfMadrid.Date);
        }
예제 #18
0
        public ActionResult <IEnumerable <CountryDto> > AvailableCountries()
        {
            var countries = from CountryCode o in Enum.GetValues(typeof(CountryCode))
                            where DateSystem.GetPublicHolidays(DateTime.Today.Year, o).Any()
                            select new CountryDto {
                Key = o.ToString(), Value = this.GetCountryName(o)
            };

            return(StatusCode(StatusCodes.Status200OK, countries));
        }
예제 #19
0
        public void PuertoRicoHasGoodFridayHoliday()
        {
            var holidays = DateSystem.GetPublicHolidays(2017, CountryCode.PR);

            var catholic           = new MockPublicHolidayProvider(new CatholicProvider());
            var expectedGoodFriday = catholic.EasterSunday(2017).AddDays(-2);

            var goodFriday = holidays.First(holiday => holiday.Name == "Good Friday");

            Assert.IsNotNull(goodFriday);
            Assert.AreEqual(expectedGoodFriday.Day, goodFriday.Date.Day);
        }
예제 #20
0
        public ActionResult <IEnumerable <PublicHolidayDto> > NextPublicHolidays([FromRoute][Required] string countryCode)
        {
            var publicHolidays = DateSystem.GetPublicHolidays(DateTime.Today, DateTime.Today.AddYears(1), countryCode);

            if (publicHolidays?.Count() > 0)
            {
                var items = publicHolidays.Where(o => o.Type.HasFlag(PublicHolidayType.Public));
                return(StatusCode(StatusCodes.Status200OK, items.Adapt <PublicHolidayDto[]>()));
            }

            return(StatusCode(StatusCodes.Status404NotFound));
        }
예제 #21
0
        public static List <PublicHoliday> GetLateSummerBankHolidayNotScotland(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.GB).Where(h => h.LocalName == "Summer Bank Holiday" && h.Counties != null && h.Counties.Contains("GB-ENG")).FirstOrDefault();

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
예제 #22
0
        public static List <PublicHoliday> GetJan2ndScotlandHoliday(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.GB).Where(h => h.LocalName == "New Year's Day" && h.Counties != null && h.Counties.Contains("GB-SCT")).LastOrDefault();

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
예제 #23
0
        public static List <PublicHoliday> GetMayDay(DateTime startDate, DateTime endDate)
        {
            List <PublicHoliday> results = new List <PublicHoliday>();

            PublicHoliday holiday = DateSystem.GetPublicHolidays(startDate, endDate, CountryCode.GB).Where(h => h.LocalName == "Early May Bank Holiday").FirstOrDefault();

            if (holiday != null)
            {
                results.Add(holiday);
            }

            return(results);
        }
예제 #24
0
        public IActionResult Countries()
        {
            var countryCodes = (CountryCode[])Enum.GetValues(typeof(CountryCode));

            var availableCountryCodes = from CountryCode countryCode in countryCodes
                                        where DateSystem.GetPublicHolidays(DateTime.Today.Year, countryCode).Any()
                                        select countryCode;

            var countries = availableCountryCodes.Select(countryCode => new KeyValuePair <string, string>(countryCode.ToString(), this.GetName(countryCode)));

            ViewBag.Count     = countries.Count();
            ViewBag.Countries = countries;

            return(View());
        }
예제 #25
0
        public void TestChina2017()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(2017, CountryCode.CN).ToArray();
            var test1          = publicHolidays.Any(o => o.Date == new DateTime(2017, 10, 4) && o.Name == "Mid-Autumn Festival");
            var test2          = publicHolidays.Any(o => o.Date == new DateTime(2017, 4, 4) && o.Name == "Qingming Festival (Tomb-Sweeping Day)");

            //Set to warning till china provider is fixed
            //Assert.IsTrue(test1);
            //Assert.IsTrue(test2);

            if (!test1 || !test2)
            {
                Assert.Inconclusive("China provider have problems");
            }
        }
예제 #26
0
        public void CheckNoCorruptPublicHolidays()
        {
            var startYear = DateTime.Today.Year - 100;
            var endYear   = DateTime.Today.Year + 100;

            foreach (CountryCode countryCode in Enum.GetValues(typeof(CountryCode)))
            {
                for (var calculationYear = startYear; calculationYear < endYear; calculationYear++)
                {
                    var items = DateSystem.GetPublicHolidays(calculationYear, countryCode);
                    var corruptPublicHolidaysAvailable = items.Any(o => !o.Date.Year.Equals(calculationYear));
                    Assert.IsFalse(corruptPublicHolidaysAvailable, $"Check country {countryCode} {calculationYear}");
                    //Trace.WriteLineIf(corruptPublicHolidaysAvailable, $"Check country {countryCode} {calculationYear}");
                }
            }
        }
예제 #27
0
        public void TestGermanyLiberationDay2020()
        {
            var publicHolidays = DateSystem.GetPublicHolidays(
                new DateTime(2019, 5, 8),
                new DateTime(2021, 5, 8),
                CountryCode.DE);

            var liberationDays = publicHolidays.Where(x => x.LocalName == "Tag der Befreiung").ToList();
            var liberationDay  = liberationDays.FirstOrDefault();

            Assert.AreEqual(1, liberationDays.Count);
            Assert.IsNotNull(liberationDay);
            Assert.AreEqual(new DateTime(2020, 5, 8), liberationDay.Date);
            Assert.IsNotNull(liberationDay.Counties);
            Assert.AreEqual(1, liberationDay.Counties.Length);
            Assert.AreEqual("DE-BE", liberationDay.Counties[0]);
        }
예제 #28
0
        public ActionResult <IEnumerable <PublicHolidayDto> > PublicHolidays(
            [FromRoute][Required] int year,
            [FromRoute][Required] string countryCode)
        {
            if (!Enum.TryParse(countryCode, true, out CountryCode parsedCountryCode))
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            var items = DateSystem.GetPublicHolidays(year, parsedCountryCode);

            if (items?.Count() > 0)
            {
                return(StatusCode(StatusCodes.Status200OK, items.Adapt <PublicHolidayDto[]>()));
            }

            return(StatusCode(StatusCodes.Status404NotFound));
        }
예제 #29
0
        public ActionResult <IEnumerable <PublicHolidayDto> > CountryJson(
            [FromRoute][Required] string countryCode,
            [FromRoute][Required] int year)
        {
            if (!Enum.TryParse(countryCode, true, out CountryCode parsedCountryCode))
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            var publicHolidays = DateSystem.GetPublicHolidays(year, parsedCountryCode);

            if (publicHolidays?.Count() > 0)
            {
                var items = publicHolidays.Where(o => o.Type.HasFlag(PublicHolidayType.Public));
                return(StatusCode(StatusCodes.Status200OK, items.Adapt <PublicHolidayDto[]>()));
            }

            return(StatusCode(StatusCodes.Status404NotFound));
        }
예제 #30
0
        public ActionResult DownloadCsv(string countrycode, int year = 0)
        {
            if (year == 0)
            {
                year = DateTime.Now.Year;
            }

            if (!Enum.TryParse(countrycode, true, out CountryCode countryCode))
            {
                return(NotFound());
            }

            var items = DateSystem.GetPublicHolidays(year, countryCode).ToList();

            if (items.Count > 0)
            {
                using (var memoryStream = new MemoryStream())
                    using (var streamWriter = new StreamWriter(memoryStream))
                        using (var csv = new CsvWriter(streamWriter, CultureInfo.InvariantCulture))
                        {
                            var csvItems = items.Select(o => new PublicHolidayCsv(o)).ToArray();

                            csv.WriteRecords(csvItems);
                            streamWriter.Flush();

                            var csvData = memoryStream.ToArray();

                            var result = new FileContentResult(csvData, "application/octet-stream")
                            {
                                FileDownloadName = $"publicholiday.{countrycode}.{year}.csv"
                            };

                            return(result);
                        }
            }

            return(NotFound());
        }