private function authenticatedToken(TokenInterface $token, UserInterface $user = null)
 {
     if (!$token instanceof OAuth2Token) {
         throw new Exception("token should be instance of OAuth2Token");
     }
     $authenticatedToken = new OAuth2Token($token->getClient(), $user, $token->getCredentials(), $this->providerKey, $this->getRoles($token, $user));
     $authenticatedToken->setAttributes($token->getAttributes());
     return $authenticatedToken;
 }
 public function let(UserProviderInterface $userProvider, UserCheckerInterface $userChecker, OAuth2Token $token, UserInterface $user)
 {
     $userProvider->loadUserByUsername("user_name")->willReturn($user);
     $token->getProviderKey()->willReturn('provider_key');
     $token->getUsername()->willReturn('user_name');
     $token->getUser()->willReturn(null);
     $token->hasAttribute('scopes')->willReturn(true);
     $token->getAttribute('scopes')->willReturn([]);
     $token->getCredentials()->willReturn("access_token");
     $token->getRoles()->willReturn([]);
     $token->getClient()->willReturn('client_id');
     $user->getRoles()->willReturn(["IF_FULLY_AUTHENTIFICATED"]);
     $token->getAttributes()->willReturn([]);
     $this->beConstructedWith($userProvider, $userChecker, 'provider_key');
 }