From 1b65bd1862cc0037e5321ddb315ed3254f167eff Mon Sep 17 00:00:00 2001 From: DannyS712 Date: Tue, 14 Apr 2020 21:54:02 +0000 Subject: [PATCH] Remove a remaining use of Revision objects Remove use of Title::getFirstRevision and Revision::getUserText Bug: T249393 Bug: T250579 Change-Id: I0f77b124a0c7de1dec6baf4c997e0997ecdd55f8 --- includes/AFComputedVariable.php | 5 +-- tests/phpunit/AbuseFilterDBTest.php | 45 ++++++++++++++++++++++++++ tests/phpunit/unit/AbuseFilterTest.php | 13 +------- 3 files changed, 49 insertions(+), 14 deletions(-) diff --git a/includes/AFComputedVariable.php b/includes/AFComputedVariable.php index bb724d062..af93e0362 100644 --- a/includes/AFComputedVariable.php +++ b/includes/AFComputedVariable.php @@ -378,9 +378,10 @@ class AFComputedVariable { case 'load-first-author': $title = $this->buildTitle( $parameters['namespace'], $parameters['title'] ); - $revision = $title->getFirstRevision(); + $revision = $services->getRevisionLookup()->getFirstRevision( $title ); if ( $revision ) { - $result = $revision->getUserText(); + $user = $revision->getUser(); + $result = $user === null ? '' : $user->getName(); } else { $result = ''; } diff --git a/tests/phpunit/AbuseFilterDBTest.php b/tests/phpunit/AbuseFilterDBTest.php index 055bb868f..d78903737 100644 --- a/tests/phpunit/AbuseFilterDBTest.php +++ b/tests/phpunit/AbuseFilterDBTest.php @@ -2,8 +2,10 @@ use MediaWiki\Extension\AbuseFilter\VariableGenerator\VariableGenerator; use MediaWiki\Revision\MutableRevisionRecord; +use MediaWiki\Revision\RevisionLookup; use MediaWiki\Revision\RevisionRecord; use MediaWiki\Revision\SlotRecord; +use MediaWiki\User\UserIdentityValue; use PHPUnit\Framework\MockObject\MockObject; /** @@ -465,6 +467,49 @@ class AbuseFilterDBTest extends MediaWikiTestCase { ]; } + /** + * Test for the page_first_contributor variable. + * + * @covers AbuseFilter::generateGenericVars + * @covers AFComputedVariable::compute + */ + public function testFirstContributorVar() { + $username = 'foobar'; + + $fakeUser = $this->getMockBuilder( UserIdentityValue::class ) + ->disableOriginalConstructor() + ->setMethods( [ 'getName' ] ) + ->getMock(); + $fakeUser->method( 'getName' )->willReturn( $username ); + + $fakeRevRecord = $this->getMockBuilder( RevisionRecord::class ) + ->disableOriginalConstructor() + ->setMethods( [ 'getUser' ] ) + ->getMockForAbstractClass(); + $fakeRevRecord->method( 'getUser' )->willReturn( $fakeUser ); + + $fakeRevLookup = $this->getMockBuilder( RevisionLookup::class ) + ->setMethods( [ 'getFirstRevision' ] ) + ->getMockForAbstractClass(); + $fakeRevLookup->method( 'getFirstRevision' )->willReturn( $fakeRevRecord ); + + $this->setService( 'RevisionLookup', $fakeRevLookup ); + + $vars = new AbuseFilterVariableHolder(); + $vars->setLazyLoadVar( + 'page_first_contributor', + 'load-first-author', + [ + 'namespace' => 0, + 'title' => 'pageName', + ] + ); + $this->assertSame( + $username, + $vars->getVar( 'page_first_contributor' )->toNative() + ); + } + /** * Test for the wiki_name variable. * diff --git a/tests/phpunit/unit/AbuseFilterTest.php b/tests/phpunit/unit/AbuseFilterTest.php index 395339780..4fc2e654d 100644 --- a/tests/phpunit/unit/AbuseFilterTest.php +++ b/tests/phpunit/unit/AbuseFilterTest.php @@ -197,17 +197,7 @@ class AbuseFilterTest extends MediaWikiUnitTestCase { $title = $this->getTitleWithMockedMethod( 'getRestrictions', $result ); break; // case '_recent_contributors' handled in AbuseFilterDBTest - case '_first_contributor': - $result = 'Fake username'; - $revision = $this->getMockBuilder( Revision::class ) - ->disableOriginalConstructor() - ->setMethods( [ 'getUserText' ] ) - ->getMock(); - $revision->expects( $this->atLeastOnce() ) - ->method( 'getUserText' ) - ->willReturn( $result ); - $title = $this->getTitleWithMockedMethod( 'getFirstRevision', $revision ); - break; + // case '_first_contributor' is handled in AbuseFilterDBTest case '_age': $result = 123; MWTimestamp::setFakeTime( self::FAKE_TIME ); @@ -274,7 +264,6 @@ class AbuseFilterTest extends MediaWikiUnitTestCase { '_restrictions_edit', '_restrictions_move', '_restrictions_upload', - '_first_contributor', '_age' ]; foreach ( $prefixes as $prefix ) {