X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fuser%2FUserTest.php;h=642e8b402573a880311dd61c1f907a24174f6a51;hp=64bdf31d63a4211d0beb78251aff79e0a304ca8b;hb=3b0effb20334f19f662aed6760ddfe7d4b43c6d6;hpb=d6e366a318a2fedf88533456b71f91cb5c52c5e6 diff --git a/tests/phpunit/includes/user/UserTest.php b/tests/phpunit/includes/user/UserTest.php index 64bdf31d63..642e8b4025 100644 --- a/tests/phpunit/includes/user/UserTest.php +++ b/tests/phpunit/includes/user/UserTest.php @@ -777,30 +777,36 @@ class UserTest extends MediaWikiTestCase { * @covers User::getBlockedStatus */ public function testSoftBlockRanges() { - global $wgUser; - - $this->setMwGlobals( [ - 'wgSoftBlockRanges' => [ '10.0.0.0/8' ], - 'wgUser' => null, - ] ); + $setSessionUser = function ( User $user, WebRequest $request ) { + $this->setMwGlobals( 'wgUser', $user ); + RequestContext::getMain()->setUser( $user ); + RequestContext::getMain()->setRequest( $request ); + TestingAccessWrapper::newFromObject( $user )->mRequest = $request; + $request->getSession()->setUser( $user ); + }; + $this->setMwGlobals( 'wgSoftBlockRanges', [ '10.0.0.0/8' ] ); // IP isn't in $wgSoftBlockRanges + $wgUser = new User(); $request = new FauxRequest(); $request->setIP( '192.168.0.1' ); - $wgUser = User::newFromSession( $request ); + $setSessionUser( $wgUser, $request ); $this->assertNull( $wgUser->getBlock() ); // IP is in $wgSoftBlockRanges + $wgUser = new User(); $request = new FauxRequest(); $request->setIP( '10.20.30.40' ); - $wgUser = User::newFromSession( $request ); + $setSessionUser( $wgUser, $request ); $block = $wgUser->getBlock(); $this->assertInstanceOf( Block::class, $block ); $this->assertSame( 'wgSoftBlockRanges', $block->getSystemBlockType() ); // Make sure the block is really soft - $request->getSession()->setUser( $this->getTestUser()->getUser() ); - $wgUser = User::newFromSession( $request ); + $wgUser = $this->getTestUser()->getUser(); + $request = new FauxRequest(); + $request->setIP( '10.20.30.40' ); + $setSessionUser( $wgUser, $request ); $this->assertFalse( $wgUser->isAnon(), 'sanity check' ); $this->assertNull( $wgUser->getBlock() ); } @@ -1462,4 +1468,42 @@ class UserTest extends MediaWikiTestCase { // clean up $block->delete(); } + + /** + * @covers User::getFirstEditTimestamp + * @covers User::getLatestEditTimestamp + */ + public function testGetFirstLatestEditTimestamp() { + $clock = MWTimestamp::convert( TS_UNIX, '20100101000000' ); + MWTimestamp::setFakeTime( function () use ( &$clock ) { + return $clock += 1000; + } ); + try { + $user = $this->getTestUser()->getUser(); + $firstRevision = self::makeEdit( $user, 'Help:UserTest_GetEditTimestamp', 'one', 'test' ); + $secondRevision = self::makeEdit( $user, 'Help:UserTest_GetEditTimestamp', 'two', 'test' ); + // Sanity check: revisions timestamp are different + $this->assertNotEquals( $firstRevision->getTimestamp(), $secondRevision->getTimestamp() ); + + $this->assertEquals( $firstRevision->getTimestamp(), $user->getFirstEditTimestamp() ); + $this->assertEquals( $secondRevision->getTimestamp(), $user->getLatestEditTimestamp() ); + } finally { + MWTimestamp::setFakeTime( false ); + } + } + + /** + * @param User $user + * @param string $title + * @param string $content + * @param string $comment + * @return \MediaWiki\Revision\RevisionRecord|null + */ + private static function makeEdit( User $user, $title, $content, $comment ) { + $page = WikiPage::factory( Title::newFromText( $title ) ); + $content = ContentHandler::makeContent( $content, $page->getTitle() ); + $updater = $page->newPageUpdater( $user ); + $updater->setContent( 'main', $content ); + return $updater->saveRevision( CommentStoreComment::newUnsavedComment( $comment ) ); + } }