using LehrerApp.Core.Models; using LehrerApp.Core.Services; using Xunit; namespace LehrerApp.Tests; public sealed class PublicHolidayServiceTests { private readonly PublicHolidayService _service = new(); [Theory] [InlineData(2023, "2023-04-09")] [InlineData(2024, "2024-03-31")] [InlineData(2025, "2025-04-20")] [InlineData(2026, "2026-04-05")] [InlineData(2027, "2027-03-28")] public void GetHolidays_Ostermontag_LiegtEinenTagNachDemBekanntenOstersonntag(int year, string easterSundayIso) { var easterSunday = DateOnly.Parse(easterSundayIso); var holidays = _service.GetHolidays(year, GermanState.NW); Assert.Contains(holidays, h => h.Name == "Ostermontag" && h.Date == easterSunday.AddDays(1)); Assert.Contains(holidays, h => h.Name == "Karfreitag" && h.Date == easterSunday.AddDays(-2)); } [Fact] public void GetHolidays_AlleBundeslaender_EnthaltenDieBundesweitenFeiertage() { foreach (var state in Enum.GetValues()) { var holidays = _service.GetHolidays(2026, state); Assert.Contains(holidays, h => h.Date == new DateOnly(2026, 1, 1)); // Neujahr Assert.Contains(holidays, h => h.Date == new DateOnly(2026, 5, 1)); // Tag der Arbeit Assert.Contains(holidays, h => h.Date == new DateOnly(2026, 10, 3)); // Tag der Deutschen Einheit Assert.Contains(holidays, h => h.Date == new DateOnly(2026, 12, 25)); Assert.Contains(holidays, h => h.Date == new DateOnly(2026, 12, 26)); } } [Fact] public void GetHolidays_Fronleichnam_NurInDenZustaendigenBundeslaendern() { var nrw = _service.GetHolidays(2026, GermanState.NW); var berlin = _service.GetHolidays(2026, GermanState.BE); Assert.Contains(nrw, h => h.Name == "Fronleichnam"); Assert.DoesNotContain(berlin, h => h.Name == "Fronleichnam"); } [Fact] public void GetHolidays_Reformationstag_NurInDenZustaendigenBundeslaendern() { var sachsen = _service.GetHolidays(2026, GermanState.SN); var bayern = _service.GetHolidays(2026, GermanState.BY); Assert.Contains(sachsen, h => h.Name == "Reformationstag"); Assert.DoesNotContain(bayern, h => h.Name == "Reformationstag"); } [Fact] public void GetHolidays_SindNachDatumSortiert() { var holidays = _service.GetHolidays(2026, GermanState.BY); Assert.Equal(holidays.OrderBy(h => h.Date).Select(h => h.Date), holidays.Select(h => h.Date)); } }