From fc50d402c2c8a8181f6ffd4cb159f588faf9b68f Mon Sep 17 00:00:00 2001 From: kylekatarnls Date: Tue, 11 Feb 2025 19:02:39 +0100 Subject: [PATCH] Allow 'dateTimeClass' in mergeOverlappingRanges and createAndMergeOverlappingRanges Fix #266 --- src/OpeningHours.php | 2 +- tests/OpeningHoursFillTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/OpeningHours.php b/src/OpeningHours.php index bbedb18..7078dd1 100644 --- a/src/OpeningHours.php +++ b/src/OpeningHours.php @@ -147,7 +147,7 @@ public static function createFromStructuredData( * @param array $excludedKeys keys to ignore from parsing * @return array */ - public static function mergeOverlappingRanges(array $data, array $excludedKeys = ['data', 'filters', 'overflow']): array + public static function mergeOverlappingRanges(array $data, array $excludedKeys = ['data', 'dateTimeClass', 'filters', 'overflow']): array { $result = []; $ranges = []; diff --git a/tests/OpeningHoursFillTest.php b/tests/OpeningHoursFillTest.php index b7f062c..739426b 100644 --- a/tests/OpeningHoursFillTest.php +++ b/tests/OpeningHoursFillTest.php @@ -281,6 +281,7 @@ function (DateTimeImmutable $date) use ($typicalDay) { public function it_should_merge_ranges_on_explicitly_create_from_overlapping_ranges() { $hours = OpeningHours::createAndMergeOverlappingRanges([ + 'dateTimeClass' => DateTimeImmutable::class, 'monday' => [ '08:00-12:00', '08:00-12:00', @@ -314,6 +315,32 @@ public function it_should_merge_ranges_on_explicitly_create_from_overlapping_ran ], $dump['tuesday']); } + #[Test] + public function it_should_merge_ranges_and_keep_date_time_class() + { + $hours = OpeningHours::createAndMergeOverlappingRanges([ + 'dateTimeClass' => DateTimeImmutable::class, + 'monday' => [ + '08:00-12:00', + '08:00-12:00', + '11:30-13:30', + '13:00-18:00', + ], + 'tuesday' => [ + '08:00-12:00', + '11:30-13:30', + '15:00-18:00', + '16:00-17:00', + '19:00-20:00', + '20:00-21:00', + ], + ]); + $date = $hours->nextOpen(new DateTimeImmutable('2018-12-03')); + $this->assertInstanceOf(DateTimeImmutable::class, $date); + + $this->assertSame('2018-12-03 08:00', $date->format('Y-m-d H:i')); + } + #[Test] public function it_should_merge_ranges_including_explicit_24_00() {