setMwGlobals( 'wgRCWatchCategoryMembership', true ); } public function addDBData() { parent::addDBData(); $insertResult = $this->insertPage( self::TITLE_STRING, 'UT Content' ); $this->title = $insertResult['title']; } private function runJobs() { JobQueueGroup::destroySingletons(); $jobs = new RunJobs; $jobs->loadParamsAndArgs( null, [ 'quiet' => true ], null ); $jobs->execute(); } /** * @param string $text new page text * * @return int|null */ private function editPageText( $text ) { $page = WikiPage::factory( $this->title ); $editResult = $page->doEditContent( ContentHandler::makeContent( $text, $this->title ), __METHOD__ ); /** @var Revision $revision */ $revision = $editResult->value['revision']; $this->runJobs(); return $revision->getId(); } /** * @param int $revId * * @return RecentChange|null */ private function getCategorizeRecentChangeForRevId( $revId ) { return RecentChange::newFromConds( [ 'rc_type' => RC_CATEGORIZE, 'rc_this_oldid' => $revId, ], __METHOD__ ); } public function testRun_normalCategoryAddedAndRemoved() { $addedRevId = $this->editPageText( '[[Category:Normal]]' ); $removedRevId = $this->editPageText( 'Blank' ); $this->assertEquals( '[[:' . self::TITLE_STRING . ']] added to category', $this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' ) ); $this->assertEquals( '[[:' . self::TITLE_STRING . ']] removed from category', $this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' ) ); } }