return utc from clock
This commit is contained in:
parent
2fe41a5fe7
commit
13da7c311a
5 changed files with 26 additions and 9 deletions
|
|
@ -6,5 +6,8 @@ use DateTimeImmutable;
|
||||||
|
|
||||||
interface Clock
|
interface Clock
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Returns the current time in UTC.
|
||||||
|
*/
|
||||||
public function now(): DateTimeImmutable;
|
public function now(): DateTimeImmutable;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,12 @@
|
||||||
namespace App\Auth;
|
namespace App\Auth;
|
||||||
|
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
|
use DateTimeZone;
|
||||||
|
|
||||||
class SystemClock implements Clock
|
class SystemClock implements Clock
|
||||||
{
|
{
|
||||||
public function now(): DateTimeImmutable
|
public function now(): DateTimeImmutable
|
||||||
{
|
{
|
||||||
return new DateTimeImmutable();
|
return new DateTimeImmutable('now', new DateTimeZone('UTC'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,15 @@ namespace Tests\Fakes;
|
||||||
|
|
||||||
use App\Auth\Clock;
|
use App\Auth\Clock;
|
||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
|
use InvalidArgumentException;
|
||||||
|
|
||||||
class FakeClock implements Clock
|
class FakeClock implements Clock
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private DateTimeImmutable $currentTime,
|
private DateTimeImmutable $currentTime,
|
||||||
) {}
|
) {
|
||||||
|
$this->assertUtc($currentTime);
|
||||||
|
}
|
||||||
|
|
||||||
public function now(): DateTimeImmutable
|
public function now(): DateTimeImmutable
|
||||||
{
|
{
|
||||||
|
|
@ -18,6 +21,16 @@ class FakeClock implements Clock
|
||||||
|
|
||||||
public function setTime(DateTimeImmutable $newTime): void
|
public function setTime(DateTimeImmutable $newTime): void
|
||||||
{
|
{
|
||||||
|
$this->assertUtc($newTime);
|
||||||
$this->currentTime = $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.'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,7 @@ class AuthMiddlewareTest extends TestCase
|
||||||
|
|
||||||
private function makeHandler(): RequestHandlerInterface
|
private function makeHandler(): RequestHandlerInterface
|
||||||
{
|
{
|
||||||
return new class() implements RequestHandlerInterface {
|
return new class implements RequestHandlerInterface {
|
||||||
public ?ServerRequestInterface $capturedRequest = null;
|
public ?ServerRequestInterface $capturedRequest = null;
|
||||||
|
|
||||||
public function handle(
|
public function handle(
|
||||||
|
|
@ -113,8 +113,8 @@ class AuthMiddlewareTest extends TestCase
|
||||||
$this->sessionRepo->create(new CreateSessionDto(
|
$this->sessionRepo->create(new CreateSessionDto(
|
||||||
token: 'expired-token',
|
token: 'expired-token',
|
||||||
userId: $this->user->getId(),
|
userId: $this->user->getId(),
|
||||||
createdAt: new DateTimeImmutable('2024-12-01'),
|
createdAt: new DateTimeImmutable('2024-12-01T00:00:00+00:00'),
|
||||||
expiresAt: new DateTimeImmutable('2024-12-08'),
|
expiresAt: new DateTimeImmutable('2024-12-08T00:00:00+00:00'),
|
||||||
));
|
));
|
||||||
|
|
||||||
$response = $this->middleware->process(
|
$response = $this->middleware->process(
|
||||||
|
|
@ -130,8 +130,8 @@ class AuthMiddlewareTest extends TestCase
|
||||||
$this->sessionRepo->create(new CreateSessionDto(
|
$this->sessionRepo->create(new CreateSessionDto(
|
||||||
token: 'valid-token',
|
token: 'valid-token',
|
||||||
userId: $this->user->getId(),
|
userId: $this->user->getId(),
|
||||||
createdAt: new DateTimeImmutable('2025-01-01'),
|
createdAt: new DateTimeImmutable('2025-01-01T00:00:00+00:00'),
|
||||||
expiresAt: new DateTimeImmutable('2025-01-08'),
|
expiresAt: new DateTimeImmutable('2025-01-08T00:00:00+00:00'),
|
||||||
));
|
));
|
||||||
$handler = $this->makeHandler();
|
$handler = $this->makeHandler();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -244,8 +244,8 @@ class AuthControllerTest extends TestCase
|
||||||
$this->sessionRepo->create(new CreateSessionDto(
|
$this->sessionRepo->create(new CreateSessionDto(
|
||||||
token: 'existing-session',
|
token: 'existing-session',
|
||||||
userId: 0,
|
userId: 0,
|
||||||
createdAt: new DateTimeImmutable('2025-01-01'),
|
createdAt: new DateTimeImmutable('2025-01-01T00:00:00+00:00'),
|
||||||
expiresAt: new DateTimeImmutable('2025-01-08'),
|
expiresAt: new DateTimeImmutable('2025-01-08T00:00:00+00:00'),
|
||||||
));
|
));
|
||||||
|
|
||||||
$request = $this->makeJsonRequest(
|
$request = $this->makeJsonRequest(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue