3 use MediaWiki\MediaWikiServices
;
6 * @covers RefreshLinksJob
11 * @license GPL-2.0-or-later
14 class RefreshLinksJobTest
extends MediaWikiTestCase
{
16 public function setUp() {
19 $this->tablesUsed
[] = 'page';
20 $this->tablesUsed
[] = 'revision';
22 $this->tablesUsed
[] = 'pagelinks';
23 $this->tablesUsed
[] = 'categorylinks';
28 * @param Content[] $content
32 private function createPage( $name, array $content ) {
33 $title = Title
::makeTitle( $this->getDefaultWikitextNS(), $name );
34 $page = WikiPage
::factory( $title );
36 $updater = $page->newPageUpdater( $this->getTestUser()->getUser() );
38 foreach ( $content as $slot => $cnt ) {
39 $updater->setContent( $slot, $cnt );
42 $updater->saveRevision( CommentStoreComment
::newUnsavedComment( 'Test' ) );
47 // TODO: test multi-page
48 // TODO: test recursive
49 // TODO: test partition
51 public function testRunForSinglePage() {
52 MediaWikiServices
::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
54 CONTENT_MODEL_WIKITEXT
57 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
58 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
59 $page = $this->createPage( __METHOD__
, [ 'main' => $mainContent, 'aux' => $auxContent ] );
62 $parserCache = MediaWikiServices
::getInstance()->getParserCache();
63 $parserCache->deleteOptionsKey( $page );
65 $this->db
->delete( 'pagelinks', '*', __METHOD__
);
66 $this->db
->delete( 'categorylinks', '*', __METHOD__
);
69 $job = new RefreshLinksJob( $page->getTitle(), [ 'parseThreshold' => 0 ] );
75 [ 'pl_from' => $page->getId() ],
81 [ 'cl_from' => $page->getId() ],
86 public function testRunForMultiPage() {
87 MediaWikiServices
::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
89 CONTENT_MODEL_WIKITEXT
94 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
95 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
96 $page1 = $this->createPage( "$fname-1", [ 'main' => $mainContent, 'aux' => $auxContent ] );
98 $mainContent = new WikitextContent( 'MAIN [[Dogs]]' );
99 $auxContent = new WikitextContent( 'AUX [[Category:Hamsters]]' );
100 $page2 = $this->createPage( "$fname-2", [ 'main' => $mainContent, 'aux' => $auxContent ] );
103 $parserCache = MediaWikiServices
::getInstance()->getParserCache();
104 $parserCache->deleteOptionsKey( $page1 );
105 $parserCache->deleteOptionsKey( $page2 );
107 $this->db
->delete( 'pagelinks', '*', __METHOD__
);
108 $this->db
->delete( 'categorylinks', '*', __METHOD__
);
111 $job = new RefreshLinksJob(
112 Title
::newMainPage(),
113 [ 'pages' => [ [ 0, "$fname-1" ], [ 0, "$fname-2" ] ] ]
120 [ 'pl_from' => $page1->getId() ],
126 [ 'cl_from' => $page1->getId() ],
132 [ 'pl_from' => $page2->getId() ],
138 [ 'cl_from' => $page2->getId() ],