diff --git a/MathRestbaseInterface.php b/MathRestbaseInterface.php index f223b0a..a2d8470 100644 --- a/MathRestbaseInterface.php +++ b/MathRestbaseInterface.php @@ -428,6 +428,24 @@ class MathRestbaseInterface { 'math_type' => $type, 'tex' => $this->tex ] ); - throw new MWException( "Cannot get $type. Server problem." ); + self::throwContentError( $type, $response['body'] ); + } + + /** + * @param $type + * @param $body + * @throws MWException + */ + public static function throwContentError( $type, $body ) { + $detail = 'Server problem.'; + $json = json_decode( $body ); + if ( isset( $json->detail ) ) { + if ( is_array( $json->detail ) ){ + $detail = $json->detail[0]; + } elseif ( is_string( $json->detail ) ) { + $detail = $json->detail; + } + } + throw new MWException( "Cannot get $type. $detail" ); } } diff --git a/tests/MathRestBaseInterfaceTest.php b/tests/MathRestBaseInterfaceTest.php index af21836..9ab6f39 100644 --- a/tests/MathRestBaseInterfaceTest.php +++ b/tests/MathRestBaseInterfaceTest.php @@ -85,4 +85,38 @@ class MathRestbaseInterfaceTest extends MediaWikiTestCase { $rbi->getFullSvgUrl(); } + /** + * Incorporate the "details" in the error message, if the check requests passes, but the + * mml/svg/complete endpoints returns an error + * @expectedException MWException + * @expectedExceptionMessage Cannot get mml. TeX parse error: Missing close brace + */ + public function testLateError() { + // @codingStandardsIgnoreStart + $input = '{"type":"https://mediawiki.org/wiki/HyperSwitch/errors/bad_request","title":"Bad Request","method":"POST","detail":["TeX parse error: Missing close brace"],"uri":"/complete"}'; + // @codingStandardsIgnoreEnd + MathRestbaseInterface::throwContentError( 'mml', $input ); + } + + /** + * Incorporate the "details" in the error message, if the check requests passes, but the + * mml/svg/complete endpoints returns an error + * @expectedException MWException + * @expectedExceptionMessage Cannot get mml. TeX parse error: Missing close brace + */ + public function testLateErrorString() { + // @codingStandardsIgnoreStart + $input = '{"type":"https://mediawiki.org/wiki/HyperSwitch/errors/bad_request","title":"Bad Request","method":"POST","detail": "TeX parse error: Missing close brace","uri":"/complete"}'; + // @codingStandardsIgnoreEnd + MathRestbaseInterface::throwContentError( 'mml', $input ); + } + + /** + * @expectedException MWException + * @expectedExceptionMessage Cannot get mml. Server problem. + */ + public function testLateErrorNoDetail() { + $input = ''; + MathRestbaseInterface::throwContentError( 'mml', $input ); + } }