feat : add working day calculator (weekend + holiday aware)

This commit is contained in:
2026-06-24 15:21:13 +02:00
parent 7e943a44e6
commit a479236489
2 changed files with 109 additions and 0 deletions
@@ -0,0 +1,62 @@
<?php
declare(strict_types=1);
namespace App\Tests\Service\Notification;
use App\Service\Notification\WorkingDayCalculator;
use App\Service\PublicHolidayServiceInterface;
use DateTimeImmutable;
use PHPUnit\Framework\TestCase;
/**
* @internal
*/
final class WorkingDayCalculatorTest extends TestCase
{
public function testWeekdayIsWorkingDay(): void
{
// Mardi 08/07/2025
self::assertTrue($this->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);
}
}