diff options
author | daniel <dkinzler@wikimedia.org> | 2021-02-05 11:45:47 +0100 |
---|---|---|
committer | Cindy Cicalese <cindom@gmail.com> | 2021-02-05 16:21:19 -0500 |
commit | 7f4b3e9fcbe42cc88b7e7fea58c59b7f45883853 (patch) | |
tree | ef6b8f0525818839c4ac4bc763578afa604bc0fe /tests/phpunit/includes/api/ApiErrorFormatterTest.php | |
parent | 1a05d69bba25c05d9a393a5f8dc94383a74a744f (diff) | |
download | mediawikicore-7f4b3e9fcbe42cc88b7e7fea58c59b7f45883853.tar.gz mediawikicore-7f4b3e9fcbe42cc88b7e7fea58c59b7f45883853.zip |
Make ApiErrorFormatterTest more robust.
We intend to apply de-duplication of errors to StatusValue.
ApiErrorFormatterTest would break because it uses the same message
codes for errors and warnings, expecting them to both be retained.
This is fixed by using different error codes for testing errors and
warnings.
Change-Id: Iaa4811884efa2be076bcfa33911c3dc14c3af5d1
Diffstat (limited to 'tests/phpunit/includes/api/ApiErrorFormatterTest.php')
-rw-r--r-- | tests/phpunit/includes/api/ApiErrorFormatterTest.php | 221 |
1 files changed, 134 insertions, 87 deletions
diff --git a/tests/phpunit/includes/api/ApiErrorFormatterTest.php b/tests/phpunit/includes/api/ApiErrorFormatterTest.php index 6ee83774d20b..cb71f77e8f73 100644 --- a/tests/phpunit/includes/api/ApiErrorFormatterTest.php +++ b/tests/phpunit/includes/api/ApiErrorFormatterTest.php @@ -74,18 +74,19 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $expect3[ApiResult::META_TYPE] = 'assoc'; $formatter->addWarning( 'string', 'mainpage' ); - $formatter->addError( 'err', 'mainpage' ); + $formatter->addError( 'err', 'aboutpage' ); $this->assertEquals( $expect1, $result->getResultData(), 'Simple test' ); $result->reset(); $formatter->addWarning( 'foo', 'mainpage' ); $formatter->addWarning( 'foo', 'mainpage' ); $formatter->addWarning( 'foo', [ 'parentheses', 'foobar' ] ); - $msg1 = wfMessage( 'mainpage' ); + $msg1 = wfMessage( 'copyright' ); $formatter->addWarning( 'message', $msg1 ); - $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', [ 'overriddenData' => true ] ); + $msg2 = new ApiMessage( 'disclaimers', 'overriddenCode', [ 'overriddenData' => true ] ); $formatter->addWarning( 'messageWithData', $msg2 ); - $formatter->addError( 'errWithData', $msg2 ); + $msg3 = new ApiMessage( 'edithelp', 'overriddenCode', [ 'overriddenData' => true ] ); + $formatter->addError( 'errWithData', $msg3 ); $this->assertSame( $expect2, $result->getResultData(), 'Complex test' ); $this->assertEquals( @@ -105,8 +106,8 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $status->warning( 'parentheses', 'foobar' ); $status->warning( $msg1 ); $status->warning( $msg2 ); - $status->error( 'mainpage' ); - $status->error( 'parentheses', 'foobar' ); + $status->error( 'aboutpage' ); + $status->error( 'brackets', 'foobar' ); $formatter->addMessagesFromStatus( 'status', $status ); $this->assertSame( $expect3, $result->getResultData(), 'Status test' ); @@ -129,106 +130,127 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { return $s; } + private static function text( $msg ) { + return $msg->inLanguage( 'de' )->useDatabase( false )->text(); + } + + private static function html( $msg ) { + return $msg->inLanguage( 'en' )->parse(); + } + public static function provideErrorFormatter() { - $mainpageText = wfMessage( 'mainpage' )->inLanguage( 'de' )->useDatabase( false )->text(); - $parensText = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'de' ) - ->useDatabase( false )->text(); - $mainpageHTML = wfMessage( 'mainpage' )->inLanguage( 'en' )->parse(); - $parensHTML = wfMessage( 'parentheses', 'foobar' )->inLanguage( 'en' )->parse(); + $aboutpage = wfMessage( 'aboutpage' ); + $mainpage = wfMessage( 'mainpage' ); + $parens = wfMessage( 'parentheses', 'foobar' ); + $brackets = wfMessage( 'brackets', 'foobar' ); + $copyright = wfMessage( 'copyright' ); + $disclaimers = wfMessage( 'disclaimers' ); + $edithelp = wfMessage( 'edithelp' ); + $C = ApiResult::META_CONTENT; $I = ApiResult::META_INDEXED_TAG_NAME; $overriddenData = [ 'overriddenData' => true, ApiResult::META_TYPE => 'assoc' ]; return [ - $tmp = [ 'wikitext', 'de', false, + 'zero' => $tmp = [ 'wikitext', 'de', false, [ 'errors' => [ - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'err', $C => 'text' ], + [ 'code' => 'aboutpage', 'text' => self::text( $aboutpage ), 'module' => 'err', $C => 'text' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'string', $C => 'text' ], + [ 'code' => 'mainpage', 'text' => self::text( $mainpage ), 'module' => 'string', $C => 'text' ], $I => 'warning', ], ], [ 'errors' => [ - [ 'code' => 'overriddenCode', 'text' => $mainpageText, + [ 'code' => 'overriddenCode', 'text' => self::text( $edithelp ), 'data' => $overriddenData, 'module' => 'errWithData', $C => 'text' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'foo', $C => 'text' ], - [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'foo', $C => 'text' ], - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'message', $C => 'text' ], - [ 'code' => 'overriddenCode', 'text' => $mainpageText, + [ 'code' => 'mainpage', 'text' => self::text( $mainpage ), 'module' => 'foo', $C => 'text' ], + [ 'code' => 'parentheses', 'text' => self::text( $parens ), 'module' => 'foo', $C => 'text' ], + [ 'code' => 'copyright', 'text' => self::text( $copyright ), + 'module' => 'message', $C => 'text' ], + [ 'code' => 'overriddenCode', 'text' => self::text( $disclaimers ), 'data' => $overriddenData, 'module' => 'messageWithData', $C => 'text' ], $I => 'warning', ], ], [ 'errors' => [ - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'status', $C => 'text' ], - [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'status', $C => 'text' ], + [ 'code' => 'aboutpage', 'text' => self::text( $aboutpage ), + 'module' => 'status', $C => 'text' ], + [ 'code' => 'brackets', 'text' => self::text( $brackets ), 'module' => 'status', $C => 'text' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'text' => $mainpageText, 'module' => 'status', $C => 'text' ], - [ 'code' => 'parentheses', 'text' => $parensText, 'module' => 'status', $C => 'text' ], - [ 'code' => 'overriddenCode', 'text' => $mainpageText, + [ 'code' => 'mainpage', 'text' => self::text( $mainpage ), 'module' => 'status', $C => 'text' ], + [ 'code' => 'parentheses', 'text' => self::text( $parens ), + 'module' => 'status', $C => 'text' ], + [ 'code' => 'copyright', 'text' => self::text( $copyright ), + 'module' => 'status', $C => 'text' ], + [ 'code' => 'overriddenCode', 'text' => self::text( $disclaimers ), 'data' => $overriddenData, 'module' => 'status', $C => 'text' ], $I => 'warning', ], ], ], - [ 'plaintext' ] + $tmp, // For these messages, plaintext and wikitext are the same - [ 'html', 'en', true, + 'one' => [ 'plaintext' ] + $tmp, // For these messages, plaintext and wikitext are the same + 'two' => [ 'html', 'en', true, [ 'errors' => [ - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'err', $C => 'html' ], + [ 'code' => 'aboutpage', 'html' => self::html( $aboutpage ), 'module' => 'err', $C => 'html' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'string', $C => 'html' ], + [ 'code' => 'mainpage', 'html' => self::html( $mainpage ), 'module' => 'string', $C => 'html' ], $I => 'warning', ], ], [ 'errors' => [ - [ 'code' => 'overriddenCode', 'html' => $mainpageHTML, + [ 'code' => 'overriddenCode', 'html' => self::html( $edithelp ), 'data' => $overriddenData, 'module' => 'errWithData', $C => 'html' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'foo', $C => 'html' ], - [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'foo', $C => 'html' ], - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'message', $C => 'html' ], - [ 'code' => 'overriddenCode', 'html' => $mainpageHTML, + [ 'code' => 'mainpage', 'html' => self::html( $mainpage ), 'module' => 'foo', $C => 'html' ], + [ 'code' => 'parentheses', 'html' => self::html( $parens ), 'module' => 'foo', $C => 'html' ], + [ 'code' => 'copyright', 'html' => self::html( $copyright ), + 'module' => 'message', $C => 'html' ], + [ 'code' => 'overriddenCode', 'html' => self::html( $disclaimers ), 'data' => $overriddenData, 'module' => 'messageWithData', $C => 'html' ], $I => 'warning', ], ], [ 'errors' => [ - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'status', $C => 'html' ], - [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'status', $C => 'html' ], + [ 'code' => 'aboutpage', 'html' => self::html( $aboutpage ), + 'module' => 'status', $C => 'html' ], + [ 'code' => 'brackets', 'html' => self::html( $brackets ), 'module' => 'status', $C => 'html' ], $I => 'error', ], 'warnings' => [ - [ 'code' => 'mainpage', 'html' => $mainpageHTML, 'module' => 'status', $C => 'html' ], - [ 'code' => 'parentheses', 'html' => $parensHTML, 'module' => 'status', $C => 'html' ], - [ 'code' => 'overriddenCode', 'html' => $mainpageHTML, + [ 'code' => 'mainpage', 'html' => self::html( $mainpage ), 'module' => 'status', $C => 'html' ], + [ 'code' => 'parentheses', 'html' => self::html( $parens ), + 'module' => 'status', $C => 'html' ], + [ 'code' => 'copyright', 'html' => self::html( $copyright ), + 'module' => 'status', $C => 'html' ], + [ 'code' => 'overriddenCode', 'html' => self::html( $disclaimers ), 'data' => $overriddenData, 'module' => 'status', $C => 'html' ], $I => 'warning', ], ], ], - [ 'raw', 'fr', true, + 'three' => [ 'raw', 'fr', true, [ 'errors' => [ [ - 'code' => 'mainpage', - 'key' => 'mainpage', + 'code' => 'aboutpage', + 'key' => 'aboutpage', 'params' => [ $I => 'param' ], 'module' => 'err', ], @@ -248,7 +270,7 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { 'errors' => [ [ 'code' => 'overriddenCode', - 'key' => 'mainpage', + 'key' => 'edithelp', 'params' => [ $I => 'param' ], 'data' => $overriddenData, 'module' => 'errWithData', @@ -269,14 +291,14 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { 'module' => 'foo', ], [ - 'code' => 'mainpage', - 'key' => 'mainpage', + 'code' => 'copyright', + 'key' => 'copyright', 'params' => [ $I => 'param' ], 'module' => 'message', ], [ 'code' => 'overriddenCode', - 'key' => 'mainpage', + 'key' => 'disclaimers', 'params' => [ $I => 'param' ], 'data' => $overriddenData, 'module' => 'messageWithData', @@ -287,14 +309,14 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { [ 'errors' => [ [ - 'code' => 'mainpage', - 'key' => 'mainpage', + 'code' => 'aboutpage', + 'key' => 'aboutpage', 'params' => [ $I => 'param' ], 'module' => 'status', ], [ - 'code' => 'parentheses', - 'key' => 'parentheses', + 'code' => 'brackets', + 'key' => 'brackets', 'params' => [ 'foobar', $I => 'param' ], 'module' => 'status', ], @@ -314,8 +336,14 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { 'module' => 'status', ], [ + 'code' => 'copyright', + 'key' => 'copyright', + 'params' => [ $I => 'param' ], + 'module' => 'status', + ], + [ 'code' => 'overriddenCode', - 'key' => 'mainpage', + 'key' => 'disclaimers', 'params' => [ $I => 'param' ], 'data' => $overriddenData, 'module' => 'status', @@ -324,10 +352,10 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { ], ], ], - [ 'none', 'fr', true, + 'four' => [ 'none', 'fr', true, [ 'errors' => [ - [ 'code' => 'mainpage', 'module' => 'err' ], + [ 'code' => 'aboutpage', 'module' => 'err' ], $I => 'error', ], 'warnings' => [ @@ -344,7 +372,7 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { 'warnings' => [ [ 'code' => 'mainpage', 'module' => 'foo' ], [ 'code' => 'parentheses', 'module' => 'foo' ], - [ 'code' => 'mainpage', 'module' => 'message' ], + [ 'code' => 'copyright', 'module' => 'message' ], [ 'code' => 'overriddenCode', 'data' => $overriddenData, 'module' => 'messageWithData' ], $I => 'warning', @@ -352,13 +380,14 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { ], [ 'errors' => [ - [ 'code' => 'mainpage', 'module' => 'status' ], - [ 'code' => 'parentheses', 'module' => 'status' ], + [ 'code' => 'aboutpage', 'module' => 'status' ], + [ 'code' => 'brackets', 'module' => 'status' ], $I => 'error', ], 'warnings' => [ [ 'code' => 'mainpage', 'module' => 'status' ], [ 'code' => 'parentheses', 'module' => 'status' ], + [ 'code' => 'copyright', 'module' => 'status' ], [ 'code' => 'overriddenCode', 'data' => $overriddenData, 'module' => 'status' ], $I => 'warning', ], @@ -371,8 +400,13 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { * @covers ApiErrorFormatter_BackCompat */ public function testErrorFormatterBC() { - $mainpagePlain = wfMessage( 'mainpage' )->useDatabase( false )->plain(); - $parensPlain = wfMessage( 'parentheses', 'foobar' )->useDatabase( false )->plain(); + $aboutpage = wfMessage( 'aboutpage' ); + $mainpage = wfMessage( 'mainpage' ); + $parens = wfMessage( 'parentheses', 'foobar' ); + $brackets = wfMessage( 'brackets', 'foobar' ); + $copyright = wfMessage( 'copyright' ); + $disclaimers = wfMessage( 'disclaimers' ); + $edithelp = wfMessage( 'edithelp' ); $result = new ApiResult( 8388608 ); $formatter = new ApiErrorFormatter_BackCompat( $result ); @@ -386,11 +420,11 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $formatter->addWarning( 'raw', new RawMessage( 'Blah <kbd>kbd</kbd> <b><X></b> 😞' ) ); - $formatter->addError( 'err', 'mainpage' ); + $formatter->addError( 'err', 'aboutpage' ); $this->assertSame( [ 'error' => [ - 'code' => 'mainpage', - 'info' => $mainpagePlain, + 'code' => 'aboutpage', + 'info' => $aboutpage->useDatabase( false )->plain(), ], 'warnings' => [ 'raw' => [ @@ -398,7 +432,7 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { ApiResult::META_CONTENT => 'warnings', ], 'string' => [ - 'warnings' => $mainpagePlain, + 'warnings' => $mainpage->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], ], @@ -409,33 +443,35 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $formatter->addWarning( 'foo', 'mainpage' ); $formatter->addWarning( 'foo', 'mainpage' ); $formatter->addWarning( 'xxx+foo', [ 'parentheses', 'foobar' ] ); - $msg1 = wfMessage( 'mainpage' ); + $msg1 = wfMessage( 'copyright' ); $formatter->addWarning( 'message', $msg1 ); - $msg2 = new ApiMessage( 'mainpage', 'overriddenCode', [ 'overriddenData' => true ] ); + $msg2 = new ApiMessage( 'disclaimers', 'overriddenCode', [ 'overriddenData' => true ] ); $formatter->addWarning( 'messageWithData', $msg2 ); - $formatter->addError( 'errWithData', $msg2 ); + $msg3 = new ApiMessage( 'edithelp', 'overriddenCode', [ 'overriddenData' => true ] ); + $formatter->addError( 'errWithData', $msg3 ); $formatter->addWarning( null, 'mainpage' ); $this->assertSame( [ 'error' => [ 'code' => 'overriddenCode', - 'info' => $mainpagePlain, + 'info' => $edithelp->useDatabase( false )->plain(), 'overriddenData' => true, ], 'warnings' => [ 'unknown' => [ - 'warnings' => $mainpagePlain, + 'warnings' => $mainpage->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], 'messageWithData' => [ - 'warnings' => $mainpagePlain, + 'warnings' => $disclaimers->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], 'message' => [ - 'warnings' => $mainpagePlain, + 'warnings' => $copyright->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], 'foo' => [ - 'warnings' => "$mainpagePlain\n$parensPlain", + 'warnings' => $mainpage->useDatabase( false )->plain() + . "\n" . $parens->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], ], @@ -444,19 +480,27 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $this->assertSame( [ - 'code' => 'mainpage', - 'info' => 'Main Page', + 'code' => 'copyright', + 'info' => $copyright->useDatabase( false )->plain(), ], $formatter->formatMessage( $msg1 ) ); $this->assertSame( [ 'code' => 'overriddenCode', - 'info' => 'Main Page', + 'info' => $disclaimers->useDatabase( false )->plain(), 'overriddenData' => true, ], $formatter->formatMessage( $msg2 ) ); + $this->assertSame( + [ + 'code' => 'overriddenCode', + 'info' => $edithelp->useDatabase( false )->plain(), + 'overriddenData' => true, + ], + $formatter->formatMessage( $msg3 ) + ); $result->reset(); $status = Status::newGood(); @@ -464,17 +508,20 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $status->warning( 'parentheses', 'foobar' ); $status->warning( $msg1 ); $status->warning( $msg2 ); - $status->error( 'mainpage' ); - $status->error( 'parentheses', 'foobar' ); + $status->error( 'aboutpage' ); + $status->error( 'brackets', 'foobar' ); $formatter->addMessagesFromStatus( 'status', $status ); $this->assertSame( [ 'error' => [ - 'code' => 'mainpage', - 'info' => $mainpagePlain, + 'code' => 'aboutpage', + 'info' => $aboutpage->useDatabase( false )->plain(), ], 'warnings' => [ 'status' => [ - 'warnings' => "$mainpagePlain\n$parensPlain", + 'warnings' => $mainpage->useDatabase( false )->plain() + . "\n" . $parens->useDatabase( false )->plain() + . "\n" . $copyright->useDatabase( false )->plain() + . "\n" . $disclaimers->useDatabase( false )->plain(), ApiResult::META_CONTENT => 'warnings', ], ], @@ -485,15 +532,15 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $this->assertSame( [ [ - 'message' => 'mainpage', + 'message' => 'aboutpage', 'params' => [ $I => 'param' ], - 'code' => 'mainpage', + 'code' => 'aboutpage', 'type' => 'error', ], [ - 'message' => 'parentheses', + 'message' => 'brackets', 'params' => [ 'foobar', $I => 'param' ], - 'code' => 'parentheses', + 'code' => 'brackets', 'type' => 'error', ], $I => 'error', @@ -516,13 +563,13 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { 'type' => 'warning', ], [ - 'message' => 'mainpage', + 'message' => 'copyright', 'params' => [ $I => 'param' ], - 'code' => 'mainpage', + 'code' => 'copyright', 'type' => 'warning', ], [ - 'message' => 'mainpage', + 'message' => 'disclaimers', 'params' => [ $I => 'param' ], 'code' => 'overriddenCode', 'type' => 'warning', @@ -535,11 +582,11 @@ class ApiErrorFormatterTest extends MediaWikiLangTestCase { $result->reset(); $result->addValue( null, 'error', [ 'bogus' ] ); - $formatter->addError( 'err', 'mainpage' ); + $formatter->addError( 'err', 'aboutpage' ); $this->assertSame( [ 'error' => [ - 'code' => 'mainpage', - 'info' => $mainpagePlain, + 'code' => 'aboutpage', + 'info' => $aboutpage->useDatabase( false )->plain(), ], ApiResult::META_TYPE => 'assoc', ], $result->getResultData(), 'Overwrites bogus "error" value with real error' ); |