feat : ajout des TU
This commit is contained in:
84
tests/Service/WorkHours/WorkedHoursCreditPolicyTest.php
Normal file
84
tests/Service/WorkHours/WorkedHoursCreditPolicyTest.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Service\WorkHours;
|
||||
|
||||
use App\Entity\Absence;
|
||||
use App\Entity\AbsenceType;
|
||||
use App\Entity\Contract;
|
||||
use App\Entity\Employee;
|
||||
use App\Service\WorkHours\WorkedHoursCreditPolicy;
|
||||
use DateTime;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class WorkedHoursCreditPolicyTest extends TestCase
|
||||
{
|
||||
public function testComputeCreditedMinutesFor35hHalfDay(): void
|
||||
{
|
||||
$policy = new WorkedHoursCreditPolicy();
|
||||
$absence = $this->buildAbsence(trackMode: Contract::TRACKING_TIME, weeklyHours: 35, countAsWorked: true);
|
||||
|
||||
$minutes = $policy->computeCreditedMinutes($absence, '2026-02-16', true, false);
|
||||
|
||||
self::assertSame(210, $minutes);
|
||||
}
|
||||
|
||||
public function testComputeCreditedMinutesFor4hContractFullDay(): void
|
||||
{
|
||||
$policy = new WorkedHoursCreditPolicy();
|
||||
$absence = $this->buildAbsence(trackMode: Contract::TRACKING_TIME, weeklyHours: 4, countAsWorked: true);
|
||||
|
||||
$minutes = $policy->computeCreditedMinutes($absence, '2026-02-16', true, true);
|
||||
|
||||
self::assertSame(120, $minutes);
|
||||
}
|
||||
|
||||
public function testComputeCreditedPresenceUnitsForPresenceContract(): void
|
||||
{
|
||||
$policy = new WorkedHoursCreditPolicy();
|
||||
$absence = $this->buildAbsence(trackMode: Contract::TRACKING_PRESENCE, weeklyHours: null, countAsWorked: true);
|
||||
|
||||
$units = $policy->computeCreditedPresenceUnits($absence, true, false);
|
||||
|
||||
self::assertSame(0.5, $units);
|
||||
}
|
||||
|
||||
public function testNoCreditWhenAbsenceTypeDoesNotCount(): void
|
||||
{
|
||||
$policy = new WorkedHoursCreditPolicy();
|
||||
$absence = $this->buildAbsence(trackMode: Contract::TRACKING_TIME, weeklyHours: 35, countAsWorked: false);
|
||||
|
||||
self::assertSame(0, $policy->computeCreditedMinutes($absence, '2026-02-16', true, true));
|
||||
self::assertSame(0.0, $policy->computeCreditedPresenceUnits($absence, true, true));
|
||||
}
|
||||
|
||||
private function buildAbsence(string $trackMode, ?int $weeklyHours, bool $countAsWorked): Absence
|
||||
{
|
||||
$contract = new Contract()
|
||||
->setName('Contrat test')
|
||||
->setTrackingMode($trackMode)
|
||||
->setWeeklyHours($weeklyHours)
|
||||
;
|
||||
$employee = new Employee()
|
||||
->setFirstName('Alice')
|
||||
->setLastName('Durand')
|
||||
->setContract($contract)
|
||||
;
|
||||
$type = new AbsenceType()
|
||||
->setCode('CP')
|
||||
->setLabel('Congés')
|
||||
->setColor('#000')
|
||||
->setCountAsWorkedHours($countAsWorked)
|
||||
;
|
||||
|
||||
return new Absence()
|
||||
->setEmployee($employee)
|
||||
->setType($type)
|
||||
->setStartDate(new DateTime('2026-02-16'))
|
||||
->setEndDate(new DateTime('2026-02-16'));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user