sessionRepo = new FakeSessionRepository(); } public function test_create_and_find_by_token(): void { $this->sessionRepo->create(new CreateSessionDto( token: 'abc123', userId: 0, createdAt: new DateTimeImmutable('2025-01-01'), expiresAt: new DateTimeImmutable('2025-01-08'), )); $session = $this->sessionRepo->findByToken('abc123'); $this->assertInstanceOf(Session::class, $session); $this->assertEquals('abc123', $session->getToken()); $this->assertEquals(0, $session->getUserId()); } public function test_find_by_token_returns_null_when_missing(): void { $this->assertNull($this->sessionRepo->findByToken('nope')); } public function test_find_by_token_returns_fresh_instance(): void { $created = $this->sessionRepo->create(new CreateSessionDto( token: 'abc123', userId: 0, createdAt: new DateTimeImmutable('2025-01-01'), expiresAt: new DateTimeImmutable('2025-01-08'), )); $fetched = $this->sessionRepo->findByToken('abc123'); $this->assertNotSame($created, $fetched); } public function test_delete_by_token(): void { $this->sessionRepo->create(new CreateSessionDto( token: 'abc123', userId: 0, createdAt: new DateTimeImmutable('2025-01-01'), expiresAt: new DateTimeImmutable('2025-01-08'), )); $this->sessionRepo->deleteByToken('abc123'); $this->assertNull($this->sessionRepo->findByToken('abc123')); } }