calculator()->isWorkingDay(new DateTimeImmutable('2025-07-08'))); } public function testSaturdayAndSundayAreNotWorkingDays(): void { self::assertFalse($this->calculator()->isWorkingDay(new DateTimeImmutable('2025-07-12'))); // samedi self::assertFalse($this->calculator()->isWorkingDay(new DateTimeImmutable('2025-07-13'))); // dimanche } public function testPublicHolidayIsNotWorkingDay(): void { self::assertFalse($this->calculator()->isWorkingDay(new DateTimeImmutable('2025-07-14'))); // lundi férié } public function testNextWorkingDayFromWeekdayIsTomorrow(): void { // Mardi 08/07 -> Mercredi 09/07 self::assertSame( '2025-07-09', $this->calculator()->nextWorkingDay(new DateTimeImmutable('2025-07-08'))->format('Y-m-d') ); } public function testNextWorkingDayFromFridaySkipsWeekend(): void { // Vendredi 11/07 -> lundi 14/07 est férié -> mardi 15/07 self::assertSame( '2025-07-15', $this->calculator()->nextWorkingDay(new DateTimeImmutable('2025-07-11'))->format('Y-m-d') ); } private function calculator(): WorkingDayCalculator { $holidays = $this->createStub(PublicHolidayServiceInterface::class); $holidays->method('getHolidaysDayByYears')->willReturn([ // Lundi 14/07/2025 férié '2025-07-14' => 'Fête nationale', ]); return new WorkingDayCalculator($holidays); } }