/**
  * Tests getApiRequest().
  */
 public function testGetApiRequest()
 {
     $apiUrl = 'http://gsc.io/u/?rl=http%3A%2F%2Fexample.com%2F';
     $shortUrl = 'http://gsc.io/u/112';
     $deferred = $this->getMockDeferred();
     $request = $this->adapter->getApiRequest($apiUrl, $deferred);
     $this->assertInstanceOf('Phergie\\Plugin\\Http\\Request', $request);
     $this->assertEquals($apiUrl, $request->getUrl());
     $request->callReject('foo');
     $request->callResolve($this->getMockResponse(201, [], $shortUrl));
     $request->callResolve($this->getMockResponse(500, [], 'Error: bar'));
     Phake::inOrder(Phake::verify($deferred)->reject('foo'), Phake::verify($deferred)->resolve($shortUrl), Phake::verify($deferred)->reject());
 }
 /**
  * Handle the event
  *
  * @param string $url
  * @param \React\Promise\Deferred $deferred
  */
 public function handleShortenEvent($url, Deferred $deferred)
 {
     $requestId = uniqid();
     // Only urls longer than the minimum length should be shortened
     if (strlen($url) < $this->adapter->getMinimumLength()) {
         $this->logDebug('[' . $requestId . ']Skip shortening url (too short): ' . $url);
         $deferred->resolve($url);
         return;
     }
     // Check if URL host is one we're skipping
     $host = parse_url($url, \PHP_URL_HOST);
     if (in_array($host, $this->skipHosts)) {
         $this->logDebug('[' . $requestId . ']Skip shortening url (based on hostname): ' . $url);
         $deferred->resolve($url);
         return;
     }
     $this->logDebug('[' . $requestId . ']Shortening url: ' . $url);
     $request = $this->adapter->getApiRequest($this->adapter->getApiUrl($url), $deferred);
     $this->getEventEmitter()->emit('http.request', [$request]);
 }