diff --git a/src/Service/WorkHours/NightHoursCalculator.php b/src/Service/WorkHours/NightHoursCalculator.php index a32104c..fe53ef6 100644 --- a/src/Service/WorkHours/NightHoursCalculator.php +++ b/src/Service/WorkHours/NightHoursCalculator.php @@ -13,7 +13,7 @@ use App\Entity\WorkHour; * (21:00-24:00). On projette sur J+1 pour les shifts qui traversent minuit. * Source de verite unique partagee par les ecrans Heures et les exports. */ -final class NightHoursCalculator +final readonly class NightHoursCalculator { /** * Minutes de nuit d'un WorkHour. Conducteurs : champ manuel nightHoursMinutes. diff --git a/tests/Service/WorkHours/NightHoursCalculatorTest.php b/tests/Service/WorkHours/NightHoursCalculatorTest.php index ea0e554..08d6191 100644 --- a/tests/Service/WorkHours/NightHoursCalculatorTest.php +++ b/tests/Service/WorkHours/NightHoursCalculatorTest.php @@ -19,6 +19,7 @@ final class NightHoursCalculatorTest extends TestCase $calc = new NightHoursCalculator(); self::assertSame(0, $calc->nightIntervalMinutes(null, null)); self::assertSame(0, $calc->nightIntervalMinutes('08:00', null)); + self::assertSame(0, $calc->nightIntervalMinutes(null, '17:00')); } public function testPureDayRangeHasNoNight(): void @@ -28,6 +29,15 @@ final class NightHoursCalculatorTest extends TestCase self::assertSame(0, $calc->nightIntervalMinutes('08:00', '17:00')); } + public function testWindowBoundariesAreRightExclusive(): void + { + $calc = new NightHoursCalculator(); + // 06:00 -> 21:00 : pile entre les deux fenetres de nuit, 0 min. + self::assertSame(0, $calc->nightIntervalMinutes('06:00', '21:00')); + // 22:00 -> 06:00 : 22-24 (120) + 00-06 (360) = 480, borne 06:00 exclue. + self::assertSame(480, $calc->nightIntervalMinutes('22:00', '06:00')); + } + public function testEveningWindowCounts(): void { $calc = new NightHoursCalculator();