Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions Program.cs
Original file line number Diff line number Diff line change
@@ -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
*/
14 changes: 14 additions & 0 deletions interns-challenge.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>interns_challenge</RootNamespace>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="NUnit" Version="3.13.2" />
<PackageReference Include="NUnit3TestAdapter" Version="4.0.0" />
</ItemGroup>

</Project>
63 changes: 49 additions & 14 deletions src/HolidayCalendar/HolidayCalendar.cs
Original file line number Diff line number Diff line change
@@ -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<DateTime> 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<DateTime> GetHolidays(DateTime startDate, DateTime endDate)
{
// TODO: Implement holiday logic
List<DateTime> holidays = new List<DateTime>();

for (DateTime currentDate = startDate; currentDate <= endDate; currentDate = currentDate.AddDays(1))
{
if (IsHoliday(currentDate))
{
holidays.Add(currentDate);
}
}

return holidays;
}
}
}

15 changes: 8 additions & 7 deletions src/HolidayCalendar/IHolidayCalendar.cs
Original file line number Diff line number Diff line change
@@ -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<DateTime> GetHolidays(DateTime startDate, DateTime endDate);
}
public interface IHolidayCalendar
{
bool IsHoliday(DateTime date);
ICollection<DateTime> GetHolidays(DateTime startDate, DateTime endDate);
}
}
97 changes: 49 additions & 48 deletions tests/HolidayCalendar.Tests/HolidayTests.cs
Original file line number Diff line number Diff line change
@@ -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);
}
}
}