Repository: vacanza/holidays (python)

Issue:
Add Fiji holidays
Links:
  - https://www.fiji.gov.fj/About-Fiji/Public-Holidays
  - https://www.timeanddate.com/holidays/fiji/
  - https://en.wikipedia.org/wiki/List_of_festivals_in_Fiji

Pull request:
Add Fiji holidays
<!--
  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.
-->
Add Fiji holidays
Closes #1180

## 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.
-->

- [X] New country/market holidays support (thank you!)
- [ ] 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


Patch:
diff --git a/README.md b/README.md
index 3a732d1e..a260e8f0 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ and detailed information.
 
 ## Available Countries
 
-We currently support 160 country codes. The standard way to refer to a country is by using its [ISO
+We currently support 161 country codes. The standard way to refer to a country is by using its [ISO
 3166-1 alpha-2 code](https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes), the same used
 for domain names, and for a subdivision its [ISO 3166-2
 code](https://en.wikipedia.org/wiki/ISO_3166-2). Some countries have common or foreign names or
@@ -498,6 +498,13 @@ any) in brackets, available languages and additional holiday categories. All cou
 <td></td>
 </tr>
 <tr>
+<td>Fiji</td>
+<td>FJ</td>
+<td></td>
+<td></td>
+<td>WORKDAY</td>
+</tr>
+<tr>
 <td>Finland</td>
 <td>FI</td>
 <td></td>
diff --git a/holidays/countries/__init__.py b/holidays/countries/__init__.py
index 3268b1b9..95aa51bc 100644
--- a/holidays/countries/__init__.py
+++ b/holidays/countries/__init__.py
@@ -63,6 +63,7 @@ from .el_salvador import ElSalvador, SV, SLV
 from .estonia import Estonia, EE, EST
 from .eswatini import Eswatini, SZ, SZW, Swaziland
 from .ethiopia import Ethiopia, ET, ETH
+from .fiji import Fiji, FJ, FJI
 from .finland import Finland, FI, FIN
 from .france import France, FR, FRA
 from .gabon import Gabon, GA, GAB
diff --git a/holidays/countries/fiji.py b/holidays/countries/fiji.py
new file mode 100644
index 00000000..a4a4d028
--- /dev/null
+++ b/holidays/countries/fiji.py
@@ -0,0 +1,183 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see AUTHORS.md file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from holidays.calendars import _CustomHinduHolidays, _CustomIslamicHolidays
+from holidays.calendars.gregorian import SEP, OCT, NOV, DEC
+from holidays.constants import PUBLIC, WORKDAY
+from holidays.groups import (
+    ChristianHolidays,
+    HinduCalendarHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+)
+from holidays.observed_holiday_base import (
+    ObservedHolidayBase,
+    SAT_SUN_TO_NEXT_MON,
+    SAT_SUN_TO_NEXT_MON_TUE,
+    ALL_TO_NEAREST_MON,
+)
+
+
+class Fiji(
+    ObservedHolidayBase,
+    ChristianHolidays,
+    HinduCalendarHolidays,
+    InternationalHolidays,
+    IslamicHolidays,
+):
+    """Fiji holidays.
+
+    References:
+        * <https://laws.gov.fj/Acts/DisplayAct/2910#>
+        * <https://laws.gov.fj/LawsAsMade>
+        * <https://www.fiji.gov.fj/About-Fiji/Public-Holidays>
+        * <https://www.timeanddate.com/holidays/fiji/>
+        * <https://en.wikipedia.org/wiki/List_of_festivals_in_Fiji>
+        * <https://www.rnz.co.nz/international/pacific-news/249514/new-public-holiday-for-fiji>
+        * <https://www.fijitimes.com.fj/constitution-day-public-holiday-removed-cabinet/>
+        * <https://fijivillage.com/news/National-Sports-Day-celebrated-5krs29/>
+        * <https://fijivillage.com/news/Cabinet-approves-Ratu-Sir-Lala-Sukuna-Day-and-Girmit-Day-and-removes-Constitution-Day-as-a-public-holiday-f48r5x/>
+
+    Official Fiji Public Holidays Calendar:
+         * [2016](https://www.fiji.gov.fj/Media-Center/Press-Releases/GOVERNMENT-APPROVES-2016-PUBLIC-HOLIDAYS.aspx)
+         * [2017](https://www.fiji.gov.fj/Media-Centre/News/GOVERNMENT-APPROVES-2017-PUBLIC-HOLIDAYS)
+         * [2018](https://web.archive.org/web/20180727205733/http://www.employment.gov.fj/images/Laws/Press%20Release%20-%20Government%20Approves%202018%20Public%20Holidays.pdf)
+         * [2019](https://web.archive.org/web/20191018023027/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2020](https://web.archive.org/web/20210103183942/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2021-2022](https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2023](https://web.archive.org/web/20231129154609/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2024](https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+         * [2025](https://web.archive.org/web/20250318092311/https://www.fiji.gov.fj/About-Fiji/Public-Holidays)
+    """
+
+    country = "FJ"
+    supported_categories = (PUBLIC, WORKDAY)
+    # %s (estimated).
+    estimated_label = "%s (estimated)"
+    # %s (observed).
+    observed_label = "%s (observed)"
+    # %s (observed, estimated).
+    observed_estimated_label = "%s (observed, estimated)"
+    # Act No. 13 of 2015
+    start_year = 2016
+
+    def __init__(self, islamic_show_estimated: bool = True, *args, **kwargs):
+        """
+        Args:
+            islamic_show_estimated:
+                Whether to add "estimated" label to Islamic holidays name
+                if holiday date is estimated.
+        """
+        ChristianHolidays.__init__(self)
+        HinduCalendarHolidays.__init__(self, cls=FijiHinduHolidays, show_estimated=True)
+        InternationalHolidays.__init__(self)
+        IslamicHolidays.__init__(
+            self, cls=FijiIslamicHolidays, show_estimated=islamic_show_estimated
+        )
+        kwargs.setdefault("observed_rule", SAT_SUN_TO_NEXT_MON)
+        super().__init__(*args, **kwargs)
+
+    def _populate_public_holidays(self):
+        # New Year's Day.
+        self._add_observed(self._add_new_years_day("New Year's Day"))
+
+        # Good Friday.
+        self._add_good_friday("Good Friday")
+
+        # Easter Saturday.
+        self._add_holy_saturday("Easter Saturday")
+
+        # Easter Monday.
+        self._add_easter_monday("Easter Monday")
+
+        # National Sports Day.
+        if self._year <= 2018:
+            self._add_holiday_last_fri_of_jun("National Sports Day")
+
+        if self._year <= 2022:
+            # Constitution Day.
+            self._add_observed(self._add_holiday_sep_7("Constitution Day"))
+
+        if self._year >= 2023:
+            # Girmit Day.
+            self._move_holiday(
+                self._add_holiday_may_14("Girmit Day"),
+                rule=ALL_TO_NEAREST_MON,
+                show_observed_label=False,
+            )
+
+        # Ratu Sir Lala Sukuna Day.
+        name = "Ratu Sir Lala Sukuna Day"
+        if self._year == 2023:
+            self._add_holiday_last_mon_of_may(name)
+        elif self._year >= 2024:
+            self._add_holiday_last_fri_of_may(name)
+
+        # Fiji Day.
+        self._add_holiday_oct_10("Fiji Day")
+
+        # Diwali.
+        self._add_observed(self._add_diwali_india("Diwali"))
+
+        # Christmas Day.
+        self._add_observed(self._add_christmas_day("Christmas Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)
+
+        # Boxing Day.
+        self._add_observed(self._add_christmas_day_two("Boxing Day"), rule=SAT_SUN_TO_NEXT_MON_TUE)
+
+        # Prophet Mohammed's Birthday.
+        for dt in self._add_mawlid_day("Prophet Mohammed's Birthday"):
+            self._add_observed(dt)
+
+    def _populate_workday_holidays(self):
+        if self._year >= 2023:
+            # Constitution Day.
+            self._add_holiday_sep_7("Constitution Day")
+
+
+class FJ(Fiji):
+    pass
+
+
+class FJI(Fiji):
+    pass
+
+
+class FijiHinduHolidays(_CustomHinduHolidays):
+    # https://www.timeanddate.com/holidays/fiji/diwali
+    DIWALI_INDIA_DATES = {
+        2016: (OCT, 31),
+        2017: (OCT, 19),
+        2018: (NOV, 7),
+        2019: (OCT, 28),
+        2020: (NOV, 14),
+        2021: (NOV, 4),
+        2022: (OCT, 25),
+        2023: (NOV, 13),
+        2024: (NOV, 1),
+        2025: (OCT, 21),
+    }
+
+
+class FijiIslamicHolidays(_CustomIslamicHolidays):
+    MAWLID_DATES = {
+        2016: (DEC, 12),
+        2017: (DEC, 2),
+        2018: (NOV, 19),
+        2019: (NOV, 9),
+        2020: (OCT, 31),
+        2021: (OCT, 18),
+        2022: (OCT, 7),  # looks like observed on FRI
+        2023: (SEP, 30),
+        2024: (SEP, 16),
+        2025: (SEP, 6),
+    }
diff --git a/holidays/observed_holiday_base.py b/holidays/observed_holiday_base.py
index d3545160..e1f5baa5 100644
--- a/holidays/observed_holiday_base.py
+++ b/holidays/observed_holiday_base.py
@@ -138,11 +138,14 @@ class ObservedHolidayBase(HolidayBase):
 
     def _add_observed(
         self,
-        dt: DateArg,
+        dt: Optional[DateArg] = None,
         name: Optional[str] = None,
         rule: Optional[ObservedRule] = None,
         show_observed_label: bool = True,
     ) -> tuple[bool, Optional[date]]:
+        if dt is None:
+            return False, None
+
         dt = dt if isinstance(dt, date) else date(self._year, *dt)
 
         if not self.observed or not self._is_observed(dt):
diff --git a/holidays/registry.py b/holidays/registry.py
index 09fead9c..48d99577 100644
--- a/holidays/registry.py
+++ b/holidays/registry.py
@@ -72,6 +72,7 @@ COUNTRIES: RegistryDict = {
     "estonia": ("Estonia", "EE", "EST"),
     "eswatini": ("Eswatini", "SZ", "SZW", "Swaziland"),
     "ethiopia": ("Ethiopia", "ET", "ETH"),
+    "fiji": ("Fiji", "FJ", "FJI"),
     "finland": ("Finland", "FI", "FIN"),
     "france": ("France", "FR", "FRA"),
     "gabon": ("Gabon", "GA", "GAB"),
diff --git a/snapshots/countries/FJ_COMMON.json b/snapshots/countries/FJ_COMMON.json
new file mode 100644
index 00000000..cd9a9d96
--- /dev/null
+++ b/snapshots/countries/FJ_COMMON.json
@@ -0,0 +1,447 @@
+{
+    "2016-01-01": "New Year's Day",
+    "2016-03-25": "Good Friday",
+    "2016-03-26": "Easter Saturday",
+    "2016-03-28": "Easter Monday",
+    "2016-06-24": "National Sports Day",
+    "2016-09-07": "Constitution Day",
+    "2016-10-10": "Fiji Day",
+    "2016-10-31": "Diwali",
+    "2016-12-12": "Prophet Mohammed's Birthday",
+    "2016-12-25": "Christmas Day",
+    "2016-12-26": "Boxing Day",
+    "2016-12-27": "Christmas Day (observed)",
+    "2017-01-01": "New Year's Day",
+    "2017-01-02": "New Year's Day (observed)",
+    "2017-04-14": "Good Friday",
+    "2017-04-15": "Easter Saturday",
+    "2017-04-17": "Easter Monday",
+    "2017-06-30": "National Sports Day",
+    "2017-09-07": "Constitution Day",
+    "2017-10-10": "Fiji Day",
+    "2017-10-19": "Diwali",
+    "2017-12-02": "Prophet Mohammed's Birthday",
+    "2017-12-04": "Prophet Mohammed's Birthday (observed)",
+    "2017-12-25": "Christmas Day",
+    "2017-12-26": "Boxing Day",
+    "2018-01-01": "New Year's Day",
+    "2018-03-30": "Good Friday",
+    "2018-03-31": "Easter Saturday",
+    "2018-04-02": "Easter Monday",
+    "2018-06-29": "National Sports Day",
+    "2018-09-07": "Constitution Day",
+    "2018-10-10": "Fiji Day",
+    "2018-11-07": "Diwali",
+    "2018-11-19": "Prophet Mohammed's Birthday",
+    "2018-12-25": "Christmas Day",
+    "2018-12-26": "Boxing Day",
+    "2019-01-01": "New Year's Day",
+    "2019-04-19": "Good Friday",
+    "2019-04-20": "Easter Saturday",
+    "2019-04-22": "Easter Monday",
+    "2019-09-07": "Constitution Day",
+    "2019-09-09": "Constitution Day (observed)",
+    "2019-10-10": "Fiji Day",
+    "2019-10-28": "Diwali",
+    "2019-11-09": "Prophet Mohammed's Birthday",
+    "2019-11-11": "Prophet Mohammed's Birthday (observed)",
+    "2019-12-25": "Christmas Day",
+    "2019-12-26": "Boxing Day",
+    "2020-01-01": "New Year's Day",
+    "2020-04-10": "Good Friday",
+    "2020-04-11": "Easter Saturday",
+    "2020-04-13": "Easter Monday",
+    "2020-09-07": "Constitution Day",
+    "2020-10-10": "Fiji Day",
+    "2020-10-31": "Prophet Mohammed's Birthday",
+    "2020-11-02": "Prophet Mohammed's Birthday (observed)",
+    "2020-11-14": "Diwali",
+    "2020-11-16": "Diwali (observed)",
+    "2020-12-25": "Christmas Day",
+    "2020-12-26": "Boxing Day",
+    "2020-12-28": "Boxing Day (observed)",
+    "2021-01-01": "New Year's Day",
+    "2021-04-02": "Good Friday",
+    "2021-04-03": "Easter Saturday",
+    "2021-04-05": "Easter Monday",
+    "2021-09-07": "Constitution Day",
+    "2021-10-10": "Fiji Day",
+    "2021-10-18": "Prophet Mohammed's Birthday",
+    "2021-11-04": "Diwali",
+    "2021-12-25": "Christmas Day",
+    "2021-12-26": "Boxing Day",
+    "2021-12-27": "Christmas Day (observed)",
+    "2021-12-28": "Boxing Day (observed)",
+    "2022-01-01": "New Year's Day",
+    "2022-01-03": "New Year's Day (observed)",
+    "2022-04-15": "Good Friday",
+    "2022-04-16": "Easter Saturday",
+    "2022-04-18": "Easter Monday",
+    "2022-09-07": "Constitution Day",
+    "2022-10-07": "Prophet Mohammed's Birthday",
+    "2022-10-10": "Fiji Day",
+    "2022-10-25": "Diwali",
+    "2022-12-25": "Christmas Day",
+    "2022-12-26": "Boxing Day",
+    "2022-12-27": "Christmas Day (observed)",
+    "2023-01-01": "New Year's Day",
+    "2023-01-02": "New Year's Day (observed)",
+    "2023-04-07": "Good Friday",
+    "2023-04-08": "Easter Saturday",
+    "2023-04-10": "Easter Monday",
+    "2023-05-15": "Girmit Day",
+    "2023-05-29": "Ratu Sir Lala Sukuna Day",
+    "2023-09-07": "Constitution Day",
+    "2023-09-30": "Prophet Mohammed's Birthday",
+    "2023-10-02": "Prophet Mohammed's Birthday (observed)",
+    "2023-10-10": "Fiji Day",
+    "2023-11-13": "Diwali",
+    "2023-12-25": "Christmas Day",
+    "2023-12-26": "Boxing Day",
+    "2024-01-01": "New Year's Day",
+    "2024-03-29": "Good Friday",
+    "2024-03-30": "Easter Saturday",
+    "2024-04-01": "Easter Monday",
+    "2024-05-13": "Girmit Day",
+    "2024-05-31": "Ratu Sir Lala Sukuna Day",
+    "2024-09-07": "Constitution Day",
+    "2024-09-16": "Prophet Mohammed's Birthday",
+    "2024-10-10": "Fiji Day",
+    "2024-11-01": "Diwali",
+    "2024-12-25": "Christmas Day",
+    "2024-12-26": "Boxing Day",
+    "2025-01-01": "New Year's Day",
+    "2025-04-18": "Good Friday",
+    "2025-04-19": "Easter Saturday",
+    "2025-04-21": "Easter Monday",
+    "2025-05-12": "Girmit Day",
+    "2025-05-30": "Ratu Sir Lala Sukuna Day",
+    "2025-09-06": "Prophet Mohammed's Birthday",
+    "2025-09-07": "Constitution Day",
+    "2025-09-08": "Prophet Mohammed's Birthday (observed)",
+    "2025-10-10": "Fiji Day",
+    "2025-10-21": "Diwali",
+    "2025-12-25": "Christmas Day",
+    "2025-12-26": "Boxing Day",
+    "2026-01-01": "New Year's Day",
+    "2026-04-03": "Good Friday",
+    "2026-04-04": "Easter Saturday",
+    "2026-04-06": "Easter Monday",
+    "2026-05-11": "Girmit Day",
+    "2026-05-29": "Ratu Sir Lala Sukuna Day",
+    "2026-08-25": "Prophet Mohammed's Birthday (estimated)",
+    "2026-09-07": "Constitution Day",
+    "2026-10-10": "Fiji Day",
+    "2026-11-08": "Diwali (estimated)",
+    "2026-11-09": "Diwali (observed, estimated)",
+    "2026-12-25": "Christmas Day",
+    "2026-12-26": "Boxing Day",
+    "2026-12-28": "Boxing Day (observed)",
+    "2027-01-01": "New Year's Day",
+    "2027-03-26": "Good Friday",
+    "2027-03-27": "Easter Saturday",
+    "2027-03-29": "Easter Monday",
+    "2027-05-17": "Girmit Day",
+    "2027-05-28": "Ratu Sir Lala Sukuna Day",
+    "2027-08-14": "Prophet Mohammed's Birthday (estimated)",
+    "2027-08-16": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2027-09-07": "Constitution Day",
+    "2027-10-10": "Fiji Day",
+    "2027-10-29": "Diwali (estimated)",
+    "2027-12-25": "Christmas Day",
+    "2027-12-26": "Boxing Day",
+    "2027-12-27": "Christmas Day (observed)",
+    "2027-12-28": "Boxing Day (observed)",
+    "2028-01-01": "New Year's Day",
+    "2028-01-03": "New Year's Day (observed)",
+    "2028-04-14": "Good Friday",
+    "2028-04-15": "Easter Saturday",
+    "2028-04-17": "Easter Monday",
+    "2028-05-15": "Girmit Day",
+    "2028-05-26": "Ratu Sir Lala Sukuna Day",
+    "2028-08-03": "Prophet Mohammed's Birthday (estimated)",
+    "2028-09-07": "Constitution Day",
+    "2028-10-10": "Fiji Day",
+    "2028-10-17": "Diwali (estimated)",
+    "2028-12-25": "Christmas Day",
+    "2028-12-26": "Boxing Day",
+    "2029-01-01": "New Year's Day",
+    "2029-03-30": "Good Friday",
+    "2029-03-31": "Easter Saturday",
+    "2029-04-02": "Easter Monday",
+    "2029-05-14": "Girmit Day",
+    "2029-05-25": "Ratu Sir Lala Sukuna Day",
+    "2029-07-24": "Prophet Mohammed's Birthday (estimated)",
+    "2029-09-07": "Constitution Day",
+    "2029-10-10": "Fiji Day",
+    "2029-11-05": "Diwali (estimated)",
+    "2029-12-25": "Christmas Day",
+    "2029-12-26": "Boxing Day",
+    "2030-01-01": "New Year's Day",
+    "2030-04-19": "Good Friday",
+    "2030-04-20": "Easter Saturday",
+    "2030-04-22": "Easter Monday",
+    "2030-05-13": "Girmit Day",
+    "2030-05-31": "Ratu Sir Lala Sukuna Day",
+    "2030-07-13": "Prophet Mohammed's Birthday (estimated)",
+    "2030-07-15": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2030-09-07": "Constitution Day",
+    "2030-10-10": "Fiji Day",
+    "2030-10-26": "Diwali (estimated)",
+    "2030-10-28": "Diwali (observed, estimated)",
+    "2030-12-25": "Christmas Day",
+    "2030-12-26": "Boxing Day",
+    "2031-01-01": "New Year's Day",
+    "2031-04-11": "Good Friday",
+    "2031-04-12": "Easter Saturday",
+    "2031-04-14": "Easter Monday",
+    "2031-05-12": "Girmit Day",
+    "2031-05-30": "Ratu Sir Lala Sukuna Day",
+    "2031-07-02": "Prophet Mohammed's Birthday (estimated)",
+    "2031-09-07": "Constitution Day",
+    "2031-10-10": "Fiji Day",
+    "2031-11-14": "Diwali (estimated)",
+    "2031-12-25": "Christmas Day",
+    "2031-12-26": "Boxing Day",
+    "2032-01-01": "New Year's Day",
+    "2032-03-26": "Good Friday",
+    "2032-03-27": "Easter Saturday",
+    "2032-03-29": "Easter Monday",
+    "2032-05-17": "Girmit Day",
+    "2032-05-28": "Ratu Sir Lala Sukuna Day",
+    "2032-06-20": "Prophet Mohammed's Birthday (estimated)",
+    "2032-06-21": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2032-09-07": "Constitution Day",
+    "2032-10-10": "Fiji Day",
+    "2032-11-02": "Diwali (estimated)",
+    "2032-12-25": "Christmas Day",
+    "2032-12-26": "Boxing Day",
+    "2032-12-27": "Christmas Day (observed)",
+    "2032-12-28": "Boxing Day (observed)",
+    "2033-01-01": "New Year's Day",
+    "2033-01-03": "New Year's Day (observed)",
+    "2033-04-15": "Good Friday",
+    "2033-04-16": "Easter Saturday",
+    "2033-04-18": "Easter Monday",
+    "2033-05-16": "Girmit Day",
+    "2033-05-27": "Ratu Sir Lala Sukuna Day",
+    "2033-06-09": "Prophet Mohammed's Birthday (estimated)",
+    "2033-09-07": "Constitution Day",
+    "2033-10-10": "Fiji Day",
+    "2033-10-22": "Diwali (estimated)",
+    "2033-10-24": "Diwali (observed, estimated)",
+    "2033-12-25": "Christmas Day",
+    "2033-12-26": "Boxing Day",
+    "2033-12-27": "Christmas Day (observed)",
+    "2034-01-01": "New Year's Day",
+    "2034-01-02": "New Year's Day (observed)",
+    "2034-04-07": "Good Friday",
+    "2034-04-08": "Easter Saturday",
+    "2034-04-10": "Easter Monday",
+    "2034-05-15": "Girmit Day",
+    "2034-05-26": "Ratu Sir Lala Sukuna Day",
+    "2034-05-30": "Prophet Mohammed's Birthday (estimated)",
+    "2034-09-07": "Constitution Day",
+    "2034-10-10": "Fiji Day",
+    "2034-11-10": "Diwali (estimated)",
+    "2034-12-25": "Christmas Day",
+    "2034-12-26": "Boxing Day",
+    "2035-01-01": "New Year's Day",
+    "2035-03-23": "Good Friday",
+    "2035-03-24": "Easter Saturday",
+    "2035-03-26": "Easter Monday",
+    "2035-05-14": "Girmit Day",
+    "2035-05-20": "Prophet Mohammed's Birthday (estimated)",
+    "2035-05-21": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2035-05-25": "Ratu Sir Lala Sukuna Day",
+    "2035-09-07": "Constitution Day",
+    "2035-10-10": "Fiji Day",
+    "2035-10-30": "Diwali (estimated)",
+    "2035-12-25": "Christmas Day",
+    "2035-12-26": "Boxing Day",
+    "2036-01-01": "New Year's Day",
+    "2036-04-11": "Good Friday",
+    "2036-04-12": "Easter Saturday",
+    "2036-04-14": "Easter Monday",
+    "2036-05-08": "Prophet Mohammed's Birthday (estimated)",
+    "2036-05-12": "Girmit Day",
+    "2036-05-30": "Ratu Sir Lala Sukuna Day",
+    "2036-09-07": "Constitution Day",
+    "2036-10-10": "Fiji Day",
+    "2036-12-25": "Christmas Day",
+    "2036-12-26": "Boxing Day",
+    "2037-01-01": "New Year's Day",
+    "2037-04-03": "Good Friday",
+    "2037-04-04": "Easter Saturday",
+    "2037-04-06": "Easter Monday",
+    "2037-04-28": "Prophet Mohammed's Birthday (estimated)",
+    "2037-05-11": "Girmit Day",
+    "2037-05-29": "Ratu Sir Lala Sukuna Day",
+    "2037-09-07": "Constitution Day",
+    "2037-10-10": "Fiji Day",
+    "2037-12-25": "Christmas Day",
+    "2037-12-26": "Boxing Day",
+    "2037-12-28": "Boxing Day (observed)",
+    "2038-01-01": "New Year's Day",
+    "2038-04-17": "Prophet Mohammed's Birthday (estimated)",
+    "2038-04-19": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2038-04-23": "Good Friday",
+    "2038-04-24": "Easter Saturday",
+    "2038-04-26": "Easter Monday",
+    "2038-05-17": "Girmit Day",
+    "2038-05-28": "Ratu Sir Lala Sukuna Day",
+    "2038-09-07": "Constitution Day",
+    "2038-10-10": "Fiji Day",
+    "2038-12-25": "Christmas Day",
+    "2038-12-26": "Boxing Day",
+    "2038-12-27": "Christmas Day (observed)",
+    "2038-12-28": "Boxing Day (observed)",
+    "2039-01-01": "New Year's Day",
+    "2039-01-03": "New Year's Day (observed)",
+    "2039-04-06": "Prophet Mohammed's Birthday (estimated)",
+    "2039-04-08": "Good Friday",
+    "2039-04-09": "Easter Saturday",
+    "2039-04-11": "Easter Monday",
+    "2039-05-16": "Girmit Day",
+    "2039-05-27": "Ratu Sir Lala Sukuna Day",
+    "2039-09-07": "Constitution Day",
+    "2039-10-10": "Fiji Day",
+    "2039-12-25": "Christmas Day",
+    "2039-12-26": "Boxing Day",
+    "2039-12-27": "Christmas Day (observed)",
+    "2040-01-01": "New Year's Day",
+    "2040-01-02": "New Year's Day (observed)",
+    "2040-03-25": "Prophet Mohammed's Birthday (estimated)",
+    "2040-03-26": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2040-03-30": "Good Friday",
+    "2040-03-31": "Easter Saturday",
+    "2040-04-02": "Easter Monday",
+    "2040-05-14": "Girmit Day",
+    "2040-05-25": "Ratu Sir Lala Sukuna Day",
+    "2040-09-07": "Constitution Day",
+    "2040-10-10": "Fiji Day",
+    "2040-12-25": "Christmas Day",
+    "2040-12-26": "Boxing Day",
+    "2041-01-01": "New Year's Day",
+    "2041-03-15": "Prophet Mohammed's Birthday (estimated)",
+    "2041-04-19": "Good Friday",
+    "2041-04-20": "Easter Saturday",
+    "2041-04-22": "Easter Monday",
+    "2041-05-13": "Girmit Day",
+    "2041-05-31": "Ratu Sir Lala Sukuna Day",
+    "2041-09-07": "Constitution Day",
+    "2041-10-10": "Fiji Day",
+    "2041-12-25": "Christmas Day",
+    "2041-12-26": "Boxing Day",
+    "2042-01-01": "New Year's Day",
+    "2042-03-04": "Prophet Mohammed's Birthday (estimated)",
+    "2042-04-04": "Good Friday",
+    "2042-04-05": "Easter Saturday",
+    "2042-04-07": "Easter Monday",
+    "2042-05-12": "Girmit Day",
+    "2042-05-30": "Ratu Sir Lala Sukuna Day",
+    "2042-09-07": "Constitution Day",
+    "2042-10-10": "Fiji Day",
+    "2042-12-25": "Christmas Day",
+    "2042-12-26": "Boxing Day",
+    "2043-01-01": "New Year's Day",
+    "2043-02-22": "Prophet Mohammed's Birthday (estimated)",
+    "2043-02-23": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2043-03-27": "Good Friday",
+    "2043-03-28": "Easter Saturday",
+    "2043-03-30": "Easter Monday",
+    "2043-05-11": "Girmit Day",
+    "2043-05-29": "Ratu Sir Lala Sukuna Day",
+    "2043-09-07": "Constitution Day",
+    "2043-10-10": "Fiji Day",
+    "2043-12-25": "Christmas Day",
+    "2043-12-26": "Boxing Day",
+    "2043-12-28": "Boxing Day (observed)",
+    "2044-01-01": "New Year's Day",
+    "2044-02-11": "Prophet Mohammed's Birthday (estimated)",
+    "2044-04-15": "Good Friday",
+    "2044-04-16": "Easter Saturday",
+    "2044-04-18": "Easter Monday",
+    "2044-05-16": "Girmit Day",
+    "2044-05-27": "Ratu Sir Lala Sukuna Day",
+    "2044-09-07": "Constitution Day",
+    "2044-10-10": "Fiji Day",
+    "2044-12-25": "Christmas Day",
+    "2044-12-26": "Boxing Day",
+    "2044-12-27": "Christmas Day (observed)",
+    "2045-01-01": "New Year's Day",
+    "2045-01-02": "New Year's Day (observed)",
+    "2045-01-30": "Prophet Mohammed's Birthday (estimated)",
+    "2045-04-07": "Good Friday",
+    "2045-04-08": "Easter Saturday",
+    "2045-04-10": "Easter Monday",
+    "2045-05-15": "Girmit Day",
+    "2045-05-26": "Ratu Sir Lala Sukuna Day",
+    "2045-09-07": "Constitution Day",
+    "2045-10-10": "Fiji Day",
+    "2045-12-25": "Christmas Day",
+    "2045-12-26": "Boxing Day",
+    "2046-01-01": "New Year's Day",
+    "2046-01-19": "Prophet Mohammed's Birthday (estimated)",
+    "2046-03-23": "Good Friday",
+    "2046-03-24": "Easter Saturday",
+    "2046-03-26": "Easter Monday",
+    "2046-05-14": "Girmit Day",
+    "2046-05-25": "Ratu Sir Lala Sukuna Day",
+    "2046-09-07": "Constitution Day",
+    "2046-10-10": "Fiji Day",
+    "2046-12-25": "Christmas Day",
+    "2046-12-26": "Boxing Day",
+    "2047-01-01": "New Year's Day",
+    "2047-01-08": "Prophet Mohammed's Birthday (estimated)",
+    "2047-04-12": "Good Friday",
+    "2047-04-13": "Easter Saturday",
+    "2047-04-15": "Easter Monday",
+    "2047-05-13": "Girmit Day",
+    "2047-05-31": "Ratu Sir Lala Sukuna Day",
+    "2047-09-07": "Constitution Day",
+    "2047-10-10": "Fiji Day",
+    "2047-12-25": "Christmas Day",
+    "2047-12-26": "Boxing Day",
+    "2047-12-29": "Prophet Mohammed's Birthday (estimated)",
+    "2047-12-30": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2048-01-01": "New Year's Day",
+    "2048-04-03": "Good Friday",
+    "2048-04-04": "Easter Saturday",
+    "2048-04-06": "Easter Monday",
+    "2048-05-11": "Girmit Day",
+    "2048-05-29": "Ratu Sir Lala Sukuna Day",
+    "2048-09-07": "Constitution Day",
+    "2048-10-10": "Fiji Day",
+    "2048-12-18": "Prophet Mohammed's Birthday (estimated)",
+    "2048-12-25": "Christmas Day",
+    "2048-12-26": "Boxing Day",
+    "2048-12-28": "Boxing Day (observed)",
+    "2049-01-01": "New Year's Day",
+    "2049-04-16": "Good Friday",
+    "2049-04-17": "Easter Saturday",
+    "2049-04-19": "Easter Monday",
+    "2049-05-17": "Girmit Day",
+    "2049-05-28": "Ratu Sir Lala Sukuna Day",
+    "2049-09-07": "Constitution Day",
+    "2049-10-10": "Fiji Day",
+    "2049-12-07": "Prophet Mohammed's Birthday (estimated)",
+    "2049-12-25": "Christmas Day",
+    "2049-12-26": "Boxing Day",
+    "2049-12-27": "Christmas Day (observed)",
+    "2049-12-28": "Boxing Day (observed)",
+    "2050-01-01": "New Year's Day",
+    "2050-01-03": "New Year's Day (observed)",
+    "2050-04-08": "Good Friday",
+    "2050-04-09": "Easter Saturday",
+    "2050-04-11": "Easter Monday",
+    "2050-05-16": "Girmit Day",
+    "2050-05-27": "Ratu Sir Lala Sukuna Day",
+    "2050-09-07": "Constitution Day",
+    "2050-10-10": "Fiji Day",
+    "2050-11-26": "Prophet Mohammed's Birthday (estimated)",
+    "2050-11-28": "Prophet Mohammed's Birthday (observed, estimated)",
+    "2050-12-25": "Christmas Day",
+    "2050-12-26": "Boxing Day",
+    "2050-12-27": "Christmas Day (observed)"
+}


Test patch:
diff --git a/tests/countries/test_fiji.py b/tests/countries/test_fiji.py
new file mode 100644
index 00000000..f35badd1
--- /dev/null
+++ b/tests/countries/test_fiji.py
@@ -0,0 +1,342 @@
+#  holidays
+#  --------
+#  A fast, efficient Python library for generating country, province and state
+#  specific sets of holidays on the fly. It aims to make determining whether a
+#  specific date is a holiday as fast and flexible as possible.
+#
+#  Authors: Vacanza Team and individual contributors (see AUTHORS.md file)
+#           dr-prodigy <dr.prodigy.github@gmail.com> (c) 2017-2023
+#           ryanss <ryanssdev@icloud.com> (c) 2014-2017
+#  Website: https://github.com/vacanza/holidays
+#  License: MIT (see LICENSE file)
+
+from unittest import TestCase
+
+from holidays.constants import PUBLIC, WORKDAY
+from holidays.countries.fiji import Fiji, FJ, FJI
+from tests.common import CommonCountryTests
+
+
+class TestFiji(CommonCountryTests, TestCase):
+    @classmethod
+    def setUpClass(cls):
+        years = range(2016, 2050)
+        super().setUpClass(Fiji, years=years)
+        cls.workday_holidays = Fiji(categories=WORKDAY, years=years)
+
+    def test_country_aliases(self):
+        self.assertAliases(Fiji, FJ, FJI)
+
+    def test_no_holidays(self):
+        self.assertNoHolidays(Fiji(years=2015, categories=PUBLIC))
+        self.assertNoHolidays(Fiji(years=2022, categories=WORKDAY))
+
+    def test_new_years_day(self):
+        name = "New Year's Day"
+
+        self.assertHolidayName(name, (f"{year}-01-01" for year in range(2016, 2050)))
+        dt_obs = (
+            "2017-01-02",
+            "2022-01-03",
+            "2023-01-02",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_good_friday(self):
+        name = "Good Friday"
+
+        dt = (
+            "2018-03-30",
+            "2019-04-19",
+            "2020-04-10",
+            "2021-04-02",
+            "2022-04-15",
+            "2023-04-07",
+            "2024-03-29",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_easter_saturday(self):
+        name = "Easter Saturday"
+
+        dt = (
+            "2018-03-31",
+            "2019-04-20",
+            "2020-04-11",
+            "2021-04-03",
+            "2022-04-16",
+            "2023-04-08",
+            "2024-03-30",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_easter_monday(self):
+        name = "Easter Monday"
+
+        dt = (
+            "2018-04-02",
+            "2019-04-22",
+            "2020-04-13",
+            "2021-04-05",
+            "2022-04-18",
+            "2023-04-10",
+            "2024-04-01",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2016, 2050))
+
+    def test_girmit_day(self):
+        name = "Girmit Day"
+
+        dt = (
+            "2023-05-15",
+            "2024-05-13",
+            "2025-05-12",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2023, 2050))
+        self.assertNoHolidayName(name, range(2016, 2023))
+
+    def test_national_sports_day(self):
+        name = "National Sports Day"
+
+        # Public Holidays
+        dt = (
+            "2016-06-24",
+            "2017-06-30",
+            "2018-06-29",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertNoHolidayName(name, range(2019, 2050))
+
+    def test_constitution_day(self):
+        name = "Constitution Day"
+
+        # Public Holidays
+        self.assertHolidayName(name, (f"{year}-09-07" for year in range(2016, 2023)))
+        self.assertNoHolidayName(name, range(2023, 2050))
+
+        dt_obs = ("2019-09-09",)
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+        # Workdays.
+        self.assertHolidayName(
+            name, self.workday_holidays, (f"{year}-09-07" for year in range(2023, 2050))
+        )
+        self.assertNoHolidayName(name, self.workday_holidays, range(2016, 2023))
+
+    def test_ratu_sir_lala_sukuna_day(self):
+        name = "Ratu Sir Lala Sukuna Day"
+
+        # Public Holidays.
+        dt = (
+            "2023-05-29",
+            "2024-05-31",
+            "2025-05-30",
+        )
+        self.assertHolidayName(name, dt)
+        self.assertHolidayName(name, range(2023, 2050))
+        self.assertNoHolidayName(name, range(2016, 2023))
+
+    def test_fiji_day(self):
+        self.assertHolidayName("Fiji Day", (f"{year}-10-10" for year in range(2016, 2050)))
+
+    def test_diwali(self):
+        name = "Diwali"
+
+        self.assertHolidayName(
+            name,
+            "2016-10-31",
+            "2017-10-19",
+            "2018-11-07",
+            "2019-10-28",
+            "2020-11-14",
+            "2021-11-04",
+            "2022-10-25",
+            "2023-11-13",
+            "2024-11-01",
+            "2025-10-21",
+        )
+
+        dt_obs = ("2020-11-16",)
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_christmas_day(self):
+        name = "Christmas Day"
+
+        self.assertHolidayName(name, (f"{year}-12-25" for year in range(2016, 2050)))
+
+        dt_obs = (
+            "2016-12-27",
+            "2021-12-27",
+            "2022-12-27",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_boxing_day(self):
+        name = "Boxing Day"
+
+        self.assertHolidayName(name, (f"{year}-12-26" for year in range(2016, 2050)))
+
+        dt_obs = (
+            "2020-12-28",
+            "2021-12-28",
+            "2026-12-28",
+            "2027-12-28",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_prophets_birthday(self):
+        name = "Prophet Mohammed's Birthday"
+        self.assertHolidayName(
+            name,
+            "2018-11-19",
+            "2019-11-09",
+            "2020-10-31",
+            "2021-10-18",
+            "2022-10-07",
+            "2023-09-30",
+            "2024-09-16",
+        )
+        dt_obs = (
+            "2019-11-11",
+            "2020-11-02",
+            "2023-10-02",
+            "2025-09-08",
+        )
+        self.assertHolidayName(f"{name} (observed)", dt_obs)
+        self.assertNoNonObservedHoliday(dt_obs)
+
+    def test_2019(self):
+        # https://web.archive.org/web/20191018023027/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2019),
+            ("2019-01-01", "New Year's Day"),
+            ("2019-04-19", "Good Friday"),
+            ("2019-04-20", "Easter Saturday"),
+            ("2019-04-22", "Easter Monday"),
+            ("2019-09-07", "Constitution Day"),
+            ("2019-09-09", "Constitution Day (observed)"),
+            ("2019-10-10", "Fiji Day"),
+            ("2019-10-28", "Diwali"),
+            ("2019-11-09", "Prophet Mohammed's Birthday"),
+            ("2019-11-11", "Prophet Mohammed's Birthday (observed)"),
+            ("2019-12-25", "Christmas Day"),
+            ("2019-12-26", "Boxing Day"),
+        )
+
+    def test_2020(self):
+        # https://web.archive.org/web/20210103183942/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2020),
+            ("2020-01-01", "New Year's Day"),
+            ("2020-04-10", "Good Friday"),
+            ("2020-04-11", "Easter Saturday"),
+            ("2020-04-13", "Easter Monday"),
+            ("2020-09-07", "Constitution Day"),
+            ("2020-10-10", "Fiji Day"),
+            ("2020-10-31", "Prophet Mohammed's Birthday"),
+            ("2020-11-02", "Prophet Mohammed's Birthday (observed)"),
+            ("2020-11-14", "Diwali"),
+            ("2020-11-16", "Diwali (observed)"),
+            ("2020-12-25", "Christmas Day"),
+            ("2020-12-26", "Boxing Day"),
+            ("2020-12-28", "Boxing Day (observed)"),
+        )
+
+    def test_2021(self):
+        # https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2021),
+            ("2021-01-01", "New Year's Day"),
+            ("2021-04-02", "Good Friday"),
+            ("2021-04-03", "Easter Saturday"),
+            ("2021-04-05", "Easter Monday"),
+            ("2021-09-07", "Constitution Day"),
+            ("2021-10-10", "Fiji Day"),
+            ("2021-10-18", "Prophet Mohammed's Birthday"),
+            ("2021-11-04", "Diwali"),
+            ("2021-12-25", "Christmas Day"),
+            ("2021-12-26", "Boxing Day"),
+            ("2021-12-27", "Christmas Day (observed)"),
+            ("2021-12-28", "Boxing Day (observed)"),
+        )
+
+    def test_2022(self):
+        # https://web.archive.org/web/20221223004409/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2022),
+            ("2022-01-01", "New Year's Day"),
+            ("2022-01-03", "New Year's Day (observed)"),
+            ("2022-04-15", "Good Friday"),
+            ("2022-04-16", "Easter Saturday"),
+            ("2022-04-18", "Easter Monday"),
+            ("2022-09-07", "Constitution Day"),
+            ("2022-10-07", "Prophet Mohammed's Birthday"),
+            ("2022-10-10", "Fiji Day"),
+            ("2022-10-25", "Diwali"),
+            ("2022-12-25", "Christmas Day"),
+            ("2022-12-26", "Boxing Day"),
+            ("2022-12-27", "Christmas Day (observed)"),
+        )
+
+    def test_2023(self):
+        # https://web.archive.org/web/20231129154609/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2023),
+            ("2023-01-01", "New Year's Day"),
+            ("2023-01-02", "New Year's Day (observed)"),
+            ("2023-04-07", "Good Friday"),
+            ("2023-04-08", "Easter Saturday"),
+            ("2023-04-10", "Easter Monday"),
+            ("2023-05-15", "Girmit Day"),
+            ("2023-05-29", "Ratu Sir Lala Sukuna Day"),
+            ("2023-09-30", "Prophet Mohammed's Birthday"),
+            ("2023-10-02", "Prophet Mohammed's Birthday (observed)"),
+            ("2023-10-10", "Fiji Day"),
+            ("2023-11-13", "Diwali"),
+            ("2023-12-25", "Christmas Day"),
+            ("2023-12-26", "Boxing Day"),
+        )
+
+    def test_2024(self):
+        # https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2024),
+            ("2024-01-01", "New Year's Day"),
+            ("2024-03-29", "Good Friday"),
+            ("2024-03-30", "Easter Saturday"),
+            ("2024-04-01", "Easter Monday"),
+            ("2024-05-13", "Girmit Day"),
+            ("2024-05-31", "Ratu Sir Lala Sukuna Day"),
+            ("2024-09-16", "Prophet Mohammed's Birthday"),
+            ("2024-10-10", "Fiji Day"),
+            ("2024-11-01", "Diwali"),
+            ("2024-12-25", "Christmas Day"),
+            ("2024-12-26", "Boxing Day"),
+        )
+
+    def test_2025(self):
+        # https://web.archive.org/web/20250121185434/https://www.fiji.gov.fj/About-Fiji/Public-Holidays
+        self.assertHolidays(
+            Fiji(years=2025),
+            ("2025-01-01", "New Year's Day"),
+            ("2025-04-18", "Good Friday"),
+            ("2025-04-19", "Easter Saturday"),
+            ("2025-04-21", "Easter Monday"),
+            ("2025-05-12", "Girmit Day"),
+            ("2025-05-30", "Ratu Sir Lala Sukuna Day"),
+            ("2025-09-06", "Prophet Mohammed's Birthday"),
+            ("2025-09-08", "Prophet Mohammed's Birthday (observed)"),
+            ("2025-10-10", "Fiji Day"),
+            ("2025-10-21", "Diwali"),
+            ("2025-12-25", "Christmas Day"),
+            ("2025-12-26", "Boxing Day"),
+        )