CategoryMembershipChangeTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. <?php
  2. /**
  3. * @covers CategoryMembershipChange
  4. *
  5. * @group Database
  6. *
  7. * @author Addshore
  8. */
  9. class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
  10. /**
  11. * @var array|Title[]|User[]
  12. */
  13. private static $lastNotifyArgs;
  14. /**
  15. * @var int
  16. */
  17. private static $notifyCallCounter = 0;
  18. /**
  19. * @var RecentChange
  20. */
  21. private static $mockRecentChange;
  22. /**
  23. * @var Revision
  24. */
  25. private static $pageRev = null;
  26. /**
  27. * @var User
  28. */
  29. private static $revUser = null;
  30. /**
  31. * @var string
  32. */
  33. private static $pageName = 'CategoryMembershipChangeTestPage';
  34. public static function newForCategorizationCallback() {
  35. self::$lastNotifyArgs = func_get_args();
  36. self::$notifyCallCounter += 1;
  37. return self::$mockRecentChange;
  38. }
  39. public function setUp() {
  40. parent::setUp();
  41. self::$notifyCallCounter = 0;
  42. self::$mockRecentChange = self::getMock( RecentChange::class );
  43. $this->setContentLang( 'qqx' );
  44. }
  45. public function addDBDataOnce() {
  46. $info = $this->insertPage( self::$pageName );
  47. $title = $info['title'];
  48. $page = WikiPage::factory( $title );
  49. self::$pageRev = $page->getRevision();
  50. self::$revUser = User::newFromId( self::$pageRev->getUser( Revision::RAW ) );
  51. }
  52. private function newChange( Revision $revision = null ) {
  53. $change = new CategoryMembershipChange( Title::newFromText( self::$pageName ), $revision );
  54. $change->overrideNewForCategorizationCallback(
  55. 'CategoryMembershipChangeTest::newForCategorizationCallback'
  56. );
  57. return $change;
  58. }
  59. public function testChangeAddedNoRev() {
  60. $change = $this->newChange();
  61. $change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
  62. $this->assertEquals( 1, self::$notifyCallCounter );
  63. $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
  64. $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
  65. $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
  66. $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
  67. self::$lastNotifyArgs[3] );
  68. $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
  69. $this->assertEquals( 0, self::$lastNotifyArgs[5] );
  70. $this->assertEquals( 0, self::$lastNotifyArgs[6] );
  71. $this->assertEquals( null, self::$lastNotifyArgs[7] );
  72. $this->assertEquals( 1, self::$lastNotifyArgs[8] );
  73. $this->assertEquals( null, self::$lastNotifyArgs[9] );
  74. $this->assertEquals( 0, self::$lastNotifyArgs[10] );
  75. }
  76. public function testChangeRemovedNoRev() {
  77. $change = $this->newChange();
  78. $change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
  79. $this->assertEquals( 1, self::$notifyCallCounter );
  80. $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
  81. $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
  82. $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
  83. $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
  84. self::$lastNotifyArgs[3] );
  85. $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
  86. $this->assertEquals( 0, self::$lastNotifyArgs[5] );
  87. $this->assertEquals( 0, self::$lastNotifyArgs[6] );
  88. $this->assertEquals( null, self::$lastNotifyArgs[7] );
  89. $this->assertEquals( 1, self::$lastNotifyArgs[8] );
  90. $this->assertEquals( null, self::$lastNotifyArgs[9] );
  91. $this->assertEquals( 0, self::$lastNotifyArgs[10] );
  92. }
  93. public function testChangeAddedWithRev() {
  94. $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
  95. $change = $this->newChange( $revision );
  96. $change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
  97. $this->assertEquals( 1, self::$notifyCallCounter );
  98. $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
  99. $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
  100. $this->assertEquals( self::$revUser->getName(), self::$lastNotifyArgs[2]->getName() );
  101. $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
  102. self::$lastNotifyArgs[3] );
  103. $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
  104. $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
  105. $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
  106. $this->assertEquals( null, self::$lastNotifyArgs[7] );
  107. $this->assertEquals( 0, self::$lastNotifyArgs[8] );
  108. $this->assertEquals( '127.0.0.1', self::$lastNotifyArgs[9] );
  109. $this->assertEquals( 0, self::$lastNotifyArgs[10] );
  110. }
  111. public function testChangeRemovedWithRev() {
  112. $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
  113. $change = $this->newChange( $revision );
  114. $change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
  115. $this->assertEquals( 1, self::$notifyCallCounter );
  116. $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
  117. $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
  118. $this->assertEquals( self::$revUser->getName(), self::$lastNotifyArgs[2]->getName() );
  119. $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
  120. self::$lastNotifyArgs[3] );
  121. $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
  122. $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
  123. $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
  124. $this->assertEquals( null, self::$lastNotifyArgs[7] );
  125. $this->assertEquals( 0, self::$lastNotifyArgs[8] );
  126. $this->assertEquals( '127.0.0.1', self::$lastNotifyArgs[9] );
  127. $this->assertEquals( 0, self::$lastNotifyArgs[10] );
  128. }
  129. }