OldChangesListTest.php 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  1. <?php
  2. /**
  3. * @covers OldChangesList
  4. *
  5. * @todo add tests to cover article link, timestamp, character difference,
  6. * log entry, user tool links, direction marks, tags, rollback,
  7. * watching users, and date header.
  8. *
  9. * @group Database
  10. *
  11. * @author Katie Filbert < aude.wiki@gmail.com >
  12. */
  13. class OldChangesListTest extends MediaWikiLangTestCase {
  14. /**
  15. * @var TestRecentChangesHelper
  16. */
  17. private $testRecentChangesHelper;
  18. public function __construct( $name = null, array $data = [], $dataName = '' ) {
  19. parent::__construct( $name, $data, $dataName );
  20. $this->testRecentChangesHelper = new TestRecentChangesHelper();
  21. }
  22. protected function setUp() {
  23. parent::setUp();
  24. $this->setMwGlobals( [
  25. 'wgArticlePath' => '/wiki/$1',
  26. ] );
  27. $this->setUserLang( 'qqx' );
  28. }
  29. /**
  30. * @dataProvider recentChangesLine_CssForLineNumberProvider
  31. */
  32. public function testRecentChangesLine_CssForLineNumber( $expected, $linenumber, $message ) {
  33. $oldChangesList = $this->getOldChangesList();
  34. $recentChange = $this->getEditChange();
  35. $line = $oldChangesList->recentChangesLine( $recentChange, false, $linenumber );
  36. $this->assertRegExp( $expected, $line, $message );
  37. }
  38. public function recentChangesLine_CssForLineNumberProvider() {
  39. return [
  40. [ '/mw-line-odd/', 1, 'odd line number' ],
  41. [ '/mw-line-even/', 2, 'even line number' ]
  42. ];
  43. }
  44. public function testRecentChangesLine_NotWatchedCssClass() {
  45. $oldChangesList = $this->getOldChangesList();
  46. $recentChange = $this->getEditChange();
  47. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  48. $this->assertRegExp( '/mw-changeslist-line-not-watched/', $line );
  49. }
  50. public function testRecentChangesLine_WatchedCssClass() {
  51. $oldChangesList = $this->getOldChangesList();
  52. $recentChange = $this->getEditChange();
  53. $line = $oldChangesList->recentChangesLine( $recentChange, true, 1 );
  54. $this->assertRegExp( '/mw-changeslist-line-watched/', $line );
  55. }
  56. public function testRecentChangesLine_LogTitle() {
  57. $oldChangesList = $this->getOldChangesList();
  58. $recentChange = $this->getLogChange( 'delete', 'delete' );
  59. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  60. $this->assertRegExp( '/href="\/wiki\/Special:Log\/delete/', $line, 'link has href attribute' );
  61. $this->assertRegExp( '/title="Special:Log\/delete/', $line, 'link has title attribute' );
  62. $this->assertRegExp( "/dellogpage/", $line, 'link text' );
  63. }
  64. public function testRecentChangesLine_DiffHistLinks() {
  65. $oldChangesList = $this->getOldChangesList();
  66. $recentChange = $this->getEditChange();
  67. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  68. $this->assertRegExp(
  69. '/title=Cat&amp;curid=20131103212153&amp;diff=5&amp;oldid=191/',
  70. $line,
  71. 'assert diff link'
  72. );
  73. $this->assertRegExp(
  74. '/title=Cat&amp;curid=20131103212153&amp;action=history"/',
  75. $line,
  76. 'assert history link'
  77. );
  78. }
  79. public function testRecentChangesLine_Flags() {
  80. $oldChangesList = $this->getOldChangesList();
  81. $recentChange = $this->getNewBotEditChange();
  82. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  83. $this->assertContains(
  84. '<abbr class="newpage" title="(recentchanges-label-newpage)">(newpageletter)</abbr>',
  85. $line,
  86. 'new page flag'
  87. );
  88. $this->assertContains(
  89. '<abbr class="botedit" title="(recentchanges-label-bot)">(boteditletter)</abbr>',
  90. $line,
  91. 'bot flag'
  92. );
  93. }
  94. public function testRecentChangesLine_Attribs() {
  95. $recentChange = $this->getEditChange();
  96. $recentChange->mAttribs['ts_tags'] = 'vandalism,newbie';
  97. $oldChangesList = $this->getOldChangesList();
  98. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  99. $this->assertRegExp(
  100. '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-vandalism[\w\s-]*">/',
  101. $line
  102. );
  103. $this->assertRegExp(
  104. '/<li data-mw-revid="\d+" data-mw-ts="\d+" class="[\w\s-]*mw-tag-newbie[\w\s-]*">/',
  105. $line
  106. );
  107. }
  108. public function testRecentChangesLine_numberOfWatchingUsers() {
  109. $oldChangesList = $this->getOldChangesList();
  110. $recentChange = $this->getEditChange();
  111. $recentChange->numberofWatchingusers = 100;
  112. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  113. $this->assertRegExp( "/(number_of_watching_users_RCview: 100)/", $line );
  114. }
  115. public function testRecentChangesLine_watchlistCssClass() {
  116. $oldChangesList = $this->getOldChangesList();
  117. $oldChangesList->setWatchlistDivs( true );
  118. $recentChange = $this->getEditChange();
  119. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  120. $this->assertRegExp( "/watchlist-0-Cat/", $line );
  121. }
  122. public function testRecentChangesLine_dataAttribute() {
  123. $oldChangesList = $this->getOldChangesList();
  124. $oldChangesList->setWatchlistDivs( true );
  125. $recentChange = $this->getEditChange();
  126. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  127. $this->assertRegExp( '/data-target-page=\"Cat\"/', $line );
  128. $recentChange = $this->getLogChange( 'delete', 'delete' );
  129. $line = $oldChangesList->recentChangesLine( $recentChange, false, 1 );
  130. $this->assertRegExp( '/data-target-page="Abc"/', $line );
  131. }
  132. public function testRecentChangesLine_prefix() {
  133. $mockContext = $this->getMockBuilder( RequestContext::class )
  134. ->setMethods( [ 'getTitle' ] )
  135. ->getMock();
  136. $mockContext->method( 'getTitle' )
  137. ->will( $this->returnValue( Title::newFromText( 'Expected Context Title' ) ) );
  138. $oldChangesList = $this->getOldChangesList();
  139. $oldChangesList->setContext( $mockContext );
  140. $recentChange = $this->getEditChange();
  141. $oldChangesList->setChangeLinePrefixer( function ( $rc, $changesList ) {
  142. // Make sure RecentChange and ChangesList objects are the same
  143. $this->assertEquals( 'Expected Context Title', $changesList->getContext()->getTitle() );
  144. $this->assertEquals( 'Cat', $rc->getTitle() );
  145. return 'I am a prefix';
  146. } );
  147. $line = $oldChangesList->recentChangesLine( $recentChange );
  148. $this->assertRegExp( "/I am a prefix/", $line );
  149. }
  150. private function getNewBotEditChange() {
  151. $user = $this->getMutableTestUser()->getUser();
  152. $recentChange = $this->testRecentChangesHelper->makeNewBotEditRecentChange(
  153. $user, 'Abc', '20131103212153', 5, 191, 190, 0, 0
  154. );
  155. return $recentChange;
  156. }
  157. private function getLogChange( $logType, $logAction ) {
  158. $user = $this->getMutableTestUser()->getUser();
  159. $recentChange = $this->testRecentChangesHelper->makeLogRecentChange(
  160. $logType, $logAction, $user, 'Abc', '20131103212153', 0, 0
  161. );
  162. return $recentChange;
  163. }
  164. private function getEditChange() {
  165. $user = $this->getMutableTestUser()->getUser();
  166. $recentChange = $this->testRecentChangesHelper->makeEditRecentChange(
  167. $user, 'Cat', '20131103212153', 5, 191, 190, 0, 0
  168. );
  169. return $recentChange;
  170. }
  171. private function getOldChangesList() {
  172. $context = $this->getContext();
  173. return new OldChangesList( $context );
  174. }
  175. private function getContext() {
  176. $user = $this->getMutableTestUser()->getUser();
  177. $context = $this->testRecentChangesHelper->getTestContext( $user );
  178. $context->setLanguage( 'qqx' );
  179. return $context;
  180. }
  181. }