36 lines
793 B
PHP
36 lines
793 B
PHP
<?php
|
|
|
|
namespace Tests\Fakes;
|
|
|
|
use App\Auth\Clock;
|
|
use DateTimeImmutable;
|
|
use InvalidArgumentException;
|
|
|
|
class FakeClock implements Clock
|
|
{
|
|
public function __construct(
|
|
private DateTimeImmutable $currentTime,
|
|
) {
|
|
$this->assertUtc($currentTime);
|
|
}
|
|
|
|
public function now(): DateTimeImmutable
|
|
{
|
|
return $this->currentTime;
|
|
}
|
|
|
|
public function setTime(DateTimeImmutable $newTime): void
|
|
{
|
|
$this->assertUtc($newTime);
|
|
$this->currentTime = $newTime;
|
|
}
|
|
|
|
private function assertUtc(DateTimeImmutable $time): void
|
|
{
|
|
if ($time->getTimezone()->getOffset($time) !== 0) {
|
|
throw new InvalidArgumentException(
|
|
'FakeClock requires a DateTimeImmutable in UTC.'
|
|
);
|
|
}
|
|
}
|
|
}
|