summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php')
-rw-r--r--www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php156
1 files changed, 156 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php b/www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
new file mode 100644
index 00000000..ca3ac1b6
--- /dev/null
+++ b/www/wiki/tests/phpunit/includes/changes/CategoryMembershipChangeTest.php
@@ -0,0 +1,156 @@
+<?php
+
+/**
+ * @covers CategoryMembershipChange
+ *
+ * @group Database
+ *
+ * @author Addshore
+ */
+class CategoryMembershipChangeTest extends MediaWikiLangTestCase {
+
+ /**
+ * @var array|Title[]|User[]
+ */
+ private static $lastNotifyArgs;
+
+ /**
+ * @var int
+ */
+ private static $notifyCallCounter = 0;
+
+ /**
+ * @var RecentChange
+ */
+ private static $mockRecentChange;
+
+ /**
+ * @var Revision
+ */
+ private static $pageRev = null;
+
+ /**
+ * @var User
+ */
+ private static $revUser = null;
+
+ /**
+ * @var string
+ */
+ private static $pageName = 'CategoryMembershipChangeTestPage';
+
+ public static function newForCategorizationCallback() {
+ self::$lastNotifyArgs = func_get_args();
+ self::$notifyCallCounter += 1;
+ return self::$mockRecentChange;
+ }
+
+ public function setUp() {
+ parent::setUp();
+ self::$notifyCallCounter = 0;
+ self::$mockRecentChange = self::getMock( RecentChange::class );
+
+ $this->setContentLang( 'qqx' );
+ }
+
+ public function addDBDataOnce() {
+ $info = $this->insertPage( self::$pageName );
+ $title = $info['title'];
+
+ $page = WikiPage::factory( $title );
+ self::$pageRev = $page->getRevision();
+ self::$revUser = User::newFromId( self::$pageRev->getUser( Revision::RAW ) );
+ }
+
+ private function newChange( Revision $revision = null ) {
+ $change = new CategoryMembershipChange( Title::newFromText( self::$pageName ), $revision );
+ $change->overrideNewForCategorizationCallback(
+ 'CategoryMembershipChangeTest::newForCategorizationCallback'
+ );
+
+ return $change;
+ }
+
+ public function testChangeAddedNoRev() {
+ $change = $this->newChange();
+ $change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
+
+ $this->assertEquals( 1, self::$notifyCallCounter );
+
+ $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
+ $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
+ $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[6] );
+ $this->assertEquals( null, self::$lastNotifyArgs[7] );
+ $this->assertEquals( 1, self::$lastNotifyArgs[8] );
+ $this->assertEquals( null, self::$lastNotifyArgs[9] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[10] );
+ }
+
+ public function testChangeRemovedNoRev() {
+ $change = $this->newChange();
+ $change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
+
+ $this->assertEquals( 1, self::$notifyCallCounter );
+
+ $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
+ $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
+ $this->assertEquals( '(autochange-username)', self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( 0, self::$lastNotifyArgs[5] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[6] );
+ $this->assertEquals( null, self::$lastNotifyArgs[7] );
+ $this->assertEquals( 1, self::$lastNotifyArgs[8] );
+ $this->assertEquals( null, self::$lastNotifyArgs[9] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[10] );
+ }
+
+ public function testChangeAddedWithRev() {
+ $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
+ $change = $this->newChange( $revision );
+ $change->triggerCategoryAddedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
+
+ $this->assertEquals( 1, self::$notifyCallCounter );
+
+ $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
+ $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
+ $this->assertEquals( self::$revUser->getName(), self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-added-to-category: ' . self::$pageName . ')',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
+ $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
+ $this->assertEquals( null, self::$lastNotifyArgs[7] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[8] );
+ $this->assertEquals( '127.0.0.1', self::$lastNotifyArgs[9] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[10] );
+ }
+
+ public function testChangeRemovedWithRev() {
+ $revision = Revision::newFromId( Title::newFromText( self::$pageName )->getLatestRevID() );
+ $change = $this->newChange( $revision );
+ $change->triggerCategoryRemovedNotification( Title::newFromText( 'CategoryName', NS_CATEGORY ) );
+
+ $this->assertEquals( 1, self::$notifyCallCounter );
+
+ $this->assertTrue( strlen( self::$lastNotifyArgs[0] ) === 14 );
+ $this->assertEquals( 'Category:CategoryName', self::$lastNotifyArgs[1]->getPrefixedText() );
+ $this->assertEquals( self::$revUser->getName(), self::$lastNotifyArgs[2]->getName() );
+ $this->assertEquals( '(recentchanges-page-removed-from-category: ' . self::$pageName . ')',
+ self::$lastNotifyArgs[3] );
+ $this->assertEquals( self::$pageName, self::$lastNotifyArgs[4]->getPrefixedText() );
+ $this->assertEquals( self::$pageRev->getParentId(), self::$lastNotifyArgs[5] );
+ $this->assertEquals( $revision->getId(), self::$lastNotifyArgs[6] );
+ $this->assertEquals( null, self::$lastNotifyArgs[7] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[8] );
+ $this->assertEquals( '127.0.0.1', self::$lastNotifyArgs[9] );
+ $this->assertEquals( 0, self::$lastNotifyArgs[10] );
+ }
+
+}