*/ class OldChangesListTest extends MediaWikiLangTestCase { /** * @var TestRecentChangesHelper */ private $testRecentChangesHelper; public function __construct( $name = null, array $data = [], $dataName = '' ) { parent::__construct( $name, $data, $dataName ); $this->testRecentChangesHelper = new TestRecentChangesHelper(); } protected function setUp() { parent::setUp(); $this->setMwGlobals( [ 'wgArticlePath' => '/wiki/$1', ] ); $this->setUserLang( 'qqx' ); } /** * @dataProvider recentChangesLine_CssForLineNumberProvider */ public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber ); $this->assertRegExp( $expected, $line, $message ); } public function recentChangesLine_CssForLineNumberProvider() { return [ [ '/mw-line-odd/', 1, 'odd line number' ], [ '/mw-line-even/', 2, 'even line number' ] ]; } public function testRecentChangesLine_NotWatchedCssClass() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line ); } public function testRecentChangesLine_WatchedCssClass() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 ); $this->assertRegExp( '/mw-changeslist-line-watched/', $line ); } public function testRecentChangesLine_LogTitle() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getLogChange( 'delete', 'delete' ); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' ); $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' ); $this->assertRegExp( "/dellogpage/", $line, 'link text' ); } public function testRecentChangesLine_DiffHistLinks() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/title=Cat&curid=20131103212153&diff=5&oldid=191/', $line, 'assert diff link' ); $this->assertRegExp( '/title=Cat&curid=20131103212153&action=history"/', $line, 'assert history link' ); } public function testRecentChangesLine_Flags() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getNewBotEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertContains( '(newpageletter)', $line, 'new page flag' ); $this->assertContains( '(boteditletter)', $line, 'bot flag' ); } public function testRecentChangesLine_Attribs() { $recentChange = $this->getEditChange(); $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie'; $oldChangesList = $this->getOldChangesList(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/
  • /', $line ); $this->assertRegExp( '/
  • /', $line ); } public function testRecentChangesLine_numberOfWatchingUsers() { $oldChangesList = $this->getOldChangesList(); $recentChange = $this->getEditChange(); $recentChange->numberofWatchingusers = 100; $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( "/(number-of-watching-users-for-recent-changes: 100)/", $line ); } public function testRecentChangesLine_watchlistCssClass() { $oldChangesList = $this->getOldChangesList(); $oldChangesList->setWatchlistDivs( true ); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( "/watchlist-0-Cat/", $line ); } public function testRecentChangesLine_dataAttribute() { $oldChangesList = $this->getOldChangesList(); $oldChangesList->setWatchlistDivs( true ); $recentChange = $this->getEditChange(); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/data-target-page=\"Cat\"/', $line ); $recentChange = $this->getLogChange( 'delete', 'delete' ); $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 ); $this->assertRegExp( '/data-target-page="Abc"/', $line ); } public function testRecentChangesLine_prefix() { $mockContext = $this->getMockBuilder( RequestContext::class ) ->setMethods( [ 'getTitle' ] ) ->getMock(); $mockContext->method( 'getTitle' ) ->will( $this->returnValue( Title::newFromText( 'Expected Context Title' ) ) ); $oldChangesList = $this->getOldChangesList(); $oldChangesList->setContext( $mockContext ); $recentChange = $this->getEditChange(); $oldChangesList->setChangeLinePrefixer( function ( $rc, $changesList ) { // Make sure RecentChange and ChangesList objects are the same $this->assertEquals( 'Expected Context Title', $changesList->getContext()->getTitle() ); $this->assertEquals( 'Cat', $rc->getTitle() ); return 'I am a prefix'; } ); $line = $oldChangesList->recentChangesLine( $recentChange ); $this->assertRegExp( "/I am a prefix/", $line ); } private function getNewBotEditChange() { $user = $this->getMutableTestUser()->getUser(); $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange( $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0 ); return $recentChange; } private function getLogChange( $logType, $logAction ) { $user = $this->getMutableTestUser()->getUser(); $recentChange = $this->testRecentChangesHelper->makeLogRecentChange( $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0 ); return $recentChange; } private function getEditChange() { $user = $this->getMutableTestUser()->getUser(); $recentChange = $this->testRecentChangesHelper->makeEditRecentChange( $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0 ); return $recentChange; } private function getOldChangesList() { $context = $this->getContext(); return new OldChangesList( $context ); } private function getContext() { $user = $this->getMutableTestUser()->getUser(); $context = $this->testRecentChangesHelper->getTestContext( $user ); $context->setLanguage( 'qqx' ); return $context; } }