From adc60a805955127a147582360f493d46378db990 Mon Sep 17 00:00:00 2001 From: yisroel Date: Wed, 6 May 2026 15:15:04 +0300 Subject: [PATCH] test CreateSession use case 4 cases: returns Session with the generated token + supplied user; createdAt matches injected Clock now; expiresAt is now+7d; session is findable via SessionRepository->findByToken. fails red - CreateSession class missing. --- .../Unit/Auth/UseCases/CreateSessionTest.php | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 backend/tests/Unit/Auth/UseCases/CreateSessionTest.php diff --git a/backend/tests/Unit/Auth/UseCases/CreateSessionTest.php b/backend/tests/Unit/Auth/UseCases/CreateSessionTest.php new file mode 100644 index 0000000..d5460b5 --- /dev/null +++ b/backend/tests/Unit/Auth/UseCases/CreateSessionTest.php @@ -0,0 +1,86 @@ +now = new DateTimeImmutable( + '2026-05-06T12:00:00', + new DateTimeZone('UTC') + ); + $this->sessionRepo = new FakeSessionRepository; + $this->tokenGenerator = new FakeTokenGenerator(['token-abc']); + $this->clock = new FakeClock($this->now); + $this->useCase = new CreateSession( + $this->sessionRepo, + $this->tokenGenerator, + $this->clock, + ); + } + + private function makeUser(): User + { + return new User( + id: 7, + email: new EmailAddress('user@example.com'), + passwordHash: 'hashed:irrelevant', + isAdmin: false, + ); + } + + public function test_creates_session_with_generated_token(): void + { + $session = $this->useCase->execute($this->makeUser()); + + $this->assertInstanceOf(Session::class, $session); + $this->assertSame('token-abc', $session->getToken()); + $this->assertSame(7, $session->getUser()->getId()); + } + + public function test_session_created_at_is_clock_now(): void + { + $session = $this->useCase->execute($this->makeUser()); + + $this->assertEquals($this->now, $session->getCreatedAt()); + } + + public function test_session_expires_seven_days_from_now(): void + { + $session = $this->useCase->execute($this->makeUser()); + + $expected = $this->now->modify('+7 days'); + $this->assertEquals($expected, $session->getExpiresAt()); + } + + public function test_session_is_findable_by_token(): void + { + $this->useCase->execute($this->makeUser()); + + $found = $this->sessionRepo->findByToken('token-abc'); + $this->assertNotNull($found); + $this->assertSame(7, $found->getUser()->getId()); + } +}