X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/tests/phpunit/includes/changes/OldChangesListTest.php diff --git a/tests/phpunit/includes/changes/OldChangesListTest.php b/tests/phpunit/includes/changes/OldChangesListTest.php new file mode 100644 index 00000000..91dc7312 --- /dev/null +++ b/tests/phpunit/includes/changes/OldChangesListTest.php @@ -0,0 +1,234 @@ + + */ +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_RCview: 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; + } + +}