Fix inability of fetching message object
authorAleksey Bekh-Ivanov (WMDE) <aleksey.bekh-ivanov@wikimedia.de>
Tue, 26 Sep 2017 12:01:30 +0000 (14:01 +0200)
committerAleksey Bekh-Ivanov (WMDE) <aleksey.bekh-ivanov@wikimedia.de>
Wed, 4 Oct 2017 13:24:42 +0000 (15:24 +0200)
Fatal error was happening due to the fact that ApiUsageException was
trying to call `getMessage()` on StatusValue which doesn't have this
method.

Change-Id: Idd9c7d47d9e24a6a32db6daf75a827bf958c9b76

includes/api/ApiUsageException.php
tests/phpunit/includes/api/ApiUsageExceptionTest.php [new file with mode: 0644]

index 47902a7..4196add 100644 (file)
@@ -213,7 +213,7 @@ class ApiUsageException extends UsageException implements ILocalizedException {
         * @inheritDoc
         */
        public function getMessageObject() {
-               return $this->status->getMessage();
+               return Status::wrap( $this->status )->getMessage();
        }
 
        /**
diff --git a/tests/phpunit/includes/api/ApiUsageExceptionTest.php b/tests/phpunit/includes/api/ApiUsageExceptionTest.php
new file mode 100644 (file)
index 0000000..f901cf2
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+
+class ApiUsageExceptionTest extends MediaWikiTestCase {
+
+       public function testCreateWithStatusValue_CanGetAMessageObject() {
+               $messageKey = 'some-message-key';
+               $messageParameter = 'some-parameter';
+               $statusValue = new StatusValue();
+               $statusValue->fatal( $messageKey, $messageParameter );
+
+               $apiUsageException = new ApiUsageException( null, $statusValue );
+               /** @var \Message $gotMessage */
+               $gotMessage = $apiUsageException->getMessageObject();
+
+               $this->assertInstanceOf( \Message::class, $gotMessage );
+               $this->assertEquals( $messageKey, $gotMessage->getKey() );
+               $this->assertEquals( [ $messageParameter ], $gotMessage->getParams() );
+       }
+
+       public function testNewWithMessage_ThenGetMessageObject_ReturnsApiMessageWithProvidedData() {
+               $expectedMessage = new Message( 'some-message-key', [ 'some message parameter' ] );
+               $expectedCode = 'some-error-code';
+               $expectedData = [ 'some-error-data' ];
+
+               $apiUsageException = ApiUsageException::newWithMessage(
+                       null,
+                       $expectedMessage,
+                       $expectedCode,
+                       $expectedData
+               );
+               /** @var \ApiMessage $gotMessage */
+               $gotMessage = $apiUsageException->getMessageObject();
+
+               $this->assertInstanceOf( \ApiMessage::class, $gotMessage );
+               $this->assertEquals( $expectedMessage->getKey(), $gotMessage->getKey() );
+               $this->assertEquals( $expectedMessage->getParams(), $gotMessage->getParams() );
+               $this->assertEquals( $expectedCode, $gotMessage->getApiCode() );
+               $this->assertEquals( $expectedData, $gotMessage->getApiData() );
+       }
+
+}