Skip to content

Commit 1c2dec1

Browse files
authored
Merge pull request #119 from thinkingmedia/thinkingmedia/fixes
Throws NullException for response codes of 500
2 parents c7126dd + 990677e commit 1c2dec1

File tree

4 files changed

+45
-23
lines changed

4 files changed

+45
-23
lines changed

lib/Tmdb/Exception/TmdbApiException.php

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -55,16 +55,6 @@ class TmdbApiException extends \Exception
5555
const STATUS_INVALID_REQUEST_TOKEN = 33;
5656
const STATUS_RESOURCE_NOT_FOUND = 34;
5757

58-
/**
59-
* @var int
60-
*/
61-
protected $code;
62-
63-
/**
64-
* @var string
65-
*/
66-
protected $message;
67-
6858
/**
6959
* @var Request
7060
*/
@@ -78,15 +68,16 @@ class TmdbApiException extends \Exception
7868
/**
7969
* Create the exception
8070
*
81-
* @param string $message
82-
* @param int $code
83-
* @param Request|null $request
84-
* @param Response|null $response
71+
* @param int $code
72+
* @param string $message
73+
* @param Request|null $request
74+
* @param Response|null $response
75+
* @param \Exception|null $previous
8576
*/
86-
public function __construct($code, $message, $request = null, $response = null)
77+
public function __construct($code, $message, $request = null, $response = null, \Exception $previous = null)
8778
{
88-
$this->code = $code;
89-
$this->message = $message;
79+
parent::__construct($message, $code, $previous);
80+
9081
$this->request = $request;
9182
$this->response = $response;
9283
}

lib/Tmdb/HttpClient/Adapter/AbstractAdapter.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,19 @@ abstract class AbstractAdapter implements AdapterInterface
2626
*
2727
* @param Request $request
2828
* @param Response $response
29+
* @param \Exception $previous
2930
* @return TmdbApiException
3031
*/
31-
protected function createApiException(Request $request, Response $response)
32+
protected function createApiException(Request $request, Response $response, \Exception $previous= null)
3233
{
3334
$errors = json_decode((string) $response->getBody());
3435

3536
return new TmdbApiException(
36-
$errors->status_code,
37-
$errors->status_message,
37+
isset($errors->status_code) ? $errors->status_code : $response->getCode(),
38+
isset($errors->status_message) ? $errors->status_message : null,
3839
$request,
39-
$response
40+
$response,
41+
$previous
4042
);
4143
}
4244
}

lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,14 @@ private function createResponse(ResponseInterface $adapterResponse = null)
119119
*/
120120
protected function handleRequestException(Request $request, RequestException $previousException)
121121
{
122-
if (null !== $previousException && null == $previousException->getResponse()) {
123-
throw new NullResponseException($this->request, $previousException);
122+
if (null !== $previousException) {
123+
$response = $previousException->getResponse();
124+
if(null == $response) {
125+
throw new NullResponseException($this->request, $previousException);
126+
}
127+
if($response->getStatusCode() >= 500 && $response->getStatusCode() <= 599) {
128+
throw new NullResponseException($this->request, $previousException);
129+
}
124130
}
125131

126132
throw $this->createApiException(

test/Tmdb/Tests/HttpClient/Adapter/GuzzleAdapterTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,29 @@ public function shouldThrowNullResponseException()
298298
$adapter->get(new Request());
299299
}
300300

301+
/**
302+
* @expectedException \Tmdb\Exception\NullResponseException
303+
* @test
304+
*/
305+
public function shouldThrowExceptionForServerError()
306+
{
307+
$client = $this->getMock('GuzzleHttp\ClientInterface');
308+
309+
$client->expects($this->once())
310+
->method('get')
311+
->will($this->throwException(
312+
new RequestException(
313+
'500',
314+
new \GuzzleHttp\Message\Request('get', '/'),
315+
new \GuzzleHttp\Message\Response(500, [], Stream::factory('<html><body>Internal Server Error</body></html>'))
316+
)
317+
))
318+
;
319+
320+
$adapter = new GuzzleAdapter($client);
321+
$adapter->get(new Request());
322+
}
323+
301324
/**
302325
* @test
303326
*/

0 commit comments

Comments
 (0)