From f4ee3df26c30bfeed6a3a166c332c118f6caf3c6 Mon Sep 17 00:00:00 2001 From: David Berry Date: Thu, 23 Oct 2025 22:15:33 -0500 Subject: [PATCH] Added extension method with start/end time --- .../Util/ITimePeriodExtensionsTests.cs | 128 ++++++++++++++++++ .../DavidBerry.Framework/Util/ITimePeriod.cs | 13 +- 2 files changed, 140 insertions(+), 1 deletion(-) 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;