diff --git a/DavidBerry.Framework/DavidBerry.Framework.Tests/Util/ITimePeriodExtensionsTests.cs b/DavidBerry.Framework/DavidBerry.Framework.Tests/Util/ITimePeriodExtensionsTests.cs
index cdba95d..303d9a6 100644
--- a/DavidBerry.Framework/DavidBerry.Framework.Tests/Util/ITimePeriodExtensionsTests.cs
+++ b/DavidBerry.Framework/DavidBerry.Framework.Tests/Util/ITimePeriodExtensionsTests.cs
@@ -134,6 +134,134 @@ public void TestOverlapsReturnFalseWhenPeriodOneStartsWhenPeriodTwoEndse()
}
+ [Fact]
+ public void TestOverlapsReturnsTrueWhenDateTimeValuesAreSamePeriod()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T13:00:00"));
+ var startdate = DateTime.Parse("2024-10-18T11:00:00");
+ var endDate = DateTime.Parse("2024-10-18T13:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startdate, endDate); // Should be true
+
+ // Assert
+ overlaps.ShouldBeTrue();
+ }
+
+
+ [Fact]
+ public void TestOverlapsReturnsTrueWhenStartDateStartsInPeriod()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T14:00:00"));
+ var startDate = DateTime.Parse("2024-10-18T12:00:00");
+ var endDate = DateTime.Parse("2024-10-18T16:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startDate, endDate); // Should be true
+
+ // Assert
+ overlaps.ShouldBeTrue();
+ }
+
+
+
+ [Fact]
+ public void TestOverlapsReturnsTrueWhenEndDateStartsInPeriod()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T14:00:00"));
+ var startDate = DateTime.Parse("2024-10-18T09:00:00");
+ var endDate = DateTime.Parse("2024-10-18T12:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startDate, endDate); // Should be true
+
+ // Assert
+ overlaps.ShouldBeTrue();
+ }
+
+
+ [Fact]
+ public void TestOverlapsReturnFalseWhenStartAndEndTimeAfterTimePeriod()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T13:00:00"));
+ var startTime = DateTime.Parse("2024-10-18T14:00:00");
+ var endTime = DateTime.Parse("2024-10-18T17:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startTime, endTime); // Should be true
+
+ // Assert
+ overlaps.ShouldBeFalse();
+ }
+
+
+
+ [Fact]
+ public void TestOverlapsReturnFalseWhenStartAndEndTimeBeforeTimePeriod()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T13:00:00"));
+ var startTime = DateTime.Parse("2024-10-18T09:00:00");
+ var endTime = DateTime.Parse("2024-10-18T10:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startTime, endTime); // Should be true
+
+ // Assert
+ overlaps.ShouldBeFalse();
+ }
+
+
+
+ [Fact]
+ public void TestOverlapsReturnFalseWhenStartTimeAtTimePeriodEndTime()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T13:00:00"));
+ var startTime = DateTime.Parse("2024-10-18T13:00:00");
+ var endTime = DateTime.Parse("2024-10-18T15:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startTime, endTime); // Should be true
+
+ // Assert
+ overlaps.ShouldBeFalse();
+ }
+
+
+ [Fact]
+ public void TestOverlapsReturnFalseWhenEndDateAtTimePeriodStartTime()
+ {
+ // Arrange
+ var period1 = new TimePeriod(DateTime.Parse("2024-10-18T11:00:00"), DateTime.Parse("2024-10-18T13:00:00"));
+ var startTime = DateTime.Parse("2024-10-18T09:00:00");
+ var endTime = DateTime.Parse("2024-10-18T11:00:00");
+
+ // Act
+ bool overlaps = period1.Overlaps(startTime, endTime); // Should be true
+
+ // Assert
+ overlaps.ShouldBeFalse();
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
[Fact]
public void TestContainsResturnsTrueWhenDateTimeIsWithinPeriod()
{
diff --git a/DavidBerry.Framework/DavidBerry.Framework/Util/ITimePeriod.cs b/DavidBerry.Framework/DavidBerry.Framework/Util/ITimePeriod.cs
index b9c8a90..640f1d4 100644
--- a/DavidBerry.Framework/DavidBerry.Framework/Util/ITimePeriod.cs
+++ b/DavidBerry.Framework/DavidBerry.Framework/Util/ITimePeriod.cs
@@ -20,12 +20,23 @@ public interface ITimePeriod
public static class ITimePeriodExtensions
{
-
+ ///
+ /// Checks if this time period overlaps with another time period
+ ///
+ /// The first time period
+ /// A TimePeriod to see if check for overlap with
+ ///
public static bool Overlaps(this ITimePeriod period1, ITimePeriod period2)
{
return period1.StartTime < period2.EndTime && period2.StartTime < period1.EndTime;
}
+
+ public static bool Overlaps(this ITimePeriod period1, DateTime startTime, DateTime endTime)
+ {
+ return period1.StartTime < endTime && startTime < period1.EndTime;
+ }
+
public static bool Contains(this ITimePeriod period, DateTime dateTime)
{
return period.StartTime <= dateTime && dateTime <= period.EndTime;