diff --git a/tests/Unit/Auth/UseCases/CreateSessionTest.php b/tests/Unit/Auth/UseCases/CreateSessionTest.php new file mode 100644 index 0000000..f58f66f --- /dev/null +++ b/tests/Unit/Auth/UseCases/CreateSessionTest.php @@ -0,0 +1,83 @@ +sessionRepo = new FakeSessionRepository(); + $this->tokenGenerator = new FakeTokenGenerator( + ['generated-token-abc'] + ); + $this->clock = new FakeClock( + new DateTimeImmutable('2025-01-01T12:00:00+00:00') + ); + $this->useCase = new CreateSession( + $this->sessionRepo, + $this->tokenGenerator, + $this->clock, + ); + $this->user = new User( + id: 7, + email: new EmailAddress('test@test.com'), + ); + } + + public function test_creates_session_for_user(): void + { + $session = $this->useCase->execute($this->user); + + $this->assertEquals(7, $session->getUserId()); + } + + public function test_session_token_comes_from_generator(): void + { + $session = $this->useCase->execute($this->user); + + $this->assertEquals('generated-token-abc', $session->getToken()); + } + + public function test_session_created_at_is_now(): void + { + $session = $this->useCase->execute($this->user); + + $this->assertEquals( + new DateTimeImmutable('2025-01-01T12:00:00+00:00'), + $session->getCreatedAt() + ); + } + + public function test_session_expires_in_seven_days(): void + { + $session = $this->useCase->execute($this->user); + + $this->assertEquals( + new DateTimeImmutable('2025-01-08T12:00:00+00:00'), + $session->getExpiresAt() + ); + } + + public function test_session_is_persisted(): void + { + $this->useCase->execute($this->user); + + $found = $this->sessionRepo->findByToken('generated-token-abc'); + $this->assertNotNull($found); + } +}