From 793b060dd9d384e6e3e51c4bac5b7e328d44e152 Mon Sep 17 00:00:00 2001 From: KyleKatarn Date: Sat, 25 Nov 2023 17:29:17 +0100 Subject: [PATCH] - Allow overflow for structured-data --- src/OpeningHours.php | 8 ++++++-- src/OpeningHoursSpecificationParser.php | 2 +- tests/OpeningHoursSpecificationParserTest.php | 17 +++++++++++++++++ tests/OpeningHoursTest.php | 2 +- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/OpeningHours.php b/src/OpeningHours.php index 3f3f053..6525f5b 100644 --- a/src/OpeningHours.php +++ b/src/OpeningHours.php @@ -128,7 +128,11 @@ public static function createFromStructuredData( string|DateTimeZone|null $outputTimezone = null, ): self { return new static( - OpeningHoursSpecificationParser::create($structuredData)->getOpeningHours(), + array_merge( + // https://schema.org/OpeningHoursSpecification allows overflow by default + ['overflow' => true], + OpeningHoursSpecificationParser::create($structuredData)->getOpeningHours(), + ), $timezone, $outputTimezone, ); @@ -936,7 +940,7 @@ public function flatMapExceptions(callable $callback): array public function every(callable $callback): bool { return $this->filter( - static fn (OpeningHoursForDay $day) => !$callback($day), + static fn (OpeningHoursForDay $day) => ! $callback($day), ) === []; } diff --git a/src/OpeningHoursSpecificationParser.php b/src/OpeningHoursSpecificationParser.php index 290e746..fabd81c 100644 --- a/src/OpeningHoursSpecificationParser.php +++ b/src/OpeningHoursSpecificationParser.php @@ -61,7 +61,7 @@ public function getOpeningHours(): array } /** - * Regular opening hours + * Regular opening hours. */ private function addDaysOfWeek( array $dayOfWeek, diff --git a/tests/OpeningHoursSpecificationParserTest.php b/tests/OpeningHoursSpecificationParserTest.php index b10a7cc..703a806 100644 --- a/tests/OpeningHoursSpecificationParserTest.php +++ b/tests/OpeningHoursSpecificationParserTest.php @@ -111,6 +111,23 @@ public function testEmptySpecs(): void $this->assertTrue($openingHours->isAlwaysClosed()); } + public function testRangeOverNight(): void + { + $openingHours = OpeningHours::createFromStructuredData([ + [ + 'dayOfWeek' => 'Monday', + 'opens' => '18:00', + 'closes' => '02:00', + ], + ]); + + $this->assertTrue($openingHours->isClosedAt(new DateTimeImmutable('2023-11-27 17:50'))); + $this->assertTrue($openingHours->isOpenAt(new DateTimeImmutable('2023-11-27 23:55'))); + $this->assertTrue($openingHours->isOpenAt(new DateTimeImmutable('2023-11-27 23:59:59.99'))); + $this->assertTrue($openingHours->isOpenAt(new DateTimeImmutable('2023-11-28 01:50'))); + $this->assertTrue($openingHours->isClosedAt(new DateTimeImmutable('2023-11-28 19:00'))); + } + public function testH24Specs(): void { $openingHours = OpeningHours::createFromStructuredData([ diff --git a/tests/OpeningHoursTest.php b/tests/OpeningHoursTest.php index a9ce3b1..71a9588 100644 --- a/tests/OpeningHoursTest.php +++ b/tests/OpeningHoursTest.php @@ -957,7 +957,7 @@ public function it_can_determine_that_its_open_now() /** @test */ public function it_can_use_day_enum() { - $openingHours = new class () extends OpeningHours + $openingHours = new class extends OpeningHours { public readonly array $days;