Special:RC 'hidemajor' filter
[lhc/web/wiklou.git] / tests / phpunit / includes / specials / SpecialRecentchangesTest.php
index c51217c..c11e6a3 100644 (file)
@@ -48,12 +48,24 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals(
-                       $expected,
-                       $queryConditions,
+                       self::normalizeCondition( $expected ),
+                       self::normalizeCondition( $queryConditions ),
                        $message
                );
        }
 
+       private static function normalizeCondition( $conds ) {
+               $normalized = array_map(
+                       function ( $k, $v ) {
+                               return is_numeric( $k ) ? $v : "$k = $v";
+                       },
+                       array_keys( $conds ),
+                       $conds
+               );
+               sort( $normalized );
+               return $normalized;
+       }
+
        /** return false if condition begin with 'rc_timestamp ' */
        private static function filterOutRcTimestampCondition( $var ) {
                return ( false === strpos( $var, 'rc_timestamp ' ) );
@@ -63,8 +75,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_type != '6'",
-                               1 => "rc_namespace = '0'",
+                               "rc_type != '6'",
+                               "rc_namespace = '0'",
                        ],
                        [
                                'namespace' => NS_MAIN,
@@ -77,8 +89,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_type != '6'",
-                               1 => sprintf( "rc_namespace != '%s'", NS_MAIN ),
+                               "rc_type != '6'",
+                               "rc_namespace != '0'",
                        ],
                        [
                                'namespace' => NS_MAIN,
@@ -96,8 +108,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_type != '6'",
-                               1 => sprintf( "(rc_namespace = '%s' OR rc_namespace = '%s')", $ns1, $ns2 ),
+                               "rc_type != '6'",
+                               "(rc_namespace = '$ns1' OR rc_namespace = '$ns2')",
                        ],
                        [
                                'namespace' => $ns1,
@@ -115,8 +127,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_type != '6'",
-                               1 => sprintf( "(rc_namespace != '%s' AND rc_namespace != '%s')", $ns1, $ns2 ),
+                               "rc_type != '6'",
+                               "(rc_namespace != '$ns1' AND rc_namespace != '$ns2')",
                        ],
                        [
                                'namespace' => $ns1,
@@ -143,8 +155,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_user != '{$user->getId()}'",
-                               1 => "rc_type != '6'",
+                               "rc_user != '{$user->getId()}'",
+                               "rc_type != '6'",
                        ],
                        [
                                'hidemyself' => 1,
@@ -157,8 +169,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_user_text != '10.11.12.13'",
-                               1 => "rc_type != '6'",
+                               "rc_user_text != '10.11.12.13'",
+                               "rc_type != '6'",
                        ],
                        [
                                'hidemyself' => 1,
@@ -173,8 +185,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_user = '{$user->getId()}'",
-                               1 => "rc_type != '6'",
+                               "rc_user = '{$user->getId()}'",
+                               "rc_type != '6'",
                        ],
                        [
                                'hidebyothers' => 1,
@@ -187,8 +199,8 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_user_text = '10.11.12.13'",
-                               1 => "rc_type != '6'",
+                               "rc_user_text = '10.11.12.13'",
+                               "rc_type != '6'",
                        ],
                        [
                                'hidebyothers' => 1,
@@ -203,9 +215,9 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                $this->assertConditions(
                        [ # expected
                                'rc_bot' => 0,
-                               0 => "rc_user != '{$user->getId()}'",
-                               1 => "rc_user = '{$user->getId()}'",
-                               2 => "rc_type != '6'",
+                               "rc_user != '{$user->getId()}'",
+                               "rc_user = '{$user->getId()}'",
+                               "rc_type != '6'",
                        ],
                        [
                                'hidemyself' => 1,
@@ -215,4 +227,170 @@ class SpecialRecentchangesTest extends MediaWikiTestCase {
                        $user
                );
        }
+
+       public function testRcHidepageedits() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_type != '6'",
+                               "rc_type != '0'",
+                       ],
+                       [
+                               'hidepageedits' => 1,
+                       ],
+                       "rc conditions: hidepageedits=1"
+               );
+       }
+
+       public function testRcHidenewpages() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_type != '6'",
+                               "rc_type != '1'",
+                       ],
+                       [
+                               'hidenewpages' => 1,
+                       ],
+                       "rc conditions: hidenewpages=1"
+               );
+       }
+
+       public function testRcHidelog() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_type != '6'",
+                               "rc_type != '3'",
+                       ],
+                       [
+                               'hidelog' => 1,
+                       ],
+                       "rc conditions: hidelog=1"
+               );
+       }
+
+       public function testRcHidehumans() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 1,
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hidebots' => 0,
+                               'hidehumans' => 1,
+                       ],
+                       "rc conditions: hidebots=0 hidehumans=1"
+               );
+       }
+
+       public function testRcHidepatrolledDisabledFilter() {
+               $user = $this->getTestUser()->getUser();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hidepatrolled' => 1,
+                       ],
+                       "rc conditions: hidepatrolled=1 (user not allowed)",
+                       $user
+               );
+       }
+
+       public function testRcHideunpatrolledDisabledFilter() {
+               $user = $this->getTestUser()->getUser();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hideunpatrolled' => 1,
+                       ],
+                       "rc conditions: hideunpatrolled=1 (user not allowed)",
+                       $user
+               );
+       }
+       public function testRcHidepatrolledFilter() {
+               $user = $this->getTestSysop()->getUser();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_patrolled = 0",
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hidepatrolled' => 1,
+                       ],
+                       "rc conditions: hidepatrolled=1",
+                       $user
+               );
+       }
+
+       public function testRcHideunpatrolledFilter() {
+               $user = $this->getTestSysop()->getUser();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_patrolled = 1",
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hideunpatrolled' => 1,
+                       ],
+                       "rc conditions: hideunpatrolled=1",
+                       $user
+               );
+       }
+
+       public function testRcHideminorFilter() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_minor = 0",
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hideminor' => 1,
+                       ],
+                       "rc conditions: hideminor=1"
+               );
+       }
+
+       public function testRcHidemajorFilter() {
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_minor = 1",
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hidemajor' => 1,
+                       ],
+                       "rc conditions: hidemajor=1"
+               );
+       }
+
+       // This is probably going to change when we do auto-fix of
+       // filters combinations that don't make sense but for now
+       // it's the behavior therefore it's the test.
+       public function testRcHidepatrolledHideunpatrolledFilter() {
+               $user = $this->getTestSysop()->getUser();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_bot' => 0,
+                               "rc_patrolled = 0",
+                               "rc_patrolled = 1",
+                               "rc_type != '6'",
+                       ],
+                       [
+                               'hidepatrolled' => 1,
+                               'hideunpatrolled' => 1,
+                       ],
+                       "rc conditions: hidepatrolled=1 hideunpatrolled=1",
+                       $user
+               );
+       }
 }