]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - tests/phpunit/includes/logging/RightsLogFormatterTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / logging / RightsLogFormatterTest.php
diff --git a/tests/phpunit/includes/logging/RightsLogFormatterTest.php b/tests/phpunit/includes/logging/RightsLogFormatterTest.php
new file mode 100644 (file)
index 0000000..f48507d
--- /dev/null
@@ -0,0 +1,216 @@
+<?php
+
+class RightsLogFormatterTest extends LogFormatterTestCase {
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideRightsLogDatabaseRows() {
+               return [
+                       // Current format
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => [
+                                               '4::oldgroups' => [],
+                                               '5::newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [],
+                                               'newmetadata' => [
+                                                       [ 'expiry' => null ],
+                                                       [ 'expiry' => '20160101123456' ]
+                                               ],
+                                       ],
+                               ],
+                               [
+                                       'text' => 'Sysop changed group membership for User from (none) to '
+                                               . 'bureaucrat (temporary, until 12:34, 1 January 2016) and administrator',
+                                       'api' => [
+                                               'oldgroups' => [],
+                                               'newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [],
+                                               'newmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                                       [ 'group' => 'bureaucrat', 'expiry' => '2016-01-01T12:34:56Z' ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+
+                       // Previous format (oldgroups and newgroups as arrays, no metadata)
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => [
+                                               '4::oldgroups' => [],
+                                               '5::newgroups' => [ 'sysop', 'bureaucrat' ],
+                                       ],
+                               ],
+                               [
+                                       'text' => 'Sysop changed group membership for User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => [
+                                               'oldgroups' => [],
+                                               'newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [],
+                                               'newmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                                       [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+
+                       // Legacy format (oldgroups and newgroups as numeric-keyed strings)
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => [
+                                               '',
+                                               'sysop, bureaucrat',
+                                       ],
+                               ],
+                               [
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User from (none) to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => [
+                                               'oldgroups' => [],
+                                               'newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [],
+                                               'newmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                                       [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+
+                       // Really old entry
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'rights',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'User',
+                                       'params' => [],
+                               ],
+                               [
+                                       'legacy' => true,
+                                       'text' => 'Sysop changed group membership for User',
+                                       'api' => [],
+                               ],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideRightsLogDatabaseRows
+        */
+       public function testRightsLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+
+       /**
+        * Provide different rows from the logging table to test
+        * for backward compatibility.
+        * Do not change the existing data, just add a new database row
+        */
+       public static function provideAutopromoteLogDatabaseRows() {
+               return [
+                       // Current format
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => [
+                                               '4::oldgroups' => [ 'sysop' ],
+                                               '5::newgroups' => [ 'sysop', 'bureaucrat' ],
+                                       ],
+                               ],
+                               [
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => [
+                                               'oldgroups' => [ 'sysop' ],
+                                               'newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                               ],
+                                               'newmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                                       [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+
+                       // Legacy format
+                       [
+                               [
+                                       'type' => 'rights',
+                                       'action' => 'autopromote',
+                                       'comment' => 'rights comment',
+                                       'user' => 0,
+                                       'user_text' => 'Sysop',
+                                       'namespace' => NS_USER,
+                                       'title' => 'Sysop',
+                                       'params' => [
+                                               'sysop',
+                                               'sysop, bureaucrat',
+                                       ],
+                               ],
+                               [
+                                       'legacy' => true,
+                                       'text' => 'Sysop was automatically promoted from administrator to '
+                                               . 'administrator and bureaucrat',
+                                       'api' => [
+                                               'oldgroups' => [ 'sysop' ],
+                                               'newgroups' => [ 'sysop', 'bureaucrat' ],
+                                               'oldmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                               ],
+                                               'newmetadata' => [
+                                                       [ 'group' => 'sysop', 'expiry' => 'infinity' ],
+                                                       [ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
+                                               ],
+                                       ],
+                               ],
+                       ],
+               ];
+       }
+
+       /**
+        * @dataProvider provideAutopromoteLogDatabaseRows
+        */
+       public function testAutopromoteLogDatabaseRows( $row, $extra ) {
+               $this->doTestLogFormatter( $row, $extra );
+       }
+}