feat: financial data check for teamers, improved enforced checks logic
addresses #869at5rtp
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace App\Tests\Security\RequiredCheck;
|
||||
|
||||
use App\RequiredTeamerCheck\RecurringDeadlines;
|
||||
use Carbon\CarbonImmutable;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
class RecurringDeadlinesTest extends TestCase
|
||||
{
|
||||
protected function setUp(): void
|
||||
{
|
||||
CarbonImmutable::setTestNow();
|
||||
}
|
||||
|
||||
protected function tearDown(): void
|
||||
{
|
||||
CarbonImmutable::setTestNow();
|
||||
}
|
||||
|
||||
public function testAnEmptyScheduleIsNeverDue(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines([]);
|
||||
|
||||
$this->assertFalse($deadlines->isDue(null, new \DateTimeImmutable('2020-01-01'), CarbonImmutable::parse('2026-08-10')));
|
||||
$this->assertNull($deadlines->getCurrentDeadline(CarbonImmutable::parse('2026-08-10')));
|
||||
}
|
||||
|
||||
public function testIsNotDueBeforeTheFirstDeadlineEvenWhenNeverConfirmed(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertFalse($deadlines->isDue(
|
||||
null,
|
||||
new \DateTimeImmutable('2025-11-05 12:00:00'),
|
||||
CarbonImmutable::parse('2026-01-10 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsDueAfterTheFirstDeadlineWhenNeverConfirmed(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertTrue($deadlines->isDue(
|
||||
null,
|
||||
new \DateTimeImmutable('2025-11-05 12:00:00'),
|
||||
CarbonImmutable::parse('2026-01-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsNotDueWhenConfirmedAfterTheCurrentDeadline(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertFalse($deadlines->isDue(
|
||||
new \DateTimeImmutable('2026-01-16 10:00:00'),
|
||||
new \DateTimeImmutable('2025-11-05 12:00:00'),
|
||||
CarbonImmutable::parse('2026-05-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsDueWhenTheConfirmationPredatesTheCurrentDeadline(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertTrue($deadlines->isDue(
|
||||
new \DateTimeImmutable('2026-02-01 10:00:00'),
|
||||
new \DateTimeImmutable('2025-11-05 12:00:00'),
|
||||
CarbonImmutable::parse('2026-07-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsNotDueWhenRegisteredAfterTheFirstDeadline(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertFalse($deadlines->isDue(
|
||||
null,
|
||||
new \DateTimeImmutable('2026-03-01 10:00:00'),
|
||||
CarbonImmutable::parse('2026-05-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsNotDueWhenRegisteredAfterTheSecondDeadline(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertFalse($deadlines->isDue(
|
||||
null,
|
||||
new \DateTimeImmutable('2026-10-01 10:00:00'),
|
||||
CarbonImmutable::parse('2026-11-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testIsDueWhenRegisteredBeforeAllCurrentYearDeadlines(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertTrue($deadlines->isDue(
|
||||
null,
|
||||
new \DateTimeImmutable('2025-10-01 10:00:00'),
|
||||
CarbonImmutable::parse('2026-11-20 12:00:00'),
|
||||
));
|
||||
}
|
||||
|
||||
public function testAMissingRegistrationDateDoesNotExempt(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertTrue($deadlines->isDue(null, null, CarbonImmutable::parse('2026-01-20 12:00:00')));
|
||||
}
|
||||
|
||||
public function testGetCurrentDeadlineReturnsTheMostRecentlyPassedOne(): void
|
||||
{
|
||||
$deadlines = new RecurringDeadlines(['01-15', '07-15']);
|
||||
|
||||
$this->assertSame(
|
||||
'2026-07-15',
|
||||
$deadlines->getCurrentDeadline(CarbonImmutable::parse('2026-08-10'))?->format('Y-m-d'),
|
||||
);
|
||||
$this->assertNull($deadlines->getCurrentDeadline(CarbonImmutable::parse('2026-01-10')));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user