Merge "Title: Title::getSubpage should not lose the interwiki prefix"
[lhc/web/wiklou.git] / tests / phpunit / includes / jobqueue / jobs / RefreshLinksJobTest.php
1 <?php
2
3 use MediaWiki\MediaWikiServices;
4
5 /**
6 * @covers RefreshLinksJob
7 *
8 * @group JobQueue
9 * @group Database
10 *
11 * @license GPL-2.0-or-later
12 * @author Addshore
13 */
14 class RefreshLinksJobTest extends MediaWikiTestCase {
15
16 public function setUp() {
17 parent::setUp();
18
19 $this->tablesUsed[] = 'page';
20 $this->tablesUsed[] = 'revision';
21
22 $this->tablesUsed[] = 'pagelinks';
23 $this->tablesUsed[] = 'categorylinks';
24 }
25
26 /**
27 * @param string $name
28 * @param Content[] $content
29 *
30 * @return WikiPage
31 */
32 private function createPage( $name, array $content ) {
33 $title = Title::makeTitle( $this->getDefaultWikitextNS(), $name );
34 $page = WikiPage::factory( $title );
35
36 $updater = $page->newPageUpdater( $this->getTestUser()->getUser() );
37
38 foreach ( $content as $slot => $cnt ) {
39 $updater->setContent( $slot, $cnt );
40 }
41
42 $updater->saveRevision( CommentStoreComment::newUnsavedComment( 'Test' ) );
43
44 return $page;
45 }
46
47 // TODO: test multi-page
48 // TODO: test recursive
49 // TODO: test partition
50
51 public function testRunForSinglePage() {
52 MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
53 'aux',
54 CONTENT_MODEL_WIKITEXT
55 );
56
57 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
58 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
59 $page = $this->createPage( __METHOD__, [ 'main' => $mainContent, 'aux' => $auxContent ] );
60
61 // clear state
62 $parserCache = MediaWikiServices::getInstance()->getParserCache();
63 $parserCache->deleteOptionsKey( $page );
64
65 $this->db->delete( 'pagelinks', '*', __METHOD__ );
66 $this->db->delete( 'categorylinks', '*', __METHOD__ );
67
68 // run job
69 $job = new RefreshLinksJob( $page->getTitle(), [ 'parseThreshold' => 0 ] );
70 $job->run();
71
72 $this->assertSelect(
73 'pagelinks',
74 'pl_title',
75 [ 'pl_from' => $page->getId() ],
76 [ [ 'Kittens' ] ]
77 );
78 $this->assertSelect(
79 'categorylinks',
80 'cl_to',
81 [ 'cl_from' => $page->getId() ],
82 [ [ 'Goats' ] ]
83 );
84 }
85
86 public function testRunForMultiPage() {
87 MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
88 'aux',
89 CONTENT_MODEL_WIKITEXT
90 );
91
92 $fname = __METHOD__;
93
94 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
95 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
96 $page1 = $this->createPage( "$fname-1", [ 'main' => $mainContent, 'aux' => $auxContent ] );
97
98 $mainContent = new WikitextContent( 'MAIN [[Dogs]]' );
99 $auxContent = new WikitextContent( 'AUX [[Category:Hamsters]]' );
100 $page2 = $this->createPage( "$fname-2", [ 'main' => $mainContent, 'aux' => $auxContent ] );
101
102 // clear state
103 $parserCache = MediaWikiServices::getInstance()->getParserCache();
104 $parserCache->deleteOptionsKey( $page1 );
105 $parserCache->deleteOptionsKey( $page2 );
106
107 $this->db->delete( 'pagelinks', '*', __METHOD__ );
108 $this->db->delete( 'categorylinks', '*', __METHOD__ );
109
110 // run job
111 $job = new RefreshLinksJob(
112 Title::newMainPage(),
113 [ 'pages' => [ [ 0, "$fname-1" ], [ 0, "$fname-2" ] ] ]
114 );
115 $job->run();
116
117 $this->assertSelect(
118 'pagelinks',
119 'pl_title',
120 [ 'pl_from' => $page1->getId() ],
121 [ [ 'Kittens' ] ]
122 );
123 $this->assertSelect(
124 'categorylinks',
125 'cl_to',
126 [ 'cl_from' => $page1->getId() ],
127 [ [ 'Goats' ] ]
128 );
129 $this->assertSelect(
130 'pagelinks',
131 'pl_title',
132 [ 'pl_from' => $page2->getId() ],
133 [ [ 'Dogs' ] ]
134 );
135 $this->assertSelect(
136 'categorylinks',
137 'cl_to',
138 [ 'cl_from' => $page2->getId() ],
139 [ [ 'Hamsters' ] ]
140 );
141 }
142 }