Skip to content

Commit

Permalink
Merge pull request #232 from b-h-mck/KingsBirthday
Browse files Browse the repository at this point in the history
NZ & AU - King's Birthday
  • Loading branch information
joaomatossilva authored Feb 17, 2025
2 parents 2cc5577 + 96c542d commit a186577
Show file tree
Hide file tree
Showing 4 changed files with 243 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ public EN_AUHolidayStrategy()
this.InnerHolidays.Add(ChristianHolidays.EasterMonday);
this.InnerHolidays.Add(AnzacDay);
this.InnerHolidays.Add(QueensBirthday);
this.InnerHolidays.Add(KingsBirthday);
this.InnerHolidays.Add(LabourDay);
this.InnerHolidays.Add(ChristianHolidays.Christmas);
this.InnerHolidays.Add(GlobalHolidays.BoxingDay);
Expand Down Expand Up @@ -133,7 +134,7 @@ public static Holiday AnzacDay
}
}

//2nd Monday in June - Queen's Birthday
//2nd Monday in June (2022 and earlier) - Queen's Birthday
private static Holiday queensBirthday;

public static Holiday QueensBirthday
Expand All @@ -144,11 +145,29 @@ public static Holiday QueensBirthday
{
queensBirthday = new NthDayOfWeekInMonthHoliday("Queen's Birthday", 2, DayOfWeek.Monday, 6,
CountDirection.FromFirst);
queensBirthday = new YearDependantHoliday(year => (year <= 2022), queensBirthday);
}
return queensBirthday;
}
}

//2nd Monday in June (2023 and later) - Kings's Birthday
private static Holiday kingsBirthday;

public static Holiday KingsBirthday
{
get
{
if (kingsBirthday == null)
{
kingsBirthday = new NthDayOfWeekInMonthHoliday("King's Birthday", 2, DayOfWeek.Monday, 6,
CountDirection.FromFirst);
kingsBirthday = new YearDependantHoliday(year => (year >= 2023), kingsBirthday);
}
return kingsBirthday;
}
}

//1nd Monday in October - Labour Day
private static Holiday labourDay;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public EN_NZHolidayStrategy()
this.InnerHolidays.Add(ChristianHolidays.EasterMonday);
this.InnerHolidays.Add(AnzacDay);
this.InnerHolidays.Add(QueensBirthday);
this.InnerHolidays.Add(KingsBirthday);
this.InnerHolidays.Add(Matariki);
this.InnerHolidays.Add(LabourDay);
this.InnerHolidays.Add(ChristianHolidays.Christmas);
Expand Down Expand Up @@ -144,7 +145,7 @@ public static Holiday AnzacDay
}
}

// 1st Monday in June - Queen's Birthday
// 1st Monday in June (2022 and earlier) - Queen's Birthday
private static Holiday queensBirthday;

public static Holiday QueensBirthday
Expand All @@ -155,11 +156,29 @@ public static Holiday QueensBirthday
{
queensBirthday = new NthDayOfWeekInMonthHoliday("Queen's Birthday", 1, DayOfWeek.Monday, 6,
CountDirection.FromFirst);
queensBirthday = new YearDependantHoliday(year => (year <= 2022), queensBirthday);
}
return queensBirthday;
}
}

// 1st Monday in June (2023 and later) - King's Birthday
private static Holiday kingsBirthday;

public static Holiday KingsBirthday
{
get
{
if (kingsBirthday == null)
{
kingsBirthday = new NthDayOfWeekInMonthHoliday("King's Birthday", 1, DayOfWeek.Monday, 6,
CountDirection.FromFirst);
kingsBirthday = new YearDependantHoliday(year => (year >= 2023), kingsBirthday);
}
return kingsBirthday;
}
}

// Some Friday on June or July - Matariki
private static Holiday matariki;
private static Holiday Matariki
Expand Down
161 changes: 161 additions & 0 deletions tests/DateTimeExtensions.Tests/en-AUCalendarTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;
using DateTimeExtensions.WorkingDays;
using DateTimeExtensions.WorkingDays.CultureStrategies;


namespace DateTimeExtensions.Tests
{
[TestFixture]
public class en_AUCalendarTest
{
[Test]
public void NewYearsDay()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-AU");

var dateOnGregorian = new DateTime(2011, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2012, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2013, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2014, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2017, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2018, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2020, 1, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
}

[Test]
public void AustraliaDay()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-AU");

var dateOnGregorian = new DateTime(2013, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2014, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2017, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2018, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2020, 1, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
}

[Test]
public void MonarchsBirthday()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-AU");

var dateOnGregorian = new DateTime(2011, 6, 13);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 6, 8);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 6, 13);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 6, 10);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2022, 6, 13);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2023, 6, 12);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2024, 6, 10);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2025, 6, 9);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2026, 6, 8);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2027, 6, 14);
TestHoliday(workingDayCultureInfo, dateOnGregorian);

var holidays = workingDayCultureInfo.GetHolidaysOfYear(2021);
Assert.IsTrue(holidays.Any(h => h.Name == "Queen's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2022);
Assert.IsTrue(holidays.Any(h => h.Name == "Queen's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2023);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2024);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2025);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2026);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
}


[Test]
public void Christmas()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-AU");

var dateOnGregorian = new DateTime(2013, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2014, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2017, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2018, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2020, 12, 25);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
}

[Test]
public void BoxingDay()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-AU");

var dateOnGregorian = new DateTime(2013, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2014, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 12, 28);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2017, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2018, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 12, 26);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2020, 12, 28);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
}




private void TestHoliday(IWorkingDayCultureInfo workingDayCultureInfo, DateTime dateOnGregorian)
{
var isHoliday = workingDayCultureInfo.IsHoliday(dateOnGregorian);
Assert.IsTrue(isHoliday);
}
}
}
42 changes: 42 additions & 0 deletions tests/DateTimeExtensions.Tests/en-NZCalendarTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,47 @@ public void EasterAnzacClash()
Assert.IsTrue(holidays.Any(h => h.Name == "Easter Monday/Anzac Day"));
}

[Test]
public void MonarchsBirthday()
{
var workingDayCultureInfo = new WorkingDayCultureInfo("en-NZ");

var dateOnGregorian = new DateTime(2011, 6, 6);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2015, 6, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2016, 6, 6);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2019, 6, 3);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2022, 6, 6);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2023, 6, 5);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2024, 6, 3);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2025, 6, 2);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2026, 6, 1);
TestHoliday(workingDayCultureInfo, dateOnGregorian);
dateOnGregorian = new DateTime(2027, 6, 7);
TestHoliday(workingDayCultureInfo, dateOnGregorian);

var holidays = workingDayCultureInfo.GetHolidaysOfYear(2021);
Assert.IsTrue(holidays.Any(h => h.Name == "Queen's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2022);
Assert.IsTrue(holidays.Any(h => h.Name == "Queen's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2023);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2024);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2025);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));
holidays = workingDayCultureInfo.GetHolidaysOfYear(2026);
Assert.IsTrue(holidays.Any(h => h.Name == "King's Birthday"));

}

[Test]
public void Matariki()
{
Expand All @@ -110,6 +151,7 @@ public void Matariki()
Assert.IsTrue(holidays.Any(h => h.Name == "Matariki"));
}


[Test]
public void Christmas()
{
Expand Down

0 comments on commit a186577

Please sign in to comment.