Repository: vacanza/python-holidays

Issue:
Regression in holidays in the Netherlands
I noticed the change Update Netherlands holidays: add holiday categories #1552 broke my unit tests as it no longer considers Liberation day as a holiday on the 5yr interval even though it is a holiday for most people in the Netherlands every 5 years.

On Liberation day (Bevrijdingsdag) the majority of employees have a day off every 5 years (2005, 2010, 2015, etc.). This was the previous behaviour which worked as expected.

Now the 5-year rule of Liberation day is combined with Good Friday in the OPTIONAL category. This equates the status of Liberation day with Good Friday, but this is not logical. Good Fridays is more similar to Liberation Day on the non 5yr-years as those are still a bank holiday but fewer people have a guaranteed holiday than in the 5-yr years. There is no option to add the non-5yr holidays it seems.

The behaviour I would expect is:
- PUBLIC includes 5yr Liberation days
- OPTIONAL includes Good Friday and the non-5yr liberation days


Discussion:
Hi @harmbuisman and thanks for bringing this up!
I understand your concern about the breaking change introduced in #1552 . Sorry about that.

I found a couple of .nl resources mentioning "Liberation day":
  - https://www.government.nl/topics/working-hours/question-and-answer/public-holidays-in-the-netherlands
  - https://business.gov.nl/regulation/holiday-entitlement/#art:liberation-day-5-may

@KJhellico, should this be revisited based on the report and the resources informaion I've just mentioned?

Thank you!

Yes, it seems that information about Liberation Day in [Wiki](https://nl.wikipedia.org/wiki/Feestdagen_in_Nederland#Nationale_feestdagen) is not entirely correct: 

> 5 mei is sinds 1990 aangewezen als jaarlijkse nationale feestdag. Hiermee kwam een einde aan de situatie dat 5 mei alleen eens in de vijf jaar een nationale feestdag was.

@harmbuisman, thank you for this info, and sorry for inconvenience caused by these changes. I agree with this position:

> PUBLIC includes 5yr Liberation days
> OPTIONAL includes Good Friday and the non-5yr liberation days

but can you say whether there were any changes in 1990?
Hi, thanks for considering the changes. I was a kid in those days, but from what I understand is that. 

- Since 1990, Liberation Day has been a bank holiday every year during which people in some sectors are free (e.g., government), and every 5 years, most sectors have a holiday (as most labor agreements have this in).  (**1990**, 1991, 1992, 1993, 1994, **1995**, 1996, ... etc.),
- Before 1990, Liberation Day was a bank holiday every 5 years (so only **1950**, .. **1985**, **1990**).

Resolving patch:
diff --git a/holidays/countries/netherlands.py b/holidays/countries/netherlands.py
--- a/holidays/countries/netherlands.py
+++ b/holidays/countries/netherlands.py
@@ -67,6 +67,10 @@ def _populate_public_holidays(self):
                 dt += td(days=-1) if self._year >= 1980 else td(days=+1)
             self._add_holiday(name, dt)
 
+        if self._year >= 1950 and self._year % 5 == 0:
+            # Liberation Day.
+            self._add_holiday_may_5(tr("Bevrijdingsdag"))
+
         # Ascension Day.
         self._add_ascension_thursday(tr("Hemelvaartsdag"))
 
@@ -86,7 +90,7 @@ def _populate_optional_holidays(self):
         # Good Friday.
         self._add_good_friday(tr("Goede Vrijdag"))
 
-        if (self._year >= 1945 and self._year % 5 == 0) or self._year >= 1990:
+        if self._year >= 1990:
             # Liberation Day.
             self._add_holiday_may_5(tr("Bevrijdingsdag"))
 


Test patch:
diff --git a/tests/countries/test_netherlands.py b/tests/countries/test_netherlands.py
--- a/tests/countries/test_netherlands.py
+++ b/tests/countries/test_netherlands.py
@@ -108,12 +108,9 @@ def test_kings_day_after_2014_substituted_earlier(self):
         )
 
     def test_liberation_day(self):
-        opt_holidays = Netherlands(categories=OPTIONAL, years=range(1980, 2050))
         name = "Bevrijdingsdag"
         self.assertHolidayName(
             name,
-            opt_holidays,
-            "1945-05-05",
             "1950-05-05",
             "1955-05-05",
             "1960-05-05",
@@ -122,10 +119,23 @@ def test_liberation_day(self):
             "1975-05-05",
             "1980-05-05",
             "1985-05-05",
+            "1990-05-05",
+            "1995-05-05",
+            "2000-05-05",
+            "2005-05-05",
+            "2010-05-05",
+            "2015-05-05",
+            "2020-05-05",
+        )
+        self.assertNoHoliday(
+            "1949-05-05",
+            "1971-05-05",
+            "1991-05-05",
         )
-        self.assertHoliday(opt_holidays, (f"{year}-05-05" for year in range(1990, 2050)))
-        self.assertNoHoliday(opt_holidays, "1944-05-05", "1971-05-05")
-        self.assertNoHolidayName(name, Netherlands(categories=OPTIONAL, years=(1944, 1971)))
+
+        opt_holidays = Netherlands(categories=OPTIONAL, years=range(1980, 2050))
+        self.assertHolidayName(name, opt_holidays, (f"{year}-05-05" for year in range(1990, 2050)))
+        self.assertNoHolidayName(name, Netherlands(categories=OPTIONAL, years=(1949, 1971, 1989)))
 
     def test_2017(self):
         self.assertHolidays(
@@ -146,6 +156,7 @@ def test_2020(self):
             ("2020-04-12", "Eerste paasdag"),
             ("2020-04-13", "Tweede paasdag"),
             ("2020-04-27", "Koningsdag"),
+            ("2020-05-05", "Bevrijdingsdag"),
             ("2020-05-21", "Hemelvaartsdag"),
             ("2020-05-31", "Eerste Pinksterdag"),
             ("2020-06-01", "Tweede Pinksterdag"),