createMock(AccessTokenRepository::class); $userProvider->method('findByToken')->willReturn($accessToken); return new AccessTokenHandler($userProvider); } public function testUnknownToken(): void { $this->expectException(BadCredentialsException::class); $this->expectExceptionMessage('Invalid credentials.'); $sut = $this->getSut(); $sut->getUserBadgeFrom('foo'); } public function testInvalidToken(): void { $user = new User(); $user->setUserIdentifier('foo'); $accessToken = new AccessToken($user, 'Test'); $accessToken->setExpiresAt(new \DateTimeImmutable('-1 day')); $this->expectException(BadCredentialsException::class); $this->expectExceptionMessage('Invalid token.'); $sut = $this->getSut($accessToken); $sut->getUserBadgeFrom('foo'); } public function testValidTokenSetsLastUsage(): void { $user = new User(); $user->setUserIdentifier('foo-bar'); $accessToken = new AccessToken($user, 'Test'); $this->assertNull($accessToken->getLastUsage()); $sut = $this->getSut($accessToken); $badge = $sut->getUserBadgeFrom('foo'); $this->assertNotNull($accessToken->getLastUsage()); $this->assertSame('foo-bar', $badge->getUserIdentifier()); } }