Repository: focus-shift/jollyday (java)

Issue:
Germany: Pentecost no public holiday in hessen
### Affected country

Germany

### Affected public holiday

Pentecost

### Source of the information

https://innen.hessen.de/buerger-staat/feiertage

### More information

_No response_

Pull request:
germany: pentecost no public holiday in hessen
closes #777

<!--

Thanks for contributing.
Please review the following notes before submitting you pull request.

Please look for other issues or pull requests which already work on this topic. Is somebody already on it? Do you need to synchronize?

# Security Vulnerabilities

🛑 STOP! 🛑 If your contribution fixes a security vulnerability, please do not submit it.
Instead, please write an E-Mail to to one of the maintainer with all the information
to recreate the security vulnerability.

# Describing Your Changes

If, having reviewed the notes above, you're ready to submit your pull request, please
provide a brief description of the proposed changes.

If they:
 🐞 fix a bug, please describe the broken behaviour and how the changes fix it.
    Please label with 'type: bug' and 'status: new'
    
 🎁 make an enhancement, please describe the new functionality and why you believe it's useful.
    Please label with 'type: enhancement' and 'status: new'
 
If your pull request relates to any existing issues,
please reference them by using the issue number prefixed with #.

-->


Patch:
diff --git a/jollyday-core/src/main/resources/holidays/Holidays_de.xml b/jollyday-core/src/main/resources/holidays/Holidays_de.xml
index 82ccf60e..910ced5b 100644
--- a/jollyday-core/src/main/resources/holidays/Holidays_de.xml
+++ b/jollyday-core/src/main/resources/holidays/Holidays_de.xml
@@ -124,8 +124,11 @@
         <Date month="NOVEMBER" day="23"/>
       </RelativeToFixed>
       <ChristianHoliday type="CORPUS_CHRISTI" descriptionPropertiesKey="christian.CORPUS_CHRISTI"/>
-      <ChristianHoliday type="PENTECOST" descriptionPropertiesKey="christian.PENTECOST"/>
     </Holidays>
+
+    <Sources>
+      <Source of="pentecost">https://innen.hessen.de/buerger-staat/feiertage</Source>
+    </Sources>
   </SubConfigurations>
 
   <SubConfigurations hierarchy="mv" description="Mecklenburg-Vorpommern">
@@ -161,8 +164,8 @@
 
   <SubConfigurations hierarchy="sl" description="Saarland">
     <Holidays>
-      <Fixed month="NOVEMBER" day="1" descriptionPropertiesKey="ALL_SAINTS"/>
       <Fixed month="AUGUST" day="15" descriptionPropertiesKey="ASSUMPTION_DAY"/>
+      <Fixed month="NOVEMBER" day="1" descriptionPropertiesKey="ALL_SAINTS"/>
       <RelativeToFixed validFrom="1945" validTo="1989" descriptionPropertiesKey="REPENTANCE_PRAYER">
         <Weekday>WEDNESDAY</Weekday>
         <When>BEFORE</When>
@@ -185,8 +188,8 @@
 
   <SubConfigurations hierarchy="st" description="Saxony-Anhalt">
     <Holidays>
-      <Fixed month="OCTOBER" day="31" descriptionPropertiesKey="REFORMATION_DAY"/>
       <Fixed month="JANUARY" day="6" descriptionPropertiesKey="EPIPHANY"/>
+      <Fixed month="OCTOBER" day="31" descriptionPropertiesKey="REFORMATION_DAY"/>
     </Holidays>
   </SubConfigurations>
 
diff --git a/jollyday-core/src/main/resources/holidays/Holidays_nl.xml b/jollyday-core/src/main/resources/holidays/Holidays_nl.xml
index b0690257..77130fdf 100644
--- a/jollyday-core/src/main/resources/holidays/Holidays_nl.xml
+++ b/jollyday-core/src/main/resources/holidays/Holidays_nl.xml
@@ -20,7 +20,7 @@
     <Fixed month="MAY" day="5" validFrom="1990" descriptionPropertiesKey="LIBERATION"/>
     <Fixed month="DECEMBER" day="25" descriptionPropertiesKey="FIRST_CHRISTMAS_DAY"/>
     <Fixed month="DECEMBER" day="26" descriptionPropertiesKey="SECOND_CHRISTMAS_DAY"/>
-    <ChristianHoliday type="GOOD_FRIDAY" descriptionPropertiesKey="christian.GOOD_FRIDAY" localizedType="OBSERVANCE"/>
+    <ChristianHoliday type="GOOD_FRIDAY" descriptionPropertiesKey="christian.GOOD_FRIDAY"/>
     <ChristianHoliday type="EASTER" descriptionPropertiesKey="christian.EASTER"/>
     <ChristianHoliday type="EASTER_MONDAY" validFrom="1642" descriptionPropertiesKey="christian.EASTER_MONDAY"/>
     <ChristianHoliday type="ASCENSION_DAY" descriptionPropertiesKey="christian.ASCENSION_DAY"/>


Test patch:
diff --git a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayDETest.java b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayDETest.java
index af5c8aa9..8e95503e 100644
--- a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayDETest.java
+++ b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayDETest.java
@@ -6,11 +6,15 @@ import java.time.Year;
 
 import static de.focus_shift.jollyday.core.HolidayCalendar.GERMANY;
 import static de.focus_shift.jollyday.tests.CalendarCheckerApi.assertFor;
+import static java.time.Month.AUGUST;
 import static java.time.Month.DECEMBER;
 import static java.time.Month.JANUARY;
 import static java.time.Month.JUNE;
+import static java.time.Month.MARCH;
 import static java.time.Month.MAY;
+import static java.time.Month.NOVEMBER;
 import static java.time.Month.OCTOBER;
+import static java.time.Month.SEPTEMBER;
 
 class HolidayDETest {
 
@@ -36,7 +40,80 @@ class HolidayDETest {
       .hasChristianHoliday("GOOD_FRIDAY").and()
       .hasChristianHoliday("EASTER_MONDAY").and()
       .hasChristianHoliday("ASCENSION_DAY").and()
-      .hasChristianHoliday("WHIT_MONDAY")
+      .hasChristianHoliday("WHIT_MONDAY").and()
+
+      /* Berlin */
+
+      /* Brandenburg */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).inSubdivision("bb").and()
+      .hasChristianHoliday("EASTER").inSubdivision("bb").and()
+      .hasChristianHoliday("PENTECOST").inSubdivision("bb").and()
+
+      /* Baden-Württemberg */
+      .hasFixedHoliday("EPIPHANY", JANUARY, 6).inSubdivision("bw").and()
+      .hasFixedHoliday("ALL_SAINTS", NOVEMBER, 1).inSubdivision("bw").and()
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("bw").and()
+
+      /* Bavaria */
+      .hasFixedHoliday("EPIPHANY", JANUARY, 6).inSubdivision("by").and()
+      .hasFixedHoliday("ALL_SAINTS", NOVEMBER, 1).inSubdivision("by").and()
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("by").and()
+
+      /* Munich */
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("by", "mu").and()
+      /* Augsburg */
+      .hasFixedHoliday("PEACE", AUGUST, 8).inSubdivision("by", "ag").and()
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("by", "ag").and()
+      /* Würzburg */
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("by", "wu").and()
+      /* Regensburg */
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("by", "re").and()
+      /* Ingolstadt */
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("by", "in").and()
+
+      /* Hessen */
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("he").and()
+
+      /* Mecklenburg-Vorpommern */
+      .hasFixedHoliday("INTERNATIONAL_WOMAN", MARCH, 8).between(Year.of(2023), Year.of(2500)).inSubdivision("mv").and()
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).inSubdivision("mv").and()
+
+      /* North Rhine-Westphalia */
+      .hasFixedHoliday("ALL_SAINTS", NOVEMBER, 1).inSubdivision("nw").and()
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("nw").and()
+
+      /* Rhineland-Palatinate */
+      .hasFixedHoliday("ALL_SAINTS", NOVEMBER, 1).inSubdivision("rp").and()
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("rp").and()
+
+      /* Saarland */
+      .hasFixedHoliday("ALL_SAINTS", NOVEMBER, 1).inSubdivision("sl").and()
+      .hasFixedHoliday("ASSUMPTION_DAY", AUGUST, 15).inSubdivision("sl").and()
+      .hasChristianHoliday("CORPUS_CHRISTI").inSubdivision("sl").and()
+
+      /* Saxony */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).inSubdivision("sn").and()
+
+      /* Saxony-Anhalt */
+      .hasFixedHoliday("EPIPHANY", JANUARY, 6).inSubdivision("st").and()
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).inSubdivision("st").and()
+
+      /* Thuringia */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).inSubdivision("th").and()
+      .hasFixedHoliday("CHILDRENS_DAY", SEPTEMBER, 20).between(Year.of(2019), Year.of(2500)).inSubdivision("th").and()
+
+      /* Schleswig-Holstein */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).between(Year.of(2018), Year.of(2500)).inSubdivision("sh").and()
+
+      /* Hamburg */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).between(Year.of(2018), Year.of(2500)).inSubdivision("hh").and()
+
+      /* Bremen */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).between(Year.of(2018), Year.of(2500)).inSubdivision("hb").and()
+
+      /* Lower-Saxony */
+      .hasFixedHoliday("REFORMATION_DAY", OCTOBER, 31).between(Year.of(2018), Year.of(2500)).inSubdivision("ni")
+
       .check();
   }
 }
diff --git a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayNLTest.java b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayNLTest.java
index 4fefdab4..224d9861 100644
--- a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayNLTest.java
+++ b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/country/HolidayNLTest.java
@@ -12,7 +12,6 @@ import java.time.Year;
 import java.util.Set;
 
 import static de.focus_shift.jollyday.core.HolidayCalendar.NETHERLANDS;
-import static de.focus_shift.jollyday.core.HolidayType.OBSERVANCE;
 import static de.focus_shift.jollyday.core.HolidayType.PUBLIC_HOLIDAY;
 import static de.focus_shift.jollyday.core.ManagerParameters.create;
 import static de.focus_shift.jollyday.tests.CalendarCheckerApi.assertFor;
@@ -58,7 +57,7 @@ class HolidayNLTest {
       .and()
       .hasFixedHoliday("FIRST_CHRISTMAS_DAY", DECEMBER, 25).and()
       .hasFixedHoliday("SECOND_CHRISTMAS_DAY", DECEMBER, 26).and()
-      .hasChristianHoliday("GOOD_FRIDAY", OBSERVANCE).and()
+      .hasChristianHoliday("GOOD_FRIDAY").and()
       .hasChristianHoliday("EASTER").and()
       .hasChristianHoliday("EASTER_MONDAY").and()
       .hasChristianHoliday("ASCENSION_DAY").and()