/**
  * Test consume Token by criteria
  *
  * @depends testValidTokenGenerationWithBasicFields
  *
  * @param Token $generatedToken Previously generated Token
  */
 public function testConsumePass(Token $generatedToken)
 {
     $beforeUses = $generatedToken->getUsesCount();
     $this->tokenService->consume($generatedToken->getHash(), $generatedToken->getScope(), $generatedToken->getOwnerType(), $generatedToken->getOwnerId());
     $retrievedToken = $this->tokenService->get($generatedToken->getHash(), $generatedToken->getScope(), $generatedToken->getOwnerType(), $generatedToken->getOwnerId());
     $this->assertEquals($beforeUses + 1, $retrievedToken->getUsesCount(), 'Token was not consumed');
 }
 /**
  * Check if the token can be used
  *
  * @param Token|null $token
  *
  * @return boolean
  */
 public function isValid(Token $token = null)
 {
     if (!$token instanceof Token) {
         return false;
     }
     $currentTime = new \DateTime();
     $expiryTime = $token->getExpiresAt();
     return $token->isActive() && $token->getUsesCount() < $token->getUsesMax() && (!$expiryTime instanceof \DateTime || $expiryTime->getTimestamp() >= $currentTime->getTimestamp());
 }