X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=tests%2Fphpunit%2Fincludes%2Fspecialpage%2FChangesListSpecialPageTest.php;h=aeaa1aee9ee6924799ccdc0051d83bab2b110b11;hb=54d50ef3921dc9f30dc4d863ddc471dc564998e9;hp=9b81d6d77df0d524cef47fd49ebdfefcf892ebc1;hpb=605d3add72cbaae042209c17634783452c224414;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php b/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php index 9b81d6d77d..aeaa1aee9e 100644 --- a/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php +++ b/tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php @@ -105,9 +105,14 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } private static function normalizeCondition( $conds ) { + $dbr = wfGetDB( DB_REPLICA ); $normalized = array_map( - function ( $k, $v ) { - return is_numeric( $k ) ? $v : "$k = $v"; + function ( $k, $v ) use ( $dbr ) { + if ( is_array( $v ) ) { + sort( $v ); + } + // (Ab)use makeList() to format only this entry + return $dbr->makeList( [ $k => $v ], Database::LIST_AND ); }, array_keys( $conds ), $conds @@ -116,9 +121,9 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase return $normalized; } - /** return false if condition begin with 'rc_timestamp ' */ + /** return false if condition begins with 'rc_timestamp ' */ private static function filterOutRcTimestampCondition( $var ) { - return ( false === strpos( $var, 'rc_timestamp ' ) ); + return ( is_array( $var ) || false === strpos( $var, 'rc_timestamp ' ) ); } public function testRcNsFilter() { @@ -199,10 +204,15 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testRcHidemyselfFilter() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $user = $this->getTestUser()->getUser(); + $user->getActorId( wfGetDB( DB_MASTER ) ); $this->assertConditions( [ # expected - "rc_user_text != '{$user->getName()}'", + "NOT((rc_actor = '{$user->getActorId()}') OR " + . "(rc_actor = '0' AND rc_user = '{$user->getId()}'))", ], [ 'hidemyself' => 1, @@ -212,9 +222,10 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase ); $user = User::newFromName( '10.11.12.13', false ); + $id = $user->getActorId( wfGetDB( DB_MASTER ) ); $this->assertConditions( [ # expected - "rc_user_text != '10.11.12.13'", + "NOT((rc_actor = '$id') OR (rc_actor = '0' AND rc_user_text = '10.11.12.13'))", ], [ 'hidemyself' => 1, @@ -225,10 +236,15 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testRcHidebyothersFilter() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $user = $this->getTestUser()->getUser(); + $user->getActorId( wfGetDB( DB_MASTER ) ); $this->assertConditions( [ # expected - "rc_user_text = '{$user->getName()}'", + "(rc_actor = '{$user->getActorId()}') OR " + . "(rc_actor = '0' AND rc_user_text = '{$user->getName()}')", ], [ 'hidebyothers' => 1, @@ -238,9 +254,10 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase ); $user = User::newFromName( '10.11.12.13', false ); + $id = $user->getActorId( wfGetDB( DB_MASTER ) ); $this->assertConditions( [ # expected - "rc_user_text = '10.11.12.13'", + "(rc_actor = '$id') OR (rc_actor = '0' AND rc_user_text = '10.11.12.13')", ], [ 'hidebyothers' => 1, @@ -330,7 +347,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase $user = $this->getTestSysop()->getUser(); $this->assertConditions( [ # expected - "rc_patrolled = 0", + 'rc_patrolled' => 0, ], [ 'hidepatrolled' => 1, @@ -344,7 +361,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase $user = $this->getTestSysop()->getUser(); $this->assertConditions( [ # expected - "rc_patrolled = 1", + 'rc_patrolled' => [ 1, 2 ], ], [ 'hideunpatrolled' => 1, @@ -354,6 +371,30 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase ); } + public function testRcReviewStatusFilter() { + $user = $this->getTestSysop()->getUser(); + $this->assertConditions( + [ #expected + 'rc_patrolled' => 1, + ], + [ + 'reviewStatus' => 'manual' + ], + "rc conditions: reviewStatus=manual", + $user + ); + $this->assertConditions( + [ #expected + 'rc_patrolled' => [ 0, 2 ], + ], + [ + 'reviewStatus' => 'unpatrolled;auto' + ], + "rc conditions: reviewStatus=unpatrolled;auto", + $user + ); + } + public function testRcHideminorFilter() { $this->assertConditions( [ # expected @@ -428,10 +469,13 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testFilterUserExpLevelAllExperienceLevels() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $this->assertConditions( [ # expected - 'rc_user != 0', + 'COALESCE( actor_rc_user.actor_user, rc_user ) != 0', ], [ 'userExpLevel' => 'newcomer;learner;experienced', @@ -441,10 +485,13 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testFilterUserExpLevelRegistrered() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $this->assertConditions( [ # expected - 'rc_user != 0', + 'COALESCE( actor_rc_user.actor_user, rc_user ) != 0', ], [ 'userExpLevel' => 'registered', @@ -454,10 +501,13 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testFilterUserExpLevelUnregistrered() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $this->assertConditions( [ # expected - 'rc_user' => 0, + 'COALESCE( actor_rc_user.actor_user, rc_user ) = 0', ], [ 'userExpLevel' => 'unregistered', @@ -467,10 +517,13 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testFilterUserExpLevelRegistreredOrLearner() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $this->assertConditions( [ # expected - 'rc_user != 0', + 'COALESCE( actor_rc_user.actor_user, rc_user ) != 0', ], [ 'userExpLevel' => 'registered;learner', @@ -480,10 +533,14 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase } public function testFilterUserExpLevelUnregistreredOrExperienced() { + $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', MIGRATION_WRITE_BOTH ); + $this->overrideMwServices(); + $conds = $this->buildQuery( [ 'userExpLevel' => 'unregistered;experienced' ] ); $this->assertRegExp( - '/\(rc_user = 0\) OR \(\(user_editcount >= 500\) AND \(user_registration <= \'[^\']+\'\)\)/', + '/\(COALESCE\( actor_rc_user.actor_user, rc_user \) = 0\) OR ' + . '\(\(user_editcount >= 500\) AND \(user_registration <= \'[^\']+\'\)\)/', reset( $conds ), "rc conditions: userExpLevel=unregistered;experienced" ); @@ -595,8 +652,10 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase ] ); + // @todo: This is not at all safe or sane. It just blindly assumes + // nothing in $conds depends on any other tables. $result = wfGetDB( DB_MASTER )->select( - $tables, + 'user', 'user_name', array_filter( $conds ) + [ 'user_email' => 'ut' ] );