public function testPutAndGetSessionByAccessToken()
 {
     $server = m::mock(AbstractServer::class);
     $server->shouldReceive('getEventEmitter->emit')->once();
     $session = new SessionEntity($server);
     $session->setOwner('owner', 1);
     $session->setId('id');
     $accessToken = new AccessTokenEntity($server);
     $accessToken->setId('my_token');
     $accessToken->setExpireTime(1);
     $this->cache->putSessionByAccessToken($accessToken, $session);
     $session = $this->cache->getSessionByAccessToken('my_token');
     $this->assertSame(['id' => 'id', 'owner_type' => 'owner', 'owner_id' => 1], $session);
 }
 /**
  * Get a session from an access token
  *
  * @param \League\OAuth2\Server\Entity\AccessTokenEntity $accessToken The access token
  *
  * @return \League\OAuth2\Server\Entity\SessionEntity | null
  */
 public function getByAccessToken(AccessTokenEntity $accessToken)
 {
     //Try to get result from cache
     $result = $this->cache->getSessionByAccessToken($accessToken);
     //If cache is empty
     if (empty($result)) {
         //Get from storage
         $result = $this->storage->getByAccessToken($accessToken);
         //If we have find data from storage, put to cache
         if ($result) {
             $this->cache->putSessionByAccessToken($accessToken, $result);
         }
         //Else we have find data from cache, build the entity !
     } else {
         $result = (new SessionEntity($this->server))->setId($result['id'])->setOwner($result['owner_type'], $result['owner_id']);
     }
     return $result;
 }
 /**
  * Delete an access token
  *
  * @param \League\OAuth2\Server\Entity\AccessTokenEntity $token The access token to delete
  *
  * @return void
  */
 public function delete(AccessTokenEntity $token)
 {
     //Invalidate cache
     $this->cache->invalidateAccessToken($token);
     $this->storage->delete($token);
 }