50a24ada24cdd075db97b6a2b8ca4b590d7b918b
[lhc/web/wiklou.git] / tests / phpunit / includes / jobqueue / jobs / CategoryMembershipChangeJobTest.php
1 <?php
2
3 /**
4 * @covers CategoryMembershipChangeJob
5 *
6 * @group JobQueue
7 * @group Database
8 *
9 * @licence GNU GPL v2+
10 * @author Addshore
11 */
12 class CategoryMembershipChangeJobTest extends MediaWikiTestCase {
13
14 const TITLE_STRING = 'UTCatChangeJobPage';
15
16 /**
17 * @var Title
18 */
19 private $title;
20
21 public function setUp() {
22 parent::setUp();
23 $this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
24 }
25
26 public function addDBData() {
27 parent::addDBData();
28 $insertResult = $this->insertPage( self::TITLE_STRING, 'UT Content' );
29 $this->title = $insertResult['title'];
30 }
31
32 private function runJobs() {
33 JobQueueGroup::destroySingletons();
34 $jobs = new RunJobs;
35 $jobs->loadParamsAndArgs( null, [ 'quiet' => true ], null );
36 $jobs->execute();
37 }
38
39 /**
40 * @param string $text new page text
41 *
42 * @return int|null
43 */
44 private function editPageText( $text ) {
45 $page = WikiPage::factory( $this->title );
46 $editResult = $page->doEditContent(
47 ContentHandler::makeContent( $text, $this->title ),
48 __METHOD__
49 );
50 /** @var Revision $revision */
51 $revision = $editResult->value['revision'];
52 $this->runJobs();
53
54 return $revision->getId();
55 }
56
57 /**
58 * @param int $revId
59 *
60 * @return RecentChange|null
61 */
62 private function getCategorizeRecentChangeForRevId( $revId ) {
63 return RecentChange::newFromConds(
64 [
65 'rc_type' => RC_CATEGORIZE,
66 'rc_this_oldid' => $revId,
67 ],
68 __METHOD__
69 );
70 }
71
72 public function testRun_normalCategoryAddedAndRemoved() {
73 $addedRevId = $this->editPageText( '[[Category:Normal]]' );
74 $removedRevId = $this->editPageText( 'Blank' );
75
76 $this->assertEquals(
77 '[[:' . self::TITLE_STRING . ']] added to category',
78 $this->getCategorizeRecentChangeForRevId( $addedRevId )->getAttribute( 'rc_comment' )
79 );
80 $this->assertEquals(
81 '[[:' . self::TITLE_STRING . ']] removed from category',
82 $this->getCategorizeRecentChangeForRevId( $removedRevId )->getAttribute( 'rc_comment' )
83 );
84 }
85
86 }