1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
<?php
use MediaWiki\MainConfigNames;
use MediaWiki\Revision\RevisionRecord;
use MediaWiki\Title\Title;
use MediaWiki\Utils\MWTimestamp;
/**
* @covers \CategoryMembershipChangeJob
*
* @group JobQueue
* @group Database
*
* @license GPL-2.0-or-later
* @author Addshore
*/
class CategoryMembershipChangeJobTest extends MediaWikiIntegrationTestCase {
private const TITLE_STRING = 'UTCatChangeJobPage';
/**
* @var Title
*/
private $title;
protected function setUp(): void {
parent::setUp();
$this->overrideConfigValue( MainConfigNames::RCWatchCategoryMembership, true );
$this->setContentLang( 'qqx' );
}
public function addDBData() {
parent::addDBData();
$insertResult = $this->insertPage( self::TITLE_STRING, 'UT Content' );
$this->title = $insertResult['title'];
}
/**
* @param string $text new page text
*
* @return int|null
*/
private function editPageText( $text ) {
$editResult = $this->editPage(
$this->title,
$text,
__METHOD__,
NS_MAIN,
$this->getTestSysop()->getAuthority()
);
/** @var RevisionRecord $revisionRecord */
$revisionRecord = $editResult->getNewRevision();
$this->runJobs();
return $revisionRecord->getId();
}
/**
* @param int $revId
*
* @return RecentChange|null
*/
private function getCategorizeRecentChangeForRevId( $revId ) {
$rc = RecentChange::newFromConds(
[
'rc_type' => RC_CATEGORIZE,
'rc_this_oldid' => $revId,
],
__METHOD__
);
$this->assertNotNull( $rc, 'rev_id = ' . $revId );
return $rc;
}
public function testRun_normalCategoryAddedAndRemoved() {
$addedRevId = $this->editPageText( '[[Category:Normal]]' );
$removedRevId = $this->editPageText( 'Blank' );
$this->assertEquals(
'(recentchanges-page-added-to-category: ' . self::TITLE_STRING . ')',
$this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' )
);
$this->assertEquals(
'(recentchanges-page-removed-from-category: ' . self::TITLE_STRING . ')',
$this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' )
);
}
public function testJobSpecRemovesDuplicates() {
$jobSpec = CategoryMembershipChangeJob::newSpec( $this->title, MWTimestamp::now(), false );
$job = new CategoryMembershipChangeJob(
$this->title,
$jobSpec->getParams()
);
$this->assertTrue( $job->ignoreDuplicates() );
$this->assertTrue( $jobSpec->ignoreDuplicates() );
$this->assertEquals( $job->getDeduplicationInfo(), $jobSpec->getDeduplicationInfo() );
}
public function testJobSpecDeduplicationIgnoresRevTimestamp() {
$jobSpec1 = CategoryMembershipChangeJob::newSpec( $this->title, '20191008204617', false );
$jobSpec2 = CategoryMembershipChangeJob::newSpec( $this->title, '20201008204617', false );
$this->assertArrayEquals( $jobSpec1->getDeduplicationInfo(), $jobSpec2->getDeduplicationInfo() );
}
}
|