From f5fdda0ba10637a6d3b522b183c679fc8215cb53 Mon Sep 17 00:00:00 2001 From: Moritz Schubotz Date: Wed, 17 Aug 2016 19:41:04 +0200 Subject: [PATCH] Improve error reporting Display error message in the UI, if the check command passes, but the mml/svg/complete endpoints returns an valid json error. Bug: T143225 Change-Id: I50776926e42f75a2c1e30fc9afe08baae3fcdbd1 --- MathRestbaseInterface.php | 20 ++++++++++++++++- tests/MathRestBaseInterfaceTest.php | 34 +++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) 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 ); + } }