refactor(exercise) : extract ExerciseYearResolver to dedup year formula
Pull the "date -> leave/RTT exercise year" formula out of EmployeeRttPaymentProcessor, EmployeeRttSummaryProvider and EmployeeLeaveSummaryProvider into a single App\Service\Exercise\ExerciseYearResolver. Forfait flag is parameterised so the leave (calendar year) and RTT (Juin N-1 -> Mai N) variants share the same implementation. Pure refactor, no behavioural change.
This commit is contained in:
62
tests/Service/Exercise/ExerciseYearResolverTest.php
Normal file
62
tests/Service/Exercise/ExerciseYearResolverTest.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Service\Exercise;
|
||||
|
||||
use App\Service\Exercise\ExerciseYearResolver;
|
||||
use DateTimeImmutable;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class ExerciseYearResolverTest extends TestCase
|
||||
{
|
||||
public function testNonForfaitJuneMapsToNextYear(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
self::assertSame(2026, $resolver->forDate(new DateTimeImmutable('2025-06-01')));
|
||||
self::assertSame(2026, $resolver->forDate(new DateTimeImmutable('2025-06-30')));
|
||||
}
|
||||
|
||||
public function testNonForfaitMayMapsToSameYear(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-05-01')));
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-05-31')));
|
||||
}
|
||||
|
||||
public function testNonForfaitDecemberMapsToNextYear(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
self::assertSame(2026, $resolver->forDate(new DateTimeImmutable('2025-12-31')));
|
||||
}
|
||||
|
||||
public function testNonForfaitJanuaryMapsToSameYear(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-01-15')));
|
||||
}
|
||||
|
||||
public function testForfaitReturnsCalendarYearRegardlessOfMonth(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-01-15'), true));
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-06-01'), true));
|
||||
self::assertSame(2025, $resolver->forDate(new DateTimeImmutable('2025-12-31'), true));
|
||||
}
|
||||
|
||||
public function testForfaitFlagDefaultsToFalse(): void
|
||||
{
|
||||
$resolver = new ExerciseYearResolver();
|
||||
|
||||
// June without explicit flag must follow non-forfait rule (year + 1).
|
||||
self::assertSame(2026, $resolver->forDate(new DateTimeImmutable('2025-06-01')));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user