diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..7256f18 --- /dev/null +++ b/Program.cs @@ -0,0 +1,41 @@ +using System; + +namespace interns_challenge +{ + class Program + { + static void Main(string[] args) + { + // implement + HolidayCalendar.HolidayCalendar calendar = new HolidayCalendar.HolidayCalendar(); + + DateTime testDate = new DateTime(2024, 12, 25); + bool isHoliday = calendar.IsHoliday(testDate); + + Console.WriteLine($"Is {testDate.Date} a holiday? {isHoliday}"); + + DateTime startDate = new DateTime(2024, 1, 1); + DateTime endDate = new DateTime(2024, 12, 31); + var holidays = calendar.GetHolidays(startDate, endDate); + + Console.WriteLine($"Holidays in 2024: "); + foreach (var holiday in holidays) + { + Console.WriteLine(holiday); + } + } + } +} +/* +here is what i got after run code +Is 12/25/2024 12:00:00 AM a holiday? False +Holidays in 2024: +1/1/2024 12:00:00 AM +3/28/2024 12:00:00 AM +3/29/2024 12:00:00 AM +3/31/2024 12:00:00 AM +5/9/2024 12:00:00 AM +5/19/2024 12:00:00 AM +5/20/2024 12:00:00 AM +6/5/2024 12:00:00 AM +*/ \ No newline at end of file diff --git a/interns-challenge.csproj b/interns-challenge.csproj new file mode 100644 index 0000000..ec4e3f4 --- /dev/null +++ b/interns-challenge.csproj @@ -0,0 +1,14 @@ + + + + Exe + netcoreapp3.1 + interns_challenge + + + + + + + + diff --git a/src/HolidayCalendar/HolidayCalendar.cs b/src/HolidayCalendar/HolidayCalendar.cs index 1830192..4cffebc 100644 --- a/src/HolidayCalendar/HolidayCalendar.cs +++ b/src/HolidayCalendar/HolidayCalendar.cs @@ -1,18 +1,53 @@ using System; -using System.Collections; +using System.Collections.Generic; -namespace HolidayCalendar; -public class HolidayCalendar : IHolidayCalendar +namespace HolidayCalendar { - public bool IsHoliday(DateTime date) - { - // TODO - replace the below exception with your own implementation - throw new NotImplementedException(); - } - - public ICollection GetHolidays(DateTime startDate, DateTime endDate) - { - // TODO - replace the below exception with your own implementation - throw new NotImplementedException(); - } + public class HolidayCalendar : IHolidayCalendar + { + public bool IsHoliday(DateTime date) + { + + if (date.Year == 2024 && date.Month == 1 && date.Day == 1) + return true; + + if (date.Year == 2024 && date.Month == 3 && date.Day == 28) + return true; + + if (date.Year == 2024 && date.Month == 3 && date.Day == 29) + return true; + + if (date.Year == 2024 && date.Month == 3 && (date.Day == 31 || date.Day == 1)) + return true; + + if (date.Year == 2024 && date.Month == 5 && date.Day == 9) + return true; + + if (date.Year == 2024 && date.Month == 5 && (date.Day == 19 || date.Day == 20)) + return true; + + if (date.Year == 2024 && date.Month == 6 && date.Day == 5) + return true; + + return false; + } + + + public ICollection GetHolidays(DateTime startDate, DateTime endDate) + { + // TODO: Implement holiday logic + List holidays = new List(); + + for (DateTime currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1)) + { + if (IsHoliday(currentDate)) + { + holidays.Add(currentDate); + } + } + + return holidays; + } + } } + \ No newline at end of file diff --git a/src/HolidayCalendar/IHolidayCalendar.cs b/src/HolidayCalendar/IHolidayCalendar.cs index b8c9237..9f4966a 100644 --- a/src/HolidayCalendar/IHolidayCalendar.cs +++ b/src/HolidayCalendar/IHolidayCalendar.cs @@ -1,10 +1,11 @@ using System; -using System.Collections; +using System.Collections.Generic; -namespace HolidayCalendar; -public interface IHolidayCalendar +namespace HolidayCalendar { - bool IsHoliday(DateTime date); - - ICollection GetHolidays(DateTime startDate, DateTime endDate); -} + public interface IHolidayCalendar + { + bool IsHoliday(DateTime date); + ICollection GetHolidays(DateTime startDate, DateTime endDate); + } +} \ No newline at end of file diff --git a/tests/HolidayCalendar.Tests/HolidayTests.cs b/tests/HolidayCalendar.Tests/HolidayTests.cs index 7441621..fa59791 100644 --- a/tests/HolidayCalendar.Tests/HolidayTests.cs +++ b/tests/HolidayCalendar.Tests/HolidayTests.cs @@ -1,53 +1,54 @@ using NUnit.Framework; using System; -namespace HolidayCalendar.Tests; - -public class HolidayTests +namespace HolidayCalendar.Tests { - private readonly IHolidayCalendar fixture = new HolidayCalendar(); - - [Test] - public void GIVEN_XmasDay_WHEN_IsHoliday_THEN_return_true() - { - // Arrange - var date = new DateTime(2023, 12, 25); - - // Act - var result = fixture.IsHoliday(date); - - // Assert - Assert.IsTrue(result); - } - - [Test] - public void GIVEN_regular_weekday_WHEN_IsHoliday_THEN_return_false() - { - // Arrange - var date = new DateTime(2023, 4, 21); - - // Act - var result = fixture.IsHoliday(date); - - // Assert - Assert.IsFalse(result); - } - - [Test] - public void GIVEN_April2023_WHEN_GetHolidays_THEN_return_EasterDays() - { - // Arrange - var startDate = new DateTime(2023, 4, 1); - var endDate = new DateTime(2023, 4, 30); - - // Act - var result = fixture.GetHolidays(startDate, endDate); - - // Assert - Assert.IsTrue(result.Contains(new DateTime(2023, 4, 6))); // Maundy Thursday - Assert.IsTrue(result.Contains(new DateTime(2023, 4, 7))); // Good Friday - Assert.IsTrue(result.Contains(new DateTime(2023, 4, 9))); // Easter Sunday - Assert.IsTrue(result.Contains(new DateTime(2023, 4, 10))); // Easter Monday - Assert.AreEqual(4, result.Count); - } + public class HolidayTests + { + private readonly IHolidayCalendar fixture = new HolidayCalendar(); + + [Test] + public void GIVEN_XmasDay_WHEN_IsHoliday_THEN_return_true() + { + // Arrange + var date = new DateTime(2023, 12, 25); + + // Act + var result = fixture.IsHoliday(date); + + // Assert + Assert.IsTrue(result); + } + + [Test] + public void GIVEN_regular_weekday_WHEN_IsHoliday_THEN_return_false() + { + // Arrange + var date = new DateTime(2023, 4, 21); + + // Act + var result = fixture.IsHoliday(date); + + // Assert + Assert.IsFalse(result); + } + + [Test] + public void GIVEN_April2023_WHEN_GetHolidays_THEN_return_EasterDays() + { + // Arrange + var startDate = new DateTime(2023, 4, 1); + var endDate = new DateTime(2023, 4, 30); + + // Act + var result = fixture.GetHolidays(startDate, endDate); + + // Assert + Assert.IsTrue(result.Contains(new DateTime(2023, 4, 6))); // Maundy Thursday + Assert.IsTrue(result.Contains(new DateTime(2023, 4, 7))); // Good Friday + Assert.IsTrue(result.Contains(new DateTime(2023, 4, 9))); // Easter Sunday + Assert.IsTrue(result.Contains(new DateTime(2023, 4, 10))); // Easter Monday + Assert.AreEqual(4, result.Count); + } + } }