Repository: vacanza/holidays
Pull request #2253 (2025-01-29 17:09:18)

Update Germany holidays: add Corpus Christi in CATHOLIC category
<!--
  Thanks for contributing to holidays!
-->

## Proposed change

<!--
  Describe the big picture of your changes.
  Don't forget to link your PR to an existing issue if any.
-->

Update Germany holidays:
- add Corpus Christi in CATHOLIC category
- update tests

## Type of change

<!--
  Type of change you want to introduce. Please, check one (1) box only!
  If your PR requires multiple boxes to be checked, most likely it needs to
  be split into multiple PRs.
-->

- [ ] New country/market holidays support (thank you!)
- [x] Supported country/market holidays update (calendar discrepancy fix, localization)
- [ ] Existing code/documentation/test/process quality improvement (best practice, cleanup, refactoring, optimization)
- [ ] Dependency update (version deprecation/pin/upgrade)
- [ ] Bugfix (non-breaking change which fixes an issue)
- [ ] Breaking change (a code change causing existing functionality to break)
- [ ] New feature (new `holidays` functionality in general)

## Checklist

<!--
  Put an `x` in the boxes that apply. You can change them after PR is created.
-->

- [x] I've followed the [contributing guidelines][contributing-guidelines]
- [x] I've successfully run `make check`, all checks and tests are green

<!--
  Thanks again for your contribution!
-->

[contributing-guidelines]: https://github.com/vacanza/holidays/blob/dev/CONTRIBUTING.rst
[docs]: https://github.com/vacanza/holidays/tree/dev/docs/source


sonarqubecloud[bot]: ## [![Quality Gate Passed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-passed-20px.png 'Quality Gate Passed')](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2253) **Quality Gate passed**  
Issues  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [2 New issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2253&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/accepted-16px.png '') [0 Accepted issues](https://sonarcloud.io/project/issues?id=vacanza_python-holidays&pullRequest=2253&issueStatuses=ACCEPTED)

Measures  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0 Security Hotspots](https://sonarcloud.io/project/security_hotspots?id=vacanza_python-holidays&pullRequest=2253&issueStatuses=OPEN,CONFIRMED&sinceLeakPeriod=true)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2253&metric=new_coverage&view=list)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/passed-16px.png '') [0.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=vacanza_python-holidays&pullRequest=2253&metric=new_duplicated_lines_density&view=list)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=vacanza_python-holidays&pullRequest=2253)


codecov[bot]: ## [Codecov](https://app.codecov.io/gh/vacanza/holidays/pull/2253?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) Report
All modified and coverable lines are covered by tests :white_check_mark:
> Project coverage is 100.00%. Comparing base [(`a27462a`)](https://app.codecov.io/gh/vacanza/holidays/commit/a27462a2ff9db77e60168585bd809f6c4c109540?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza) to head [(`89620bb`)](https://app.codecov.io/gh/vacanza/holidays/commit/89620bbb3b3c1d82d7fac1c78c38b654d30fa484?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).
> Report is 2 commits behind head on dev.

<details><summary>Additional details and impacted files</summary>


```diff
@@            Coverage Diff            @@
##               dev     #2253   +/-   ##
=========================================
  Coverage   100.00%   100.00%           
=========================================
  Files          196       196           
  Lines        11893     11934   +41     
  Branches      1715      1721    +6     
=========================================
+ Hits         11893     11934   +41     
```

</details>

[:umbrella: View full report in Codecov by Sentry](https://app.codecov.io/gh/vacanza/holidays/pull/2253?dropdown=coverage&src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).   
:loudspeaker: Have feedback on the report? [Share it here](https://about.codecov.io/codecov-pr-comment-feedback/?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=vacanza).


Patch:
diff --git a/.github/workflows/update-snapshots.yml b/.github/workflows/update-snapshots.yml
index ff1af845..bf2f72ce 100644
--- a/.github/workflows/update-snapshots.yml
+++ b/.github/workflows/update-snapshots.yml
@@ -24,7 +24,7 @@ jobs:
           cache: pip
           cache-dependency-path: |
             requirements/build.txt
-            requirements/dev.txt
+            requirements/runtime.txt
           check-latest: true
           python-version: '3.12'
 
@@ -32,9 +32,7 @@ jobs:
         run: |
           python -m pip install --upgrade pip
           python -m pip install -r requirements/build.txt
-          python -m pip install -r requirements/dev.txt
-          make package
-          python -m pip install dist/*.tar.gz
+          python -m pip install -r requirements/runtime.txt
 
       - name: Generate snapshots
         run: |
diff --git a/holidays/countries/germany.py b/holidays/countries/germany.py
index 9a61b958..cfabf680 100644
--- a/holidays/countries/germany.py
+++ b/holidays/countries/germany.py
@@ -29,28 +29,9 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
     doesn't really make sense to include the days from the two former
     countries.
 
-    Note that Germany doesn't have rules for holidays that happen on a
-    Sunday. Those holidays are still holiday days but there is no additional
-    day to make up for the "lost" day.
-
-    Also note that German holidays are partly declared by each province there
-    are some weired edge cases:
-
-        - "Mariä Himmelfahrt" is only a holiday in Bavaria (BY) if your
-          municipality is mostly catholic which in term depends on census data.
-          Since we don't have this data but most municipalities in Bavaria
-          *are* mostly catholic, we count that as holiday for whole Bavaria.
-          We added BYP for the municipality in Bavaria with more protestants.
-          Here this is excluded.
-        - There is an "Augsburger Friedensfest" which only exists in the town
-          Augsburg. This is excluded for Bavaria.
-        - "Gründonnerstag" (Thursday before easter) is not a holiday but pupils
-           don't have to go to school (but only in Baden Württemberg) which is
-           solved by adjusting school holidays to include this day. It is
-           excluded from our list.
-        - "Fronleichnam" is a holiday in certain, explicitly defined
-          municipalities in Saxony (SN) and Thuringia (TH). We exclude it from
-          both provinces.
+    "Mariä Himmelfahrt" is only a holiday in Bavaria (BY) and "Fronleichnam"
+    in Saxony (SN) and Thuringia (TH) if municipality is mostly catholic which
+    in term depends on census data. It's listed in "CATHOLIC" category for these provinces.
     """
 
     country = "DE"
@@ -229,6 +210,10 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
         if self._year >= 1995:
             self._add_holiday_1st_wed_before_nov_22(tr("Buß- und Bettag"))
 
+    def _populate_subdiv_sn_catholic_holidays(self):
+        if self._year >= 1991:
+            self._add_corpus_christi_day(tr("Fronleichnam"))
+
     def _populate_subdiv_st_public_holidays(self):
         if self._year >= 1991:
             self._add_epiphany_day(tr("Heilige Drei Könige"))
@@ -242,6 +227,10 @@ class Germany(HolidayBase, ChristianHolidays, InternationalHolidays, StaticHolid
 
         self._add_holiday_oct_31(tr("Reformationstag"))
 
+    def _populate_subdiv_th_catholic_holidays(self):
+        if self._year >= 1991:
+            self._add_corpus_christi_day(tr("Fronleichnam"))
+
 
 class DE(Germany):
     pass
diff --git a/holidays/countries/sweden.py b/holidays/countries/sweden.py
index 8176085a..ec58132c 100644
--- a/holidays/countries/sweden.py
+++ b/holidays/countries/sweden.py
@@ -30,6 +30,9 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
     Primary sources:
         - https://sv.wikipedia.org/wiki/Helgdagar_i_Sverige
         - http://www.riksdagen.se/sv/dokument-lagar/dokument/svensk-forfattningssamling/lag-1989253-om-allmanna-helgdagar_sfs-1989-253
+        - https://sv.wikipedia.org/wiki/F%C3%B6rsta_maj
+        - https://sv.wikipedia.org/wiki/Sveriges_nationaldag
+        - https://sv.wikipedia.org/wiki/Midsommarafton
     """
 
     country = "SE"
@@ -66,7 +69,6 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
         # Easter Monday.
         self._add_easter_monday(tr("Annandag påsk"))
 
-        # Source: https://sv.wikipedia.org/wiki/F%C3%B6rsta_maj
         if self._year >= 1939:
             # May Day.
             self._add_labor_day(tr("Första maj"))
@@ -74,7 +76,6 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
         # Ascension Day.
         self._add_ascension_thursday(tr("Kristi himmelsfärdsdag"))
 
-        # Source: https://sv.wikipedia.org/wiki/Sveriges_nationaldag
         if self._year >= 2005:
             # National Day of Sweden.
             self._add_holiday_jun_6(tr("Sveriges nationaldag"))
@@ -86,11 +87,6 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
             # Whit Monday.
             self._add_whit_monday(tr("Annandag pingst"))
 
-        # Source:
-        # https://sv.wikipedia.org/wiki/Midsommarafton
-        # https://www.nordiskamuseet.se/aretsdagar/midsommarafton
-        # Midsummer evening. Friday between June 19th and June 25th
-
         # Midsummer Eve.
         name = tr("Midsommarafton")
         dt = (
@@ -102,8 +98,9 @@ class Sweden(HolidayBase, ChristianHolidays, InternationalHolidays):
         # Midsummer Day.
         self._add_holiday(tr("Midsommardagen"), _timedelta(dt, +1))
 
-        # All Saints' Day.
-        self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
+        if self._year >= 1953:
+            # All Saints' Day.
+            self._add_holiday_1st_sat_from_oct_31(tr("Alla helgons dag"))
 
         # Christmas Eve.
         self._add_christmas_eve(tr("Julafton"))
diff --git a/requirements/build.txt b/requirements/build.txt
index 4d2398e3..6654e144 100644
--- a/requirements/build.txt
+++ b/requirements/build.txt
@@ -1,3 +1,3 @@
 build==1.2.2.post1
-cyclonedx-bom==5.1.1
+cyclonedx-bom==5.1.2
 polib==1.2.0
diff --git a/requirements/dev.txt b/requirements/dev.txt
index b499668d..da1d07f2 100644
--- a/requirements/dev.txt
+++ b/requirements/dev.txt
@@ -7,7 +7,7 @@ hijridate==2.5.0
 lingva==5.0.4
 pre-commit==4.1.0
 pygithub==2.5.0
-ruff==0.9.2
+ruff==0.9.3
 tox==4.24.1
 urllib3>=2.2.2 # not directly required, pinned by Snyk to avoid a vulnerability
 zipp>=3.19.1 # not directly required, pinned by Snyk to avoid a vulnerability
diff --git a/snapshots/countries/DE_SN.json b/snapshots/countries/DE_SN.json
index 8a6b9228..dcf93e30 100644
--- a/snapshots/countries/DE_SN.json
+++ b/snapshots/countries/DE_SN.json
@@ -10,6 +10,7 @@
     "1991-05-01": "Labor Day",
     "1991-05-09": "Ascension Day",
     "1991-05-20": "Whit Monday",
+    "1991-05-30": "Corpus Christi",
     "1991-10-03": "German Unity Day",
     "1991-10-31": "Reformation Day",
     "1991-11-20": "Repentance and Prayer Day",
@@ -21,6 +22,7 @@
     "1992-05-01": "Labor Day",
     "1992-05-28": "Ascension Day",
     "1992-06-08": "Whit Monday",
+    "1992-06-18": "Corpus Christi",
     "1992-10-03": "German Unity Day",
     "1992-10-31": "Reformation Day",
     "1992-11-18": "Repentance and Prayer Day",
@@ -32,6 +34,7 @@
     "1993-05-01": "Labor Day",
     "1993-05-20": "Ascension Day",
     "1993-05-31": "Whit Monday",
+    "1993-06-10": "Corpus Christi",
     "1993-10-03": "German Unity Day",
     "1993-10-31": "Reformation Day",
     "1993-11-17": "Repentance and Prayer Day",
@@ -43,6 +46,7 @@
     "1994-05-01": "Labor Day",
     "1994-05-12": "Ascension Day",
     "1994-05-23": "Whit Monday",
+    "1994-06-02": "Corpus Christi",
     "1994-10-03": "German Unity Day",
     "1994-10-31": "Reformation Day",
     "1994-11-16": "Repentance and Prayer Day",
@@ -54,6 +58,7 @@
     "1995-05-01": "Labor Day",
     "1995-05-25": "Ascension Day",
     "1995-06-05": "Whit Monday",
+    "1995-06-15": "Corpus Christi",
     "1995-10-03": "German Unity Day",
     "1995-10-31": "Reformation Day",
     "1995-11-22": "Repentance and Prayer Day",
@@ -65,6 +70,7 @@
     "1996-05-01": "Labor Day",
     "1996-05-16": "Ascension Day",
     "1996-05-27": "Whit Monday",
+    "1996-06-06": "Corpus Christi",
     "1996-10-03": "German Unity Day",
     "1996-10-31": "Reformation Day",
     "1996-11-20": "Repentance and Prayer Day",
@@ -76,6 +82,7 @@
     "1997-05-01": "Labor Day",
     "1997-05-08": "Ascension Day",
     "1997-05-19": "Whit Monday",
+    "1997-05-29": "Corpus Christi",
     "1997-10-03": "German Unity Day",
     "1997-10-31": "Reformation Day",
     "1997-11-19": "Repentance and Prayer Day",
@@ -87,6 +94,7 @@
     "1998-05-01": "Labor Day",
     "1998-05-21": "Ascension Day",
     "1998-06-01": "Whit Monday",
+    "1998-06-11": "Corpus Christi",
     "1998-10-03": "German Unity Day",
     "1998-10-31": "Reformation Day",
     "1998-11-18": "Repentance and Prayer Day",
@@ -98,6 +106,7 @@
     "1999-05-01": "Labor Day",
     "1999-05-13": "Ascension Day",
     "1999-05-24": "Whit Monday",
+    "1999-06-03": "Corpus Christi",
     "1999-10-03": "German Unity Day",
     "1999-10-31": "Reformation Day",
     "1999-11-17": "Repentance and Prayer Day",
@@ -109,6 +118,7 @@
     "2000-05-01": "Labor Day",
     "2000-06-01": "Ascension Day",
     "2000-06-12": "Whit Monday",
+    "2000-06-22": "Corpus Christi",
     "2000-10-03": "German Unity Day",
     "2000-10-31": "Reformation Day",
     "2000-11-22": "Repentance and Prayer Day",
@@ -120,6 +130,7 @@
     "2001-05-01": "Labor Day",
     "2001-05-24": "Ascension Day",
     "2001-06-04": "Whit Monday",
+    "2001-06-14": "Corpus Christi",
     "2001-10-03": "German Unity Day",
     "2001-10-31": "Reformation Day",
     "2001-11-21": "Repentance and Prayer Day",
@@ -131,6 +142,7 @@
     "2002-05-01": "Labor Day",
     "2002-05-09": "Ascension Day",
     "2002-05-20": "Whit Monday",
+    "2002-05-30": "Corpus Christi",
     "2002-10-03": "German Unity Day",
     "2002-10-31": "Reformation Day",
     "2002-11-20": "Repentance and Prayer Day",
@@ -142,6 +154,7 @@
     "2003-05-01": "Labor Day",
     "2003-05-29": "Ascension Day",
     "2003-06-09": "Whit Monday",
+    "2003-06-19": "Corpus Christi",
     "2003-10-03": "German Unity Day",
     "2003-10-31": "Reformation Day",
     "2003-11-19": "Repentance and Prayer Day",
@@ -153,6 +166,7 @@
     "2004-05-01": "Labor Day",
     "2004-05-20": "Ascension Day",
     "2004-05-31": "Whit Monday",
+    "2004-06-10": "Corpus Christi",
     "2004-10-03": "German Unity Day",
     "2004-10-31": "Reformation Day",
     "2004-11-17": "Repentance and Prayer Day",
@@ -164,6 +178,7 @@
     "2005-05-01": "Labor Day",
     "2005-05-05": "Ascension Day",
     "2005-05-16": "Whit Monday",
+    "2005-05-26": "Corpus Christi",
     "2005-10-03": "German Unity Day",
     "2005-10-31": "Reformation Day",
     "2005-11-16": "Repentance and Prayer Day",
@@ -175,6 +190,7 @@
     "2006-05-01": "Labor Day",
     "2006-05-25": "Ascension Day",
     "2006-06-05": "Whit Monday",
+    "2006-06-15": "Corpus Christi",
     "2006-10-03": "German Unity Day",
     "2006-10-31": "Reformation Day",
     "2006-11-22": "Repentance and Prayer Day",
@@ -186,6 +202,7 @@
     "2007-05-01": "Labor Day",
     "2007-05-17": "Ascension Day",
     "2007-05-28": "Whit Monday",
+    "2007-06-07": "Corpus Christi",
     "2007-10-03": "German Unity Day",
     "2007-10-31": "Reformation Day",
     "2007-11-21": "Repentance and Prayer Day",
@@ -196,6 +213,7 @@
     "2008-03-24": "Easter Monday",
     "2008-05-01": "Ascension Day; Labor Day",
     "2008-05-12": "Whit Monday",
+    "2008-05-22": "Corpus Christi",
     "2008-10-03": "German Unity Day",
     "2008-10-31": "Reformation Day",
     "2008-11-19": "Repentance and Prayer Day",
@@ -207,6 +225,7 @@
     "2009-05-01": "Labor Day",
     "2009-05-21": "Ascension Day",
     "2009-06-01": "Whit Monday",
+    "2009-06-11": "Corpus Christi",
     "2009-10-03": "German Unity Day",
     "2009-10-31": "Reformation Day",
     "2009-11-18": "Repentance and Prayer Day",
@@ -218,6 +237,7 @@
     "2010-05-01": "Labor Day",
     "2010-05-13": "Ascension Day",
     "2010-05-24": "Whit Monday",
+    "2010-06-03": "Corpus Christi",
     "2010-10-03": "German Unity Day",
     "2010-10-31": "Reformation Day",
     "2010-11-17": "Repentance and Prayer Day",
@@ -229,6 +249,7 @@
     "2011-05-01": "Labor Day",
     "2011-06-02": "Ascension Day",
     "2011-06-13": "Whit Monday",
+    "2011-06-23": "Corpus Christi",
     "2011-10-03": "German Unity Day",
     "2011-10-31": "Reformation Day",
     "2011-11-16": "Repentance and Prayer Day",
@@ -240,6 +261,7 @@
     "2012-05-01": "Labor Day",
     "2012-05-17": "Ascension Day",
     "2012-05-28": "Whit Monday",
+    "2012-06-07": "Corpus Christi",
     "2012-10-03": "German Unity Day",
     "2012-10-31": "Reformation Day",
     "2012-11-21": "Repentance and Prayer Day",
@@ -251,6 +273,7 @@
     "2013-05-01": "Labor Day",
     "2013-05-09": "Ascension Day",
     "2013-05-20": "Whit Monday",
+    "2013-05-30": "Corpus Christi",
     "2013-10-03": "German Unity Day",
     "2013-10-31": "Reformation Day",
     "2013-11-20": "Repentance and Prayer Day",
@@ -262,6 +285,7 @@
     "2014-05-01": "Labor Day",
     "2014-05-29": "Ascension Day",
     "2014-06-09": "Whit Monday",
+    "2014-06-19": "Corpus Christi",
     "2014-10-03": "German Unity Day",
     "2014-10-31": "Reformation Day",
     "2014-11-19": "Repentance and Prayer Day",
@@ -273,6 +297,7 @@
     "2015-05-01": "Labor Day",
     "2015-05-14": "Ascension Day",
     "2015-05-25": "Whit Monday",
+    "2015-06-04": "Corpus Christi",
     "2015-10-03": "German Unity Day",
     "2015-10-31": "Reformation Day",
     "2015-11-18": "Repentance and Prayer Day",
@@ -284,6 +309,7 @@
     "2016-05-01": "Labor Day",
     "2016-05-05": "Ascension Day",
     "2016-05-16": "Whit Monday",
+    "2016-05-26": "Corpus Christi",
     "2016-10-03": "German Unity Day",
     "2016-10-31": "Reformation Day",
     "2016-11-16": "Repentance and Prayer Day",
@@ -295,6 +321,7 @@
     "2017-05-01": "Labor Day",
     "2017-05-25": "Ascension Day",
     "2017-06-05": "Whit Monday",
+    "2017-06-15": "Corpus Christi",
     "2017-10-03": "German Unity Day",
     "2017-10-31": "Reformation Day",
     "2017-11-22": "Repentance and Prayer Day",
@@ -306,6 +333,7 @@
     "2018-05-01": "Labor Day",
     "2018-05-10": "Ascension Day",
     "2018-05-21": "Whit Monday",
+    "2018-05-31": "Corpus Christi",
     "2018-10-03": "German Unity Day",
     "2018-10-31": "Reformation Day",
     "2018-11-21": "Repentance and Prayer Day",
@@ -317,6 +345,7 @@
     "2019-05-01": "Labor Day",
     "2019-05-30": "Ascension Day",
     "2019-06-10": "Whit Monday",
+    "2019-06-20": "Corpus Christi",
     "2019-10-03": "German Unity Day",
     "2019-10-31": "Reformation Day",
     "2019-11-20": "Repentance and Prayer Day",
@@ -328,6 +357,7 @@
     "2020-05-01": "Labor Day",
     "2020-05-21": "Ascension Day",
     "2020-06-01": "Whit Monday",
+    "2020-06-11": "Corpus Christi",
     "2020-10-03": "German Unity Day",
     "2020-10-31": "Reformation Day",
     "2020-11-18": "Repentance and Prayer Day",
@@ -339,6 +369,7 @@
     "2021-05-01": "Labor Day",
     "2021-05-13": "Ascension Day",
     "2021-05-24": "Whit Monday",
+    "2021-06-03": "Corpus Christi",
     "2021-10-03": "German Unity Day",
     "2021-10-31": "Reformation Day",
     "2021-11-17": "Repentance and Prayer Day",
@@ -350,6 +381,7 @@
     "2022-05-01": "Labor Day",
     "2022-05-26": "Ascension Day",
     "2022-06-06": "Whit Monday",
+    "2022-06-16": "Corpus Christi",
     "2022-10-03": "German Unity Day",
     "2022-10-31": "Reformation Day",
     "2022-11-16": "Repentance and Prayer Day",
@@ -361,6 +393,7 @@
     "2023-05-01": "Labor Day",
     "2023-05-18": "Ascension Day",
     "2023-05-29": "Whit Monday",
+    "2023-06-08": "Corpus Christi",
     "2023-10-03": "German Unity Day",
     "2023-10-31": "Reformation Day",
     "2023-11-22": "Repentance and Prayer Day",
@@ -372,6 +405,7 @@
     "2024-05-01": "Labor Day",
     "2024-05-09": "Ascension Day",
     "2024-05-20": "Whit Monday",
+    "2024-05-30": "Corpus Christi",
     "2024-10-03": "German Unity Day",
     "2024-10-31": "Reformation Day",
     "2024-11-20": "Repentance and Prayer Day",
@@ -383,6 +417,7 @@
     "2025-05-01": "Labor Day",
     "2025-05-29": "Ascension Day",
     "2025-06-09": "Whit Monday",
+    "2025-06-19": "Corpus Christi",
     "2025-10-03": "German Unity Day",
     "2025-10-31": "Reformation Day",
     "2025-11-19": "Repentance and Prayer Day",
@@ -394,6 +429,7 @@
     "2026-05-01": "Labor Day",
     "2026-05-14": "Ascension Day",
     "2026-05-25": "Whit Monday",
+    "2026-06-04": "Corpus Christi",
     "2026-10-03": "German Unity Day",
     "2026-10-31": "Reformation Day",
     "2026-11-18": "Repentance and Prayer Day",
@@ -405,6 +441,7 @@
     "2027-05-01": "Labor Day",
     "2027-05-06": "Ascension Day",
     "2027-05-17": "Whit Monday",
+    "2027-05-27": "Corpus Christi",
     "2027-10-03": "German Unity Day",
     "2027-10-31": "Reformation Day",
     "2027-11-17": "Repentance and Prayer Day",
@@ -416,6 +453,7 @@
     "2028-05-01": "Labor Day",
     "2028-05-25": "Ascension Day",
     "2028-06-05": "Whit Monday",
+    "2028-06-15": "Corpus Christi",
     "2028-10-03": "German Unity Day",
     "2028-10-31": "Reformation Day",
     "2028-11-22": "Repentance and Prayer Day",
@@ -427,6 +465,7 @@
     "2029-05-01": "Labor Day",
     "2029-05-10": "Ascension Day",
     "2029-05-21": "Whit Monday",
+    "2029-05-31": "Corpus Christi",
     "2029-10-03": "German Unity Day",
     "2029-10-31": "Reformation Day",
     "2029-11-21": "Repentance and Prayer Day",
@@ -438,6 +477,7 @@
     "2030-05-01": "Labor Day",
     "2030-05-30": "Ascension Day",
     "2030-06-10": "Whit Monday",
+    "2030-06-20": "Corpus Christi",
     "2030-10-03": "German Unity Day",
     "2030-10-31": "Reformation Day",
     "2030-11-20": "Repentance and Prayer Day",
@@ -449,6 +489,7 @@
     "2031-05-01": "Labor Day",
     "2031-05-22": "Ascension Day",
     "2031-06-02": "Whit Monday",
+    "2031-06-12": "Corpus Christi",
     "2031-10-03": "German Unity Day",
     "2031-10-31": "Reformation Day",
     "2031-11-19": "Repentance and Prayer Day",
@@ -460,6 +501,7 @@
     "2032-05-01": "Labor Day",
     "2032-05-06": "Ascension Day",
     "2032-05-17": "Whit Monday",
+    "2032-05-27": "Corpus Christi",
     "2032-10-03": "German Unity Day",
     "2032-10-31": "Reformation Day",
     "2032-11-17": "Repentance and Prayer Day",
@@ -471,6 +513,7 @@
     "2033-05-01": "Labor Day",
     "2033-05-26": "Ascension Day",
     "2033-06-06": "Whit Monday",
+    "2033-06-16": "Corpus Christi",
     "2033-10-03": "German Unity Day",
     "2033-10-31": "Reformation Day",
     "2033-11-16": "Repentance and Prayer Day",
@@ -482,6 +525,7 @@
     "2034-05-01": "Labor Day",
     "2034-05-18": "Ascension Day",
     "2034-05-29": "Whit Monday",
+    "2034-06-08": "Corpus Christi",
     "2034-10-03": "German Unity Day",
     "2034-10-31": "Reformation Day",
     "2034-11-22": "Repentance and Prayer Day",
@@ -493,6 +537,7 @@
     "2035-05-01": "Labor Day",
     "2035-05-03": "Ascension Day",
     "2035-05-14": "Whit Monday",
+    "2035-05-24": "Corpus Christi",
     "2035-10-03": "German Unity Day",
     "2035-10-31": "Reformation Day",
     "2035-11-21": "Repentance and Prayer Day",
@@ -504,6 +549,7 @@
     "2036-05-01": "Labor Day",
     "2036-05-22": "Ascension Day",
     "2036-06-02": "Whit Monday",
+    "2036-06-12": "Corpus Christi",
     "2036-10-03": "German Unity Day",
     "2036-10-31": "Reformation Day",
     "2036-11-19": "Repentance and Prayer Day",
@@ -515,6 +561,7 @@
     "2037-05-01": "Labor Day",
     "2037-05-14": "Ascension Day",
     "2037-05-25": "Whit Monday",
+    "2037-06-04": "Corpus Christi",
     "2037-10-03": "German Unity Day",
     "2037-10-31": "Reformation Day",
     "2037-11-18": "Repentance and Prayer Day",
@@ -526,6 +573,7 @@
     "2038-05-01": "Labor Day",
     "2038-06-03": "Ascension Day",
     "2038-06-14": "Whit Monday",
+    "2038-06-24": "Corpus Christi",
     "2038-10-03": "German Unity Day",
     "2038-10-31": "Reformation Day",
     "2038-11-17": "Repentance and Prayer Day",
@@ -537,6 +585,7 @@
     "2039-05-01": "Labor Day",
     "2039-05-19": "Ascension Day",
     "2039-05-30": "Whit Monday",
+    "2039-06-09": "Corpus Christi",
     "2039-10-03": "German Unity Day",
     "2039-10-31": "Reformation Day",
     "2039-11-16": "Repentance and Prayer Day",
@@ -548,6 +597,7 @@
     "2040-05-01": "Labor Day",
     "2040-05-10": "Ascension Day",
     "2040-05-21": "Whit Monday",
+    "2040-05-31": "Corpus Christi",
     "2040-10-03": "German Unity Day",
     "2040-10-31": "Reformation Day",
     "2040-11-21": "Repentance and Prayer Day",
@@ -559,6 +609,7 @@
     "2041-05-01": "Labor Day",
     "2041-05-30": "Ascension Day",
     "2041-06-10": "Whit Monday",
+    "2041-06-20": "Corpus Christi",
     "2041-10-03": "German Unity Day",
     "2041-10-31": "Reformation Day",
     "2041-11-20": "Repentance and Prayer Day",
@@ -570,6 +621,7 @@
     "2042-05-01": "Labor Day",
     "2042-05-15": "Ascension Day",
     "2042-05-26": "Whit Monday",
+    "2042-06-05": "Corpus Christi",
     "2042-10-03": "German Unity Day",
     "2042-10-31": "Reformation Day",
     "2042-11-19": "Repentance and Prayer Day",
@@ -581,6 +633,7 @@
     "2043-05-01": "Labor Day",
     "2043-05-07": "Ascension Day",
     "2043-05-18": "Whit Monday",
+    "2043-05-28": "Corpus Christi",
     "2043-10-03": "German Unity Day",
     "2043-10-31": "Reformation Day",
     "2043-11-18": "Repentance and Prayer Day",
@@ -592,6 +645,7 @@
     "2044-05-01": "Labor Day",
     "2044-05-26": "Ascension Day",
     "2044-06-06": "Whit Monday",
+    "2044-06-16": "Corpus Christi",
     "2044-10-03": "German Unity Day",
     "2044-10-31": "Reformation Day",
     "2044-11-16": "Repentance and Prayer Day",
@@ -603,6 +657,7 @@
     "2045-05-01": "Labor Day",
     "2045-05-18": "Ascension Day",
     "2045-05-29": "Whit Monday",
+    "2045-06-08": "Corpus Christi",
     "2045-10-03": "German Unity Day",
     "2045-10-31": "Reformation Day",
     "2045-11-22": "Repentance and Prayer Day",
@@ -614,6 +669,7 @@
     "2046-05-01": "Labor Day",
     "2046-05-03": "Ascension Day",
     "2046-05-14": "Whit Monday",
+    "2046-05-24": "Corpus Christi",
     "2046-10-03": "German Unity Day",
     "2046-10-31": "Reformation Day",
     "2046-11-21": "Repentance and Prayer Day",
@@ -625,6 +681,7 @@
     "2047-05-01": "Labor Day",
     "2047-05-23": "Ascension Day",
     "2047-06-03": "Whit Monday",
+    "2047-06-13": "Corpus Christi",
     "2047-10-03": "German Unity Day",
     "2047-10-31": "Reformation Day",
     "2047-11-20": "Repentance and Prayer Day",
@@ -636,6 +693,7 @@
     "2048-05-01": "Labor Day",
     "2048-05-14": "Ascension Day",
     "2048-05-25": "Whit Monday",
+    "2048-06-04": "Corpus Christi",
     "2048-10-03": "German Unity Day",
     "2048-10-31": "Reformation Day",
     "2048-11-18": "Repentance and Prayer Day",
@@ -647,6 +705,7 @@
     "2049-05-01": "Labor Day",
     "2049-05-27": "Ascension Day",
     "2049-06-07": "Whit Monday",
+    "2049-06-17": "Corpus Christi",
     "2049-10-03": "German Unity Day",
     "2049-10-31": "Reformation Day",
     "2049-11-17": "Repentance and Prayer Day",
@@ -658,6 +717,7 @@
     "2050-05-01": "Labor Day",
     "2050-05-19": "Ascension Day",
     "2050-05-30": "Whit Monday",
+    "2050-06-09": "Corpus Christi",
     "2050-10-03": "German Unity Day",
     "2050-10-31": "Reformation Day",
     "2050-11-16": "Repentance and Prayer Day",
diff --git a/snapshots/countries/DE_TH.json b/snapshots/countries/DE_TH.json
index a6fa55f7..0745a13c 100644
--- a/snapshots/countries/DE_TH.json
+++ b/snapshots/countries/DE_TH.json
@@ -10,6 +10,7 @@
     "1991-05-01": "Labor Day",
     "1991-05-09": "Ascension Day",
     "1991-05-20": "Whit Monday",
+    "1991-05-30": "Corpus Christi",
     "1991-10-03": "German Unity Day",
     "1991-10-31": "Reformation Day",
     "1991-11-20": "Repentance and Prayer Day",
@@ -21,6 +22,7 @@
     "1992-05-01": "Labor Day",
     "1992-05-28": "Ascension Day",
     "1992-06-08": "Whit Monday",
+    "1992-06-18": "Corpus Christi",
     "1992-10-03": "German Unity Day",
     "1992-10-31": "Reformation Day",
     "1992-11-18": "Repentance and Prayer Day",
@@ -32,6 +34,7 @@
     "1993-05-01": "Labor Day",
     "1993-05-20": "Ascension Day",
     "1993-05-31": "Whit Monday",
+    "1993-06-10": "Corpus Christi",
     "1993-10-03": "German Unity Day",
     "1993-10-31": "Reformation Day",
     "1993-11-17": "Repentance and Prayer Day",
@@ -43,6 +46,7 @@
     "1994-05-01": "Labor Day",
     "1994-05-12": "Ascension Day",
     "1994-05-23": "Whit Monday",
+    "1994-06-02": "Corpus Christi",
     "1994-10-03": "German Unity Day",
     "1994-10-31": "Reformation Day",
     "1994-11-16": "Repentance and Prayer Day",
@@ -54,6 +58,7 @@
     "1995-05-01": "Labor Day",
     "1995-05-25": "Ascension Day",
     "1995-06-05": "Whit Monday",
+    "1995-06-15": "Corpus Christi",
     "1995-10-03": "German Unity Day",
     "1995-10-31": "Reformation Day",
     "1995-12-25": "Christmas Day",
@@ -64,6 +69,7 @@
     "1996-05-01": "Labor Day",
     "1996-05-16": "Ascension Day",
     "1996-05-27": "Whit Monday",
+    "1996-06-06": "Corpus Christi",
     "1996-10-03": "German Unity Day",
     "1996-10-31": "Reformation Day",
     "1996-12-25": "Christmas Day",
@@ -74,6 +80,7 @@
     "1997-05-01": "Labor Day",
     "1997-05-08": "Ascension Day",
     "1997-05-19": "Whit Monday",
+    "1997-05-29": "Corpus Christi",
     "1997-10-03": "German Unity Day",
     "1997-10-31": "Reformation Day",
     "1997-12-25": "Christmas Day",
@@ -84,6 +91,7 @@
     "1998-05-01": "Labor Day",
     "1998-05-21": "Ascension Day",
     "1998-06-01": "Whit Monday",
+    "1998-06-11": "Corpus Christi",
     "1998-10-03": "German Unity Day",
     "1998-10-31": "Reformation Day",
     "1998-12-25": "Christmas Day",
@@ -94,6 +102,7 @@
     "1999-05-01": "Labor Day",
     "1999-05-13": "Ascension Day",
     "1999-05-24": "Whit Monday",
+    "1999-06-03": "Corpus Christi",
     "1999-10-03": "German Unity Day",
     "1999-10-31": "Reformation Day",
     "1999-12-25": "Christmas Day",
@@ -104,6 +113,7 @@
     "2000-05-01": "Labor Day",
     "2000-06-01": "Ascension Day",
     "2000-06-12": "Whit Monday",
+    "2000-06-22": "Corpus Christi",
     "2000-10-03": "German Unity Day",
     "2000-10-31": "Reformation Day",
     "2000-12-25": "Christmas Day",
@@ -114,6 +124,7 @@
     "2001-05-01": "Labor Day",
     "2001-05-24": "Ascension Day",
     "2001-06-04": "Whit Monday",
+    "2001-06-14": "Corpus Christi",
     "2001-10-03": "German Unity Day",
     "2001-10-31": "Reformation Day",
     "2001-12-25": "Christmas Day",
@@ -124,6 +135,7 @@
     "2002-05-01": "Labor Day",
     "2002-05-09": "Ascension Day",
     "2002-05-20": "Whit Monday",
+    "2002-05-30": "Corpus Christi",
     "2002-10-03": "German Unity Day",
     "2002-10-31": "Reformation Day",
     "2002-12-25": "Christmas Day",
@@ -134,6 +146,7 @@
     "2003-05-01": "Labor Day",
     "2003-05-29": "Ascension Day",
     "2003-06-09": "Whit Monday",
+    "2003-06-19": "Corpus Christi",
     "2003-10-03": "German Unity Day",
     "2003-10-31": "Reformation Day",
     "2003-12-25": "Christmas Day",
@@ -144,6 +157,7 @@
     "2004-05-01": "Labor Day",
     "2004-05-20": "Ascension Day",
     "2004-05-31": "Whit Monday",
+    "2004-06-10": "Corpus Christi",
     "2004-10-03": "German Unity Day",
     "2004-10-31": "Reformation Day",
     "2004-12-25": "Christmas Day",
@@ -154,6 +168,7 @@
     "2005-05-01": "Labor Day",
     "2005-05-05": "Ascension Day",
     "2005-05-16": "Whit Monday",
+    "2005-05-26": "Corpus Christi",
     "2005-10-03": "German Unity Day",
     "2005-10-31": "Reformation Day",
     "2005-12-25": "Christmas Day",
@@ -164,6 +179,7 @@
     "2006-05-01": "Labor Day",
     "2006-05-25": "Ascension Day",
     "2006-06-05": "Whit Monday",
+    "2006-06-15": "Corpus Christi",
     "2006-10-03": "German Unity Day",
     "2006-10-31": "Reformation Day",
     "2006-12-25": "Christmas Day",
@@ -174,6 +190,7 @@
     "2007-05-01": "Labor Day",
     "2007-05-17": "Ascension Day",
     "2007-05-28": "Whit Monday",
+    "2007-06-07": "Corpus Christi",
     "2007-10-03": "German Unity Day",
     "2007-10-31": "Reformation Day",
     "2007-12-25": "Christmas Day",
@@ -183,6 +200,7 @@
     "2008-03-24": "Easter Monday",
     "2008-05-01": "Ascension Day; Labor Day",
     "2008-05-12": "Whit Monday",
+    "2008-05-22": "Corpus Christi",
     "2008-10-03": "German Unity Day",
     "2008-10-31": "Reformation Day",
     "2008-12-25": "Christmas Day",
@@ -193,6 +211,7 @@
     "2009-05-01": "Labor Day",
     "2009-05-21": "Ascension Day",
     "2009-06-01": "Whit Monday",
+    "2009-06-11": "Corpus Christi",
     "2009-10-03": "German Unity Day",
     "2009-10-31": "Reformation Day",
     "2009-12-25": "Christmas Day",
@@ -203,6 +222,7 @@
     "2010-05-01": "Labor Day",
     "2010-05-13": "Ascension Day",
     "2010-05-24": "Whit Monday",
+    "2010-06-03": "Corpus Christi",
     "2010-10-03": "German Unity Day",
     "2010-10-31": "Reformation Day",
     "2010-12-25": "Christmas Day",
@@ -213,6 +233,7 @@
     "2011-05-01": "Labor Day",
     "2011-06-02": "Ascension Day",
     "2011-06-13": "Whit Monday",
+    "2011-06-23": "Corpus Christi",
     "2011-10-03": "German Unity Day",
     "2011-10-31": "Reformation Day",
     "2011-12-25": "Christmas Day",
@@ -223,6 +244,7 @@
     "2012-05-01": "Labor Day",
     "2012-05-17": "Ascension Day",
     "2012-05-28": "Whit Monday",
+    "2012-06-07": "Corpus Christi",
     "2012-10-03": "German Unity Day",
     "2012-10-31": "Reformation Day",
     "2012-12-25": "Christmas Day",
@@ -233,6 +255,7 @@
     "2013-05-01": "Labor Day",
     "2013-05-09": "Ascension Day",
     "2013-05-20": "Whit Monday",
+    "2013-05-30": "Corpus Christi",
     "2013-10-03": "German Unity Day",
     "2013-10-31": "Reformation Day",
     "2013-12-25": "Christmas Day",
@@ -243,6 +266,7 @@
     "2014-05-01": "Labor Day",
     "2014-05-29": "Ascension Day",
     "2014-06-09": "Whit Monday",
+    "2014-06-19": "Corpus Christi",
     "2014-10-03": "German Unity Day",
     "2014-10-31": "Reformation Day",
     "2014-12-25": "Christmas Day",
@@ -253,6 +277,7 @@
     "2015-05-01": "Labor Day",
     "2015-05-14": "Ascension Day",
     "2015-05-25": "Whit Monday",
+    "2015-06-04": "Corpus Christi",
     "2015-10-03": "German Unity Day",
     "2015-10-31": "Reformation Day",
     "2015-12-25": "Christmas Day",
@@ -263,6 +288,7 @@
     "2016-05-01": "Labor Day",
     "2016-05-05": "Ascension Day",
     "2016-05-16": "Whit Monday",
+    "2016-05-26": "Corpus Christi",
     "2016-10-03": "German Unity Day",
     "2016-10-31": "Reformation Day",
     "2016-12-25": "Christmas Day",
@@ -273,6 +299,7 @@
     "2017-05-01": "Labor Day",
     "2017-05-25": "Ascension Day",
     "2017-06-05": "Whit Monday",
+    "2017-06-15": "Corpus Christi",
     "2017-10-03": "German Unity Day",
     "2017-10-31": "Reformation Day",
     "2017-12-25": "Christmas Day",
@@ -283,6 +310,7 @@
     "2018-05-01": "Labor Day",
     "2018-05-10": "Ascension Day",
     "2018-05-21": "Whit Monday",
+    "2018-05-31": "Corpus Christi",
     "2018-10-03": "German Unity Day",
     "2018-10-31": "Reformation Day",
     "2018-12-25": "Christmas Day",
@@ -293,6 +321,7 @@
     "2019-05-01": "Labor Day",
     "2019-05-30": "Ascension Day",
     "2019-06-10": "Whit Monday",
+    "2019-06-20": "Corpus Christi",
     "2019-09-20": "World Children's Day",
     "2019-10-03": "German Unity Day",
     "2019-10-31": "Reformation Day",
@@ -304,6 +333,7 @@
     "2020-05-01": "Labor Day",
     "2020-05-21": "Ascension Day",
     "2020-06-01": "Whit Monday",
+    "2020-06-11": "Corpus Christi",
     "2020-09-20": "World Children's Day",
     "2020-10-03": "German Unity Day",
     "2020-10-31": "Reformation Day",
@@ -315,6 +345,7 @@
     "2021-05-01": "Labor Day",
     "2021-05-13": "Ascension Day",
     "2021-05-24": "Whit Monday",
+    "2021-06-03": "Corpus Christi",
     "2021-09-20": "World Children's Day",
     "2021-10-03": "German Unity Day",
     "2021-10-31": "Reformation Day",
@@ -326,6 +357,7 @@
     "2022-05-01": "Labor Day",
     "2022-05-26": "Ascension Day",
     "2022-06-06": "Whit Monday",
+    "2022-06-16": "Corpus Christi",
     "2022-09-20": "World Children's Day",
     "2022-10-03": "German Unity Day",
     "2022-10-31": "Reformation Day",
@@ -337,6 +369,7 @@
     "2023-05-01": "Labor Day",
     "2023-05-18": "Ascension Day",
     "2023-05-29": "Whit Monday",
+    "2023-06-08": "Corpus Christi",
     "2023-09-20": "World Children's Day",
     "2023-10-03": "German Unity Day",
     "2023-10-31": "Reformation Day",
@@ -348,6 +381,7 @@
     "2024-05-01": "Labor Day",
     "2024-05-09": "Ascension Day",
     "2024-05-20": "Whit Monday",
+    "2024-05-30": "Corpus Christi",
     "2024-09-20": "World Children's Day",
     "2024-10-03": "German Unity Day",
     "2024-10-31": "Reformation Day",
@@ -359,6 +393,7 @@
     "2025-05-01": "Labor Day",
     "2025-05-29": "Ascension Day",
     "2025-06-09": "Whit Monday",
+    "2025-06-19": "Corpus Christi",
     "2025-09-20": "World Children's Day",
     "2025-10-03": "German Unity Day",
     "2025-10-31": "Reformation Day",
@@ -370,6 +405,7 @@
     "2026-05-01": "Labor Day",
     "2026-05-14": "Ascension Day",
     "2026-05-25": "Whit Monday",
+    "2026-06-04": "Corpus Christi",
     "2026-09-20": "World Children's Day",
     "2026-10-03": "German Unity Day",
     "2026-10-31": "Reformation Day",
@@ -381,6 +417,7 @@
     "2027-05-01": "Labor Day",
     "2027-05-06": "Ascension Day",
     "2027-05-17": "Whit Monday",
+    "2027-05-27": "Corpus Christi",
     "2027-09-20": "World Children's Day",
     "2027-10-03": "German Unity Day",
     "2027-10-31": "Reformation Day",
@@ -392,6 +429,7 @@
     "2028-05-01": "Labor Day",
     "2028-05-25": "Ascension Day",
     "2028-06-05": "Whit Monday",
+    "2028-06-15": "Corpus Christi",
     "2028-09-20": "World Children's Day",
     "2028-10-03": "German Unity Day",
     "2028-10-31": "Reformation Day",
@@ -403,6 +441,7 @@
     "2029-05-01": "Labor Day",
     "2029-05-10": "Ascension Day",
     "2029-05-21": "Whit Monday",
+    "2029-05-31": "Corpus Christi",
     "2029-09-20": "World Children's Day",
     "2029-10-03": "German Unity Day",
     "2029-10-31": "Reformation Day",
@@ -414,6 +453,7 @@
     "2030-05-01": "Labor Day",
     "2030-05-30": "Ascension Day",
     "2030-06-10": "Whit Monday",
+    "2030-06-20": "Corpus Christi",
     "2030-09-20": "World Children's Day",
     "2030-10-03": "German Unity Day",
     "2030-10-31": "Reformation Day",
@@ -425,6 +465,7 @@
     "2031-05-01": "Labor Day",
     "2031-05-22": "Ascension Day",
     "2031-06-02": "Whit Monday",
+    "2031-06-12": "Corpus Christi",
     "2031-09-20": "World Children's Day",
     "2031-10-03": "German Unity Day",
     "2031-10-31": "Reformation Day",
@@ -436,6 +477,7 @@
     "2032-05-01": "Labor Day",
     "2032-05-06": "Ascension Day",
     "2032-05-17": "Whit Monday",
+    "2032-05-27": "Corpus Christi",
     "2032-09-20": "World Children's Day",
     "2032-10-03": "German Unity Day",
     "2032-10-31": "Reformation Day",
@@ -447,6 +489,7 @@
     "2033-05-01": "Labor Day",
     "2033-05-26": "Ascension Day",
     "2033-06-06": "Whit Monday",
+    "2033-06-16": "Corpus Christi",
     "2033-09-20": "World Children's Day",
     "2033-10-03": "German Unity Day",
     "2033-10-31": "Reformation Day",
@@ -458,6 +501,7 @@
     "2034-05-01": "Labor Day",
     "2034-05-18": "Ascension Day",
     "2034-05-29": "Whit Monday",
+    "2034-06-08": "Corpus Christi",
     "2034-09-20": "World Children's Day",
     "2034-10-03": "German Unity Day",
     "2034-10-31": "Reformation Day",
@@ -469,6 +513,7 @@
     "2035-05-01": "Labor Day",
     "2035-05-03": "Ascension Day",
     "2035-05-14": "Whit Monday",
+    "2035-05-24": "Corpus Christi",
     "2035-09-20": "World Children's Day",
     "2035-10-03": "German Unity Day",
     "2035-10-31": "Reformation Day",
@@ -480,6 +525,7 @@
     "2036-05-01": "Labor Day",
     "2036-05-22": "Ascension Day",
     "2036-06-02": "Whit Monday",
+    "2036-06-12": "Corpus Christi",
     "2036-09-20": "World Children's Day",
     "2036-10-03": "German Unity Day",
     "2036-10-31": "Reformation Day",
@@ -491,6 +537,7 @@
     "2037-05-01": "Labor Day",
     "2037-05-14": "Ascension Day",
     "2037-05-25": "Whit Monday",
+    "2037-06-04": "Corpus Christi",
     "2037-09-20": "World Children's Day",
     "2037-10-03": "German Unity Day",
     "2037-10-31": "Reformation Day",
@@ -502,6 +549,7 @@
     "2038-05-01": "Labor Day",
     "2038-06-03": "Ascension Day",
     "2038-06-14": "Whit Monday",
+    "2038-06-24": "Corpus Christi",
     "2038-09-20": "World Children's Day",
     "2038-10-03": "German Unity Day",
     "2038-10-31": "Reformation Day",
@@ -513,6 +561,7 @@
     "2039-05-01": "Labor Day",
     "2039-05-19": "Ascension Day",
     "2039-05-30": "Whit Monday",
+    "2039-06-09": "Corpus Christi",
     "2039-09-20": "World Children's Day",
     "2039-10-03": "German Unity Day",
     "2039-10-31": "Reformation Day",
@@ -524,6 +573,7 @@
     "2040-05-01": "Labor Day",
     "2040-05-10": "Ascension Day",
     "2040-05-21": "Whit Monday",
+    "2040-05-31": "Corpus Christi",
     "2040-09-20": "World Children's Day",
     "2040-10-03": "German Unity Day",
     "2040-10-31": "Reformation Day",
@@ -535,6 +585,7 @@
     "2041-05-01": "Labor Day",
     "2041-05-30": "Ascension Day",
     "2041-06-10": "Whit Monday",
+    "2041-06-20": "Corpus Christi",
     "2041-09-20": "World Children's Day",
     "2041-10-03": "German Unity Day",
     "2041-10-31": "Reformation Day",
@@ -546,6 +597,7 @@
     "2042-05-01": "Labor Day",
     "2042-05-15": "Ascension Day",
     "2042-05-26": "Whit Monday",
+    "2042-06-05": "Corpus Christi",
     "2042-09-20": "World Children's Day",
     "2042-10-03": "German Unity Day",
     "2042-10-31": "Reformation Day",
@@ -557,6 +609,7 @@
     "2043-05-01": "Labor Day",
     "2043-05-07": "Ascension Day",
     "2043-05-18": "Whit Monday",
+    "2043-05-28": "Corpus Christi",
     "2043-09-20": "World Children's Day",
     "2043-10-03": "German Unity Day",
     "2043-10-31": "Reformation Day",
@@ -568,6 +621,7 @@
     "2044-05-01": "Labor Day",
     "2044-05-26": "Ascension Day",
     "2044-06-06": "Whit Monday",
+    "2044-06-16": "Corpus Christi",
     "2044-09-20": "World Children's Day",
     "2044-10-03": "German Unity Day",
     "2044-10-31": "Reformation Day",
@@ -579,6 +633,7 @@
     "2045-05-01": "Labor Day",
     "2045-05-18": "Ascension Day",
     "2045-05-29": "Whit Monday",
+    "2045-06-08": "Corpus Christi",
     "2045-09-20": "World Children's Day",
     "2045-10-03": "German Unity Day",
     "2045-10-31": "Reformation Day",
@@ -590,6 +645,7 @@
     "2046-05-01": "Labor Day",
     "2046-05-03": "Ascension Day",
     "2046-05-14": "Whit Monday",
+    "2046-05-24": "Corpus Christi",
     "2046-09-20": "World Children's Day",
     "2046-10-03": "German Unity Day",
     "2046-10-31": "Reformation Day",
@@ -601,6 +657,7 @@
     "2047-05-01": "Labor Day",
     "2047-05-23": "Ascension Day",
     "2047-06-03": "Whit Monday",
+    "2047-06-13": "Corpus Christi",
     "2047-09-20": "World Children's Day",
     "2047-10-03": "German Unity Day",
     "2047-10-31": "Reformation Day",
@@ -612,6 +669,7 @@
     "2048-05-01": "Labor Day",
     "2048-05-14": "Ascension Day",
     "2048-05-25": "Whit Monday",
+    "2048-06-04": "Corpus Christi",
     "2048-09-20": "World Children's Day",
     "2048-10-03": "German Unity Day",
     "2048-10-31": "Reformation Day",
@@ -623,6 +681,7 @@
     "2049-05-01": "Labor Day",
     "2049-05-27": "Ascension Day",
     "2049-06-07": "Whit Monday",
+    "2049-06-17": "Corpus Christi",
     "2049-09-20": "World Children's Day",
     "2049-10-03": "German Unity Day",
     "2049-10-31": "Reformation Day",
@@ -634,6 +693,7 @@
     "2050-05-01": "Labor Day",
     "2050-05-19": "Ascension Day",
     "2050-05-30": "Whit Monday",
+    "2050-06-09": "Corpus Christi",
     "2050-09-20": "World Children's Day",
     "2050-10-03": "German Unity Day",
     "2050-10-31": "Reformation Day",
diff --git a/snapshots/countries/SE_COMMON.json b/snapshots/countries/SE_COMMON.json
index f327ba1a..c9dbb594 100644
--- a/snapshots/countries/SE_COMMON.json
+++ b/snapshots/countries/SE_COMMON.json
@@ -52,7 +52,6 @@
     "1950-10-15": "Sunday",
     "1950-10-22": "Sunday",
     "1950-10-29": "Sunday",
-    "1950-11-04": "All Saints' Day",
     "1950-11-05": "Sunday",
     "1950-11-12": "Sunday",
     "1950-11-19": "Sunday",
@@ -115,7 +114,6 @@
     "1951-10-14": "Sunday",
     "1951-10-21": "Sunday",
     "1951-10-28": "Sunday",
-    "1951-11-03": "All Saints' Day",
     "1951-11-04": "Sunday",
     "1951-11-11": "Sunday",
     "1951-11-18": "Sunday",
@@ -181,7 +179,6 @@
     "1952-10-12": "Sunday",
     "1952-10-19": "Sunday",
     "1952-10-26": "Sunday",
-    "1952-11-01": "All Saints' Day",
     "1952-11-02": "Sunday",
     "1952-11-09": "Sunday",
     "1952-11-16": "Sunday",


Test patch:
diff --git a/tests/countries/test_germany.py b/tests/countries/test_germany.py
index fd417d5e..a9460c31 100644
--- a/tests/countries/test_germany.py
+++ b/tests/countries/test_germany.py
@@ -18,10 +18,10 @@ from holidays.countries.germany import Germany, DE, DEU
 from tests.common import CommonCountryTests
 
 
-class TestDE(CommonCountryTests, TestCase):
+class TestGermany(CommonCountryTests, TestCase):
     @classmethod
     def setUpClass(cls):
-        years = range(1991, 2050)
+        years = range(1990, 2050)
         super().setUpClass(DE, years=years)
         cls.subdiv_holidays = {
             subdiv: DE(subdiv=subdiv, years=years) for subdiv in DE.subdivisions
@@ -48,8 +48,9 @@ class TestDE(CommonCountryTests, TestCase):
         for p in DE.subdivisions:
             self.assertNoHolidays(DE(years=1989, subdiv=p))
 
-    def test_no_by_catholic_holidays_before_1991(self):
-        self.assertNoHolidays(DE(subdiv="BY", years=1990, categories=CATHOLIC))
+    def test_no_catholic_holidays_before_1991(self):
+        for subdiv in ("BY", "SN", "TH"):
+            self.assertNoHolidays(DE(subdiv=subdiv, years=1990, categories=CATHOLIC))
 
     def test_1990_present(self):
         y_1990 = set()
@@ -101,34 +102,32 @@ class TestDE(CommonCountryTests, TestCase):
         )
 
     def test_fixed_holidays(self):
-        # Neujahr
-        self.assertHoliday(f"{year}-01-01" for year in range(1991, 2050))
-        # Maifeiertag
-        self.assertHoliday(f"{year}-05-01" for year in range(1991, 2050))
-        # Tag der Deutschen Einheit
-        self.assertHoliday(f"{year}-10-03" for year in range(1991, 2050))
-        # Erster Weihnachtstag
-        self.assertHoliday(f"{year}-12-25" for year in range(1991, 2050))
-        # Zweiter Weihnachtstag
-        self.assertHoliday(f"{year}-12-26" for year in range(1991, 2050))
-
-    def test_tag_der_deutschen_einheit_in_1990(self):
-        self.assertHoliday("1990-10-03")
+        self.assertHolidayName("Neujahr", (f"{year}-01-01" for year in range(1991, 2050)))
+        self.assertHolidayName("Erster Mai", (f"{year}-05-01" for year in range(1991, 2050)))
+        self.assertHolidayName(
+            "Tag der Deutschen Einheit", (f"{year}-10-03" for year in range(1990, 2050))
+        )
+        self.assertHolidayName(
+            "Erster Weihnachtstag", (f"{year}-12-25" for year in range(1990, 2050))
+        )
+        self.assertHolidayName(
+            "Zweiter Weihnachtstag", (f"{year}-12-26" for year in range(1990, 2050))
+        )
 
     def test_heilige_drei_koenige(self):
-        subdivs_that_have = {"BW", "BY", "ST"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-01-06" for year in range(1991, 2050))
-            )
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-01-06" for year in range(1991, 2050))
-            )
+        name = "Heilige Drei Könige"
+        self.assertNoHolidayName(name)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BW", "BY", "ST"}:
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-01-06" for year in range(1991, 2050))
+                )
+            else:
+                self.assertNoHoliday(holidays, (f"{year}-01-06" for year in range(1991, 2050)))
+                self.assertNoHolidayName(name, holidays)
 
     def test_karfreitag(self):
+        name = "Karfreitag"
         known_good = (
             "2014-04-18",
             "2015-04-03",
@@ -142,11 +141,15 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-04-07",
             "2024-03-29",
         )
-
-        for subdiv in DE.subdivisions:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
+        for holidays in self.subdiv_holidays.values():
+            self.assertHolidayName(name, holidays, known_good)
+            self.assertHolidayName(name, holidays, range(1991, 2050))
+        self.assertHolidayName(name, known_good)
+        self.assertHolidayName(name, range(1991, 2050))
 
     def test_ostersonntag(self):
+        name = "Ostersonntag"
+        self.assertNoHolidayName(name)
         known_good = (
             "2014-04-20",
             "2015-04-05",
@@ -160,15 +163,16 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-04-09",
             "2024-03-31",
         )
-        subdivs_that_have = {"BB"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], known_good)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BB":
+                self.assertHolidayName(name, holidays, known_good)
+                self.assertHolidayName(name, holidays, range(1991, 2050))
+            else:
+                self.assertNoHoliday(holidays, known_good)
+                self.assertNoHolidayName(name, holidays)
 
     def test_ostermontag(self):
+        name = "Ostermontag"
         known_good = (
             "2014-04-21",
             "2015-04-06",
@@ -182,38 +186,38 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-04-10",
             "2024-04-01",
         )
-
-        for subdiv in DE.subdivisions:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
+        for holidays in self.subdiv_holidays.values():
+            self.assertHolidayName(name, holidays, known_good)
+            self.assertHolidayName(name, holidays, range(1991, 2050))
+        self.assertHolidayName(name, known_good)
+        self.assertHolidayName(name, range(1991, 2050))
 
     def test_75_jahrestag_beendigung_zweiter_weltkrieg(self):
-        subdivs_that_have = {"BE"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], "2020-05-08")
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], "2020-05-08")
+        dt = "2020-05-08"
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BE":
+                self.assertHoliday(holidays, dt)
+            else:
+                self.assertNoHoliday(holidays, dt)
 
     def test_80_jahrestag_beendigung_zweiter_weltkrieg(self):
-        subdivs_that_have = {"BE"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], "2025-05-08")
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], "2025-05-08")
+        dt = "2025-05-08"
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BE":
+                self.assertHoliday(holidays, dt)
+            else:
+                self.assertNoHoliday(holidays, dt)
 
     def test_75_jahrestag_des_aufstandes_vom_17_juni_1953(self):
-        subdivs_that_have = {"BE"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], "2028-06-17")
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], "2028-06-17")
+        dt = "2028-06-17"
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BE":
+                self.assertHoliday(holidays, dt)
+            else:
+                self.assertNoHoliday(holidays, dt)
 
     def test_christi_himmelfahrt(self):
+        name = "Christi Himmelfahrt"
         known_good = (
             "2014-05-29",
             "2015-05-14",
@@ -227,41 +231,49 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-05-18",
             "2024-05-09",
         )
-
-        for subdiv in DE.subdivisions:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
+        for holidays in self.subdiv_holidays.values():
+            self.assertHolidayName(name, holidays, known_good)
+            self.assertHolidayName(name, holidays, range(1991, 2050))
+        self.assertHolidayName(name, known_good)
+        self.assertHolidayName(name, range(1991, 2050))
 
     def test_weltkindertag(self):
-        known_good = ("2019-09-20", "2021-09-20", "2022-09-20", "2023-09-20")
-        subdivs_that_have = {"TH"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], known_good)
+        name = "Weltkindertag"
+        self.assertNoHolidayName(name)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "TH":
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-09-20" for year in range(2019, 2050))
+                )
+                self.assertNoHoliday(holidays, (f"{year}-09-20" for year in range(1991, 2019)))
+                self.assertNoHolidayName(name, range(1991, 2019))
+            else:
+                self.assertNoHoliday(holidays, (f"{year}-09-20" for year in range(1991, 2050)))
+                self.assertNoHolidayName(name, holidays)
 
     def test_frauentag(self):
-        self.assertHoliday(
-            self.subdiv_holidays["BE"], (f"{year}-03-08" for year in range(2019, 2050))
-        )
-        self.assertHoliday(
-            self.subdiv_holidays["MV"], (f"{year}-03-08" for year in range(2023, 2050))
-        )
-
-        for subdiv in set(DE.subdivisions):
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-03-08" for year in range(1991, 2019))
-            )
-        self.assertNoHoliday(
-            self.subdiv_holidays["MV"], (f"{year}-03-08" for year in range(2019, 2023))
-        )
-        for subdiv in set(DE.subdivisions) - {"BE", "MV"}:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-03-08" for year in range(2023, 2050))
-            )
+        name = "Internationaler Frauentag"
+        self.assertNoHolidayName(name)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BE":
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-03-08" for year in range(2019, 2050))
+                )
+                self.assertNoHoliday(holidays, (f"{year}-03-08" for year in range(1991, 2019)))
+                self.assertNoHolidayName(name, range(1991, 2019))
+            elif subdiv == "MV":
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-03-08" for year in range(2023, 2050))
+                )
+                self.assertNoHoliday(holidays, (f"{year}-03-08" for year in range(1991, 2023)))
+                self.assertNoHolidayName(name, range(1991, 2023))
+            else:
+                self.assertNoHoliday(holidays, (f"{year}-03-08" for year in range(1991, 2050)))
+                self.assertNoHolidayName(name, holidays)
 
     def test_pfingstsonntag(self):
+        name = "Pfingstsonntag"
+        self.assertNoHolidayName(name)
         known_good = (
             "2014-06-08",
             "2015-05-24",
@@ -275,15 +287,16 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-05-28",
             "2024-05-19",
         )
-        subdivs_that_have = {"BB"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], known_good)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "BB":
+                self.assertHolidayName(name, holidays, known_good)
+                self.assertHolidayName(name, holidays, range(1991, 2050))
+            else:
+                self.assertNoHoliday(holidays, known_good)
+                self.assertNoHolidayName(name, holidays)
 
     def test_pfingstmontag(self):
+        name = "Pfingstmontag"
         known_good = (
             "2014-06-09",
             "2015-05-25",
@@ -297,11 +310,15 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-05-29",
             "2024-05-20",
         )
-
-        for subdiv in DE.subdivisions:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
+        for holidays in self.subdiv_holidays.values():
+            self.assertHolidayName(name, holidays, known_good)
+            self.assertHolidayName(name, holidays, range(1991, 2050))
+        self.assertHolidayName(name, known_good)
+        self.assertHolidayName(name, range(1991, 2050))
 
     def test_fronleichnam(self):
+        name = "Fronleichnam"
+        self.assertNoHolidayName(name)
         known_good = (
             "2014-06-19",
             "2015-06-04",
@@ -315,72 +332,71 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-06-08",
             "2024-05-30",
         )
-        subdivs_that_have = {"BW", "BY", "HE", "NW", "RP", "SL"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], known_good)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BW", "BY", "HE", "NW", "RP", "SL"}:
+                self.assertHolidayName(name, holidays, known_good)
+                self.assertHolidayName(name, holidays, range(1991, 2050))
+            else:
+                self.assertNoHoliday(holidays, known_good)
+                self.assertNoHolidayName(name, holidays)
+        for subdiv in ("SN", "TH"):
+            catholic_holidays = DE(subdiv=subdiv, categories=CATHOLIC, years=range(1991, 2050))
+            self.assertHolidayName(name, catholic_holidays, known_good)
+            self.assertHolidayName(name, catholic_holidays, range(1991, 2050))
 
     def test_mariae_himmelfahrt(self):
-        subdivs_that_have = {"SL"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-08-15" for year in range(1991, 2050))
-            )
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-08-15" for year in range(1991, 2050))
-            )
-        # Bayern (Catholic municipalities).
-        self.assertHoliday(
-            DE(subdiv="BY", years=range(1991, 2050), categories=CATHOLIC),
+        name = "Mariä Himmelfahrt"
+        self.assertNoHolidayName(name)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "SL":
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-08-15" for year in range(1991, 2050))
+                )
+            else:
+                self.assertNoHoliday(holidays, (f"{year}-08-15" for year in range(1991, 2050)))
+                self.assertNoHolidayName(name, holidays)
+
+        self.assertHolidayName(
+            name,
+            DE(subdiv="BY", categories=CATHOLIC, years=range(1991, 2050)),
             (f"{year}-08-15" for year in range(1991, 2050)),
         )
 
     def test_reformationstag(self):
-        subdiv_yes = {"BB", "MV", "SN", "ST", "TH"}
-        subdiv_yes_since_2018 = {"HB", "HH", "NI", "SH"}
-        subdiv_not = set(DE.subdivisions) - subdiv_yes
-        subdiv_not_since_2018 = subdiv_not - subdiv_yes_since_2018
-
-        for subdiv in subdiv_yes:
-            self.assertHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-10-31" for year in range(1991, 2050))
-            )
-        for subdiv in subdiv_yes_since_2018:
-            self.assertHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-10-31" for year in range(2018, 2050))
-            )
-        for subdiv in DE.subdivisions:
-            self.assertHoliday(self.subdiv_holidays[subdiv], "2017-10-31")
-
-        for subdiv in subdiv_not:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-10-31" for year in range(1991, 2017))
-            )
-        for subdiv in subdiv_not_since_2018:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-10-31" for year in range(2018, 2050))
-            )
+        name = "Reformationstag"
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BB", "MV", "SN", "ST", "TH"}:
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-10-31" for year in range(1991, 2050))
+                )
+            elif subdiv in {"HB", "HH", "NI", "SH"}:
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-10-31" for year in range(2018, 2050))
+                )
+                self.assertNoHoliday(holidays, (f"{year}-10-31" for year in range(1991, 2017)))
+                self.assertNoHolidayName(name, range(1991, 2017))
+            else:
+                self.assertNoHoliday(
+                    holidays,
+                    (f"{year}-10-31" for year in (*range(1991, 2017), *range(2018, 2050))),
+                )
+                self.assertNoHolidayName(name, range(1991, 2017), range(2018, 2050))
+        self.assertHolidayName(name, "2017-10-31")
 
     def test_allerheiligen(self):
-        subdivs_that_have = {"BW", "BY", "NW", "RP", "SL"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-11-01" for year in range(1991, 2050))
-            )
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(
-                self.subdiv_holidays[subdiv], (f"{year}-11-01" for year in range(1991, 2050))
-            )
+        name = "Allerheiligen"
+        self.assertNoHolidayName(name)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv in {"BW", "BY", "NW", "RP", "SL"}:
+                self.assertHolidayName(
+                    name, holidays, (f"{year}-11-01" for year in range(1991, 2050))
+                )
+            else:
+                self.assertNoHoliday(holidays, (f"{year}-11-01" for year in range(1991, 2050)))
+                self.assertNoHolidayName(name, holidays)
 
     def test_buss_und_bettag(self):
+        name = "Buß- und Bettag"
         known_good = (
             "2014-11-19",
             "2015-11-18",
@@ -394,13 +410,22 @@ class TestDE(CommonCountryTests, TestCase):
             "2023-11-22",
             "2024-11-20",
         )
-        subdivs_that_have = {"SN"}
-        subdivs_that_dont = set(DE.subdivisions) - subdivs_that_have
-
-        for subdiv in subdivs_that_have:
-            self.assertHoliday(self.subdiv_holidays[subdiv], known_good)
-        for subdiv in subdivs_that_dont:
-            self.assertNoHoliday(self.subdiv_holidays[subdiv], known_good)
+        for subdiv, holidays in self.subdiv_holidays.items():
+            if subdiv == "SN":
+                self.assertHolidayName(name, holidays, known_good)
+                self.assertHolidayName(name, holidays, range(1991, 2050))
+            else:
+                self.assertNoHoliday(holidays, known_good)
+                self.assertNoHolidayName(name, holidays, range(1995, 2050))
+        self.assertHolidayName(
+            name,
+            "1990-11-21",
+            "1991-11-20",
+            "1992-11-18",
+            "1993-11-17",
+            "1994-11-16",
+        )
+        self.assertNoHolidayName(name, range(1995, 2050))
 
     def test_l10n_default(self):
         self.assertLocalizedHolidays(
diff --git a/tests/countries/test_sweden.py b/tests/countries/test_sweden.py
index 86cdea23..d7ec40c7 100644
--- a/tests/countries/test_sweden.py
+++ b/tests/countries/test_sweden.py
@@ -20,123 +20,166 @@ class TestSweden(CommonCountryTests, SundayHolidays, TestCase):
     @classmethod
     def setUpClass(cls):
         super().setUpClass(Sweden)
-
-    def setUp(self):
-        super().setUp()
-        self.holidays.include_sundays = False
+        cls.holidays = Sweden(include_sundays=False, years=range(1930, 2050))
 
     def test_country_aliases(self):
         self.assertAliases(Sweden, SE, SWE)
 
-    def test_new_years(self):
-        self.assertHoliday(
-            "1901-01-01",
-            "2017-01-01",
-            "2023-01-01",
-        )
+    def test_new_years_day(self):
+        self.assertHolidayName("Nyårsdagen", (f"{year}-01-01" for year in range(1930, 2050)))
+
+    def test_epiphany(self):
+        self.assertHolidayName("Trettondedag jul", (f"{year}-01-06" for year in range(1930, 2050)))
 
     def test_annunciation(self):
-        self.assertHoliday(
-            "1950-03-25",
-            "1951-03-25",
-            "1952-03-25",
-            "1953-03-25",
-        )
-        self.assertNoHoliday("1954-03-25")
-        self.assertNoHolidayName("Jungfru Marie bebådelsedag", Sweden(years=1954))
+        name = "Jungfru Marie bebådelsedag"
+        self.assertHolidayName(name, (f"{year}-03-25" for year in range(1930, 1954)))
+        self.assertNoHolidayName(name, range(1954, 2050))
 
-    def test_easter(self):
-        self.assertHoliday(
-            "2000-04-21",
-            "2000-04-23",
-            "2000-04-24",
-            "2010-04-02",
-            "2010-04-04",
-            "2010-04-05",
+    def test_good_friday(self):
+        name = "Långfredagen"
+        self.assertHolidayName(
+            name,
+            "2019-04-19",
+            "2020-04-10",
             "2021-04-02",
-            "2021-04-04",
-            "2021-04-05",
+            "2022-04-15",
+            "2023-04-07",
             "2024-03-29",
+        )
+        self.assertHolidayName(name, range(1930, 2050))
+
+    def test_easter_sunday(self):
+        name = "Påskdagen"
+        self.assertHolidayName(
+            name,
+            "2019-04-21",
+            "2020-04-12",
+            "2021-04-04",
+            "2022-04-17",
+            "2023-04-09",
             "2024-03-31",
-            "2024-04-01",
         )
-        self.assertNoHoliday(
-            "2000-04-20",
-            "2010-04-01",
-            "2021-04-01",
-            "2024-03-28",
+        self.assertHolidayName(name, range(1952, 2050))
+
+    def test_easter_monday(self):
+        name = "Annandag påsk"
+        self.assertHolidayName(
+            name,
+            "2019-04-22",
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
         )
+        self.assertHolidayName(name, range(1952, 2050))
 
     def test_may_day(self):
-        self.assertHoliday(
-            "1939-05-01",
-            "2017-05-01",
-            "2023-05-01",
+        name = "Första maj"
+        self.assertHolidayName(name, (f"{year}-05-01" for year in range(1939, 2050)))
+        self.assertNoHolidayName(name, range(1930, 1939))
+
+    def test_ascension_day(self):
+        name = "Kristi himmelsfärdsdag"
+        self.assertHolidayName(
+            name,
+            "2019-05-30",
+            "2020-05-21",
+            "2021-05-13",
+            "2022-05-26",
+            "2023-05-18",
+            "2024-05-09",
         )
-        self.assertNoHoliday("1938-05-01")
-        self.assertNoHolidayName("Första maj", Sweden(years=1938))
+        self.assertHolidayName(name, range(1952, 2050))
 
     def test_constitution_day(self):
-        self.assertHoliday(
-            "2005-06-06",
-            "2017-06-06",
-        )
-        self.assertNoHoliday("2004-06-06")
-        self.assertNoHolidayName("Sveriges nationaldag", Sweden(years=2004))
+        name = "Sveriges nationaldag"
+        self.assertHolidayName(name, (f"{year}-06-06" for year in range(2005, 2050)))
+        self.assertNoHolidayName(name, range(1930, 2005))
 
-    def test_pentecost(self):
-        self.assertHoliday(
-            "2000-06-11",
-            "2000-06-12",
-            "2010-05-23",
+    def test_whit_sunday(self):
+        name = "Pingstdagen"
+        self.assertHolidayName(
+            name,
+            "2019-06-09",
+            "2020-05-31",
             "2021-05-23",
-            "2003-06-09",
+            "2022-06-05",
+            "2023-05-28",
             "2024-05-19",
         )
-        self.assertNoHoliday(
-            "2010-05-24",
-            "2021-05-24",
-            "2024-05-20",
+        self.assertHolidayName(name, range(1930, 2050))
+
+    def test_whit_monday(self):
+        name = "Annandag pingst"
+        self.assertHolidayName(
+            name,
+            "1999-05-24",
+            "2000-06-12",
+            "2001-06-04",
+            "2002-05-20",
+            "2003-06-09",
+            "2004-05-31",
         )
-        self.assertNoHolidayName("Annandag pingst", Sweden(years=2005))
+        self.assertHolidayName(name, range(1930, 2005))
+        self.assertNoHolidayName(name, range(2005, 2050))
 
-    def test_midsommar(self):
-        self.assertHoliday(
-            "1950-06-23",
-            "1950-06-24",
-            "1951-06-23",
-            "1951-06-24",
-            "1952-06-23",
-            "1952-06-24",
+    def test_midsummer_eve(self):
+        name = "Midsommarafton"
+        self.assertHolidayName(name, (f"{year}-06-23" for year in range(1930, 1953)))
+        self.assertHolidayName(
+            name,
             "1953-06-19",
-            "1953-06-20",
             "1954-06-25",
-            "1954-06-26",
             "2019-06-21",
-            "2019-06-22",
             "2020-06-19",
-            "2020-06-20",
             "2021-06-25",
-            "2021-06-26",
             "2022-06-24",
+            "2023-06-23",
+            "2024-06-21",
+        )
+        self.assertHolidayName(name, range(1930, 2050))
+
+    def test_midsummer_day(self):
+        name = "Midsommardagen"
+        self.assertHolidayName(name, (f"{year}-06-24" for year in range(1930, 1953)))
+        self.assertHolidayName(
+            name,
+            "1953-06-20",
+            "1954-06-26",
+            "2019-06-22",
+            "2020-06-20",
+            "2021-06-26",
             "2022-06-25",
+            "2023-06-24",
+            "2024-06-22",
         )
-        self.assertNoHoliday(
-            "1952-06-20",
-            "1952-06-21",
-            "1953-06-23",
-            "1953-06-24",
-            "1954-06-23",
-            "1954-06-24",
+        self.assertHolidayName(name, range(1930, 2050))
+
+    def test_all_saints_day(self):
+        name = "Alla helgons dag"
+        self.assertHolidayName(
+            name,
+            "1953-10-31",
+            "1954-11-06",
+            "2019-11-02",
+            "2020-10-31",
+            "2021-11-06",
+            "2022-11-05",
+            "2023-11-04",
+            "2024-11-02",
         )
+        self.assertHolidayName(name, range(1953, 2050))
+        self.assertNoHolidayName(name, range(1930, 1953))
 
     def test_christmas(self):
-        self.assertHoliday(
-            "1901-12-25",
-            "1901-12-26",
-            "2016-12-25",
-            "2016-12-26",
-        )
+        self.assertHolidayName("Julafton", (f"{year}-12-24" for year in range(1930, 2050)))
+        self.assertHolidayName("Juldagen", (f"{year}-12-25" for year in range(1930, 2050)))
+        self.assertHolidayName("Annandag jul", (f"{year}-12-26" for year in range(1930, 2050)))
+
+    def test_new_years_eve(self):
+        self.assertHolidayName("Nyårsafton", (f"{year}-12-31" for year in range(1930, 2050)))
 
     def test_sundays(self):
         self.assertSundays(Sweden)  # Sundays are considered holidays in Sweden.
@@ -156,6 +199,7 @@ class TestSweden(CommonCountryTests, SundayHolidays, TestCase):
 
     def test_2022(self):
         self.assertHolidays(
+            Sweden(include_sundays=False, years=2022),
             ("2022-01-01", "Nyårsdagen"),
             ("2022-01-06", "Trettondedag jul"),
             ("2022-04-15", "Långfredagen"),