From 37647e4fd379006ef4e8adf51a114dc4a01b6979 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 13 Jul 2016 13:38:02 -0400 Subject: [PATCH 1/3] handle missing JSON in body --- lib/Tmdb/Exception/TmdbApiException.php | 23 ++++++------------- .../HttpClient/Adapter/AbstractAdapter.php | 14 ++++++----- 2 files changed, 15 insertions(+), 22 deletions(-) diff --git a/lib/Tmdb/Exception/TmdbApiException.php b/lib/Tmdb/Exception/TmdbApiException.php index f440440f..ef9c4cda 100644 --- a/lib/Tmdb/Exception/TmdbApiException.php +++ b/lib/Tmdb/Exception/TmdbApiException.php @@ -55,16 +55,6 @@ class TmdbApiException extends \Exception const STATUS_INVALID_REQUEST_TOKEN = 33; const STATUS_RESOURCE_NOT_FOUND = 34; - /** - * @var int - */ - protected $code; - - /** - * @var string - */ - protected $message; - /** * @var Request */ @@ -78,15 +68,16 @@ class TmdbApiException extends \Exception /** * Create the exception * - * @param string $message - * @param int $code - * @param Request|null $request + * @param int $code + * @param string $message + * @param Request|null $request * @param Response|null $response + * @param \Exception|null $previous */ - public function __construct($code, $message, $request = null, $response = null) + public function __construct($code, $message, $request = null, $response = null, \Exception $previous = null) { - $this->code = $code; - $this->message = $message; + parent::__construct($message, $code, $previous); + $this->request = $request; $this->response = $response; } diff --git a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php index 5a6e6968..4bf96a11 100644 --- a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php +++ b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php @@ -24,19 +24,21 @@ abstract class AbstractAdapter implements AdapterInterface /** * Create the unified exception to throw * - * @param Request $request - * @param Response $response + * @param Request $request + * @param Response $response + * @param \Exception $previous * @return TmdbApiException */ - protected function createApiException(Request $request, Response $response) + protected function createApiException(Request $request, Response $response, \Exception $previous= null) { $errors = json_decode((string) $response->getBody()); return new TmdbApiException( - $errors->status_code, - $errors->status_message, + isset($errors->status_code) ? $errors->status_code : -1, + isset($errors->status_message) ? $errors->status_message : null, $request, - $response + $response, + $previous ); } } From c6f4e0bdff9112dad66a4d8333f8dee7d784cc78 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 13 Jul 2016 13:57:48 -0400 Subject: [PATCH 2/3] handle server 500 as NullException errors --- .../HttpClient/Adapter/AbstractAdapter.php | 2 +- lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php | 10 ++++++-- .../HttpClient/Adapter/GuzzleAdapterTest.php | 23 +++++++++++++++++++ 3 files changed, 32 insertions(+), 3 deletions(-) diff --git a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php index 4bf96a11..77949a6f 100644 --- a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php +++ b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php @@ -34,7 +34,7 @@ protected function createApiException(Request $request, Response $response, \Exc $errors = json_decode((string) $response->getBody()); return new TmdbApiException( - isset($errors->status_code) ? $errors->status_code : -1, + isset($errors->status_code) ? $errors->status_code : $response->getCode(), isset($errors->status_message) ? $errors->status_message : null, $request, $response, diff --git a/lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php b/lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php index 1927d3c2..b9b98f5d 100644 --- a/lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php +++ b/lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php @@ -119,8 +119,14 @@ private function createResponse(ResponseInterface $adapterResponse = null) */ protected function handleRequestException(Request $request, RequestException $previousException) { - if (null !== $previousException && null == $previousException->getResponse()) { - throw new NullResponseException($this->request, $previousException); + if (null !== $previousException) { + $response = $previousException->getResponse(); + if(null == $response) { + throw new NullResponseException($this->request, $previousException); + } + if($response->getStatusCode() >= 500 && $response->getStatusCode() <= 599) { + throw new NullResponseException($this->request, $previousException); + } } throw $this->createApiException( diff --git a/test/Tmdb/Tests/HttpClient/Adapter/GuzzleAdapterTest.php b/test/Tmdb/Tests/HttpClient/Adapter/GuzzleAdapterTest.php index 7b4a354f..a284e5ce 100644 --- a/test/Tmdb/Tests/HttpClient/Adapter/GuzzleAdapterTest.php +++ b/test/Tmdb/Tests/HttpClient/Adapter/GuzzleAdapterTest.php @@ -298,6 +298,29 @@ public function shouldThrowNullResponseException() $adapter->get(new Request()); } + /** + * @expectedException \Tmdb\Exception\NullResponseException + * @test + */ + public function shouldThrowExceptionForServerError() + { + $client = $this->getMock('GuzzleHttp\ClientInterface'); + + $client->expects($this->once()) + ->method('get') + ->will($this->throwException( + new RequestException( + '500', + new \GuzzleHttp\Message\Request('get', '/'), + new \GuzzleHttp\Message\Response(500, [], Stream::factory('Internal Server Error')) + ) + )) + ; + + $adapter = new GuzzleAdapter($client); + $adapter->get(new Request()); + } + /** * @test */ From 990677e928a975c4b612353c8a747ea0e8512b27 Mon Sep 17 00:00:00 2001 From: thinkingmedia Date: Wed, 13 Jul 2016 14:03:16 -0400 Subject: [PATCH 3/3] formatting --- lib/Tmdb/Exception/TmdbApiException.php | 8 ++++---- lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/Tmdb/Exception/TmdbApiException.php b/lib/Tmdb/Exception/TmdbApiException.php index ef9c4cda..fa00fab7 100644 --- a/lib/Tmdb/Exception/TmdbApiException.php +++ b/lib/Tmdb/Exception/TmdbApiException.php @@ -68,10 +68,10 @@ class TmdbApiException extends \Exception /** * Create the exception * - * @param int $code - * @param string $message - * @param Request|null $request - * @param Response|null $response + * @param int $code + * @param string $message + * @param Request|null $request + * @param Response|null $response * @param \Exception|null $previous */ public function __construct($code, $message, $request = null, $response = null, \Exception $previous = null) diff --git a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php index 77949a6f..31a3d221 100644 --- a/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php +++ b/lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php @@ -24,9 +24,9 @@ abstract class AbstractAdapter implements AdapterInterface /** * Create the unified exception to throw * - * @param Request $request - * @param Response $response - * @param \Exception $previous + * @param Request $request + * @param Response $response + * @param \Exception $previous * @return TmdbApiException */ protected function createApiException(Request $request, Response $response, \Exception $previous= null)