/**
  * Called when the middleware is handled by the client.
  *
  * @param callable $handler
  *
  * @return callable
  */
 public function __invoke(callable $handler)
 {
     $token = $this->jwtManager->getJwtToken()->getToken();
     return function (RequestInterface $request, array $options) use($handler, $token) {
         return $handler($request->withHeader('Authorization', sprintf(self::AUTH_BEARER, $token)), $options);
     };
 }
 public function testGetTokenShouldUseTheCachedTokenIfItIsValid()
 {
     $mockHandler = new MockHandler([function (RequestInterface $request) {
         $this->assertTrue($request->hasHeader('timeout'));
         $this->assertEquals(3, $request->getHeaderLine('timeout'));
         return new Response(200, ['Content-Type' => 'application/json'], json_encode(['token' => '1453720507', 'expires_in' => 3600]));
     }, function (RequestInterface $request) {
         $this->assertTrue($request->hasHeader('timeout'));
         $this->assertEquals(3, $request->getHeaderLine('timeout'));
         return new Response(200, ['Content-Type' => 'application/json'], json_encode(['token' => 'foo123']));
     }]);
     $handler = HandlerStack::create($mockHandler);
     $authClient = new Client(['handler' => $handler]);
     $authStrategy = new QueryAuthStrategy(['username' => 'admin', 'password' => 'admin']);
     $jwtManager = new JwtManager($authClient, $authStrategy, ['token_url' => '/api/token', 'timeout' => 3]);
     $token = $jwtManager->getJwtToken();
     $this->assertInstanceOf(JwtToken::class, $token);
     $this->assertEquals('1453720507', $token->getToken());
     $token = $jwtManager->getJwtToken();
     $this->assertInstanceOf(JwtToken::class, $token);
     $this->assertEquals('1453720507', $token->getToken());
 }