49 lines
1.3 KiB
PHP
49 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Schedule;
|
|
|
|
use App\Schedule\ScheduleAssignment;
|
|
use DateTimeImmutable;
|
|
use DateTimeZone;
|
|
use PHPUnit\Framework\TestCase;
|
|
|
|
class ScheduleAssignmentTest extends TestCase
|
|
{
|
|
public function test_it_completes_only_once_until_reopened(): void
|
|
{
|
|
$assignment = $this->assignment();
|
|
$firstCompletion = $this->utc('2026-08-15T12:00:00');
|
|
$laterCompletion = $this->utc('2026-08-15T13:00:00');
|
|
|
|
$assignment->complete($firstCompletion);
|
|
$assignment->complete($laterCompletion);
|
|
|
|
$this->assertSame($firstCompletion, $assignment->getCompletedAt());
|
|
|
|
$assignment->reopen();
|
|
|
|
$this->assertNull($assignment->getCompletedAt());
|
|
|
|
$assignment->complete($laterCompletion);
|
|
|
|
$this->assertSame($laterCompletion, $assignment->getCompletedAt());
|
|
}
|
|
|
|
private function assignment(): ScheduleAssignment
|
|
{
|
|
return new ScheduleAssignment(
|
|
id: 1,
|
|
name: 'Lesson',
|
|
kind: 'lesson',
|
|
path: ['Course', 'Lesson'],
|
|
scheduledDate: $this->utc('2026-08-15'),
|
|
position: 1,
|
|
completedAt: null,
|
|
);
|
|
}
|
|
|
|
private function utc(string $value): DateTimeImmutable
|
|
{
|
|
return new DateTimeImmutable($value, new DateTimeZone('UTC'));
|
|
}
|
|
}
|