From 7f6238cb794b8953471ff9dc236e329c09df79e6 Mon Sep 17 00:00:00 2001 From: lgrossi Date: Thu, 4 Jul 2024 11:39:19 +0200 Subject: [PATCH] Add modify and default constructor to FrozenClock --- src/FrozenClock.php | 7 ++++++- test/FrozenClockTest.php | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/FrozenClock.php b/src/FrozenClock.php index 0aad7016..aa04efa7 100644 --- a/src/FrozenClock.php +++ b/src/FrozenClock.php @@ -8,7 +8,7 @@ final class FrozenClock implements Clock { - public function __construct(private DateTimeImmutable $now) + public function __construct(private DateTimeImmutable $now = new DateTimeImmutable()) { } @@ -22,6 +22,11 @@ public function setTo(DateTimeImmutable $now): void $this->now = $now; } + public function modify(string $modify): void + { + $this->now = $this->now->modify($modify); + } + public function now(): DateTimeImmutable { return $this->now; diff --git a/test/FrozenClockTest.php b/test/FrozenClockTest.php index fc4ab7ad..cba0d4fb 100644 --- a/test/FrozenClockTest.php +++ b/test/FrozenClockTest.php @@ -34,6 +34,25 @@ public function nowSetChangesTheObject(): void self::assertSame($newNow, $clock->now()); } + #[Test] + public function modifyChangesTheObject(): void + { + $oldNow = new DateTimeImmutable(); + $newNow = $oldNow->modify('+1 day'); + + $clock = new FrozenClock($oldNow); + + $clock->modify('+1 day'); + + self::assertNotEquals($oldNow, $clock->now()); + self::assertEquals($newNow, $clock->now()); + + $clock->modify('-1 day'); + + self::assertEquals($oldNow, $clock->now()); + self::assertNotEquals($newNow, $clock->now()); + } + #[Test] public function fromUTCCreatesClockFrozenAtCurrentSystemTimeInUTC(): void {