[MCR] Introduce SlotRoleHandler and SlotRoleRegistry
[lhc/web/wiklou.git] / tests / phpunit / includes / jobqueue / jobs / RefreshLinksJobTest.php
1 <?php
2 use MediaWiki\MediaWikiServices;
3
4 /**
5 * @covers RefreshLinksJob
6 *
7 * @group JobQueue
8 * @group Database
9 *
10 * @license GPL-2.0-or-later
11 * @author Addshore
12 */
13 class RefreshLinksJobTest extends MediaWikiTestCase {
14
15 public function setUp() {
16 parent::setUp();
17
18 $this->tablesUsed[] = 'page';
19 $this->tablesUsed[] = 'revision';
20
21 $this->tablesUsed[] = 'pagelinks';
22 $this->tablesUsed[] = 'categorylinks';
23 }
24
25 /**
26 * @param string $name
27 * @param Content[] $content
28 *
29 * @return WikiPage
30 */
31 private function createPage( $name, array $content ) {
32 $title = Title::makeTitle( $this->getDefaultWikitextNS(), $name );
33 $page = WikiPage::factory( $title );
34
35 $updater = $page->newPageUpdater( $this->getTestUser()->getUser() );
36
37 foreach ( $content as $slot => $cnt ) {
38 $updater->setContent( $slot, $cnt );
39 }
40
41 $updater->saveRevision( CommentStoreComment::newUnsavedComment( 'Test' ) );
42
43 return $page;
44 }
45
46 // TODO: test multi-page
47 // TODO: test recursive
48 // TODO: test partition
49
50 public function testRunForSinglePage() {
51 MediaWikiServices::getInstance()->getSlotRoleRegistry()->defineRoleWithModel(
52 'aux',
53 CONTENT_MODEL_WIKITEXT
54 );
55
56 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
57 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
58 $page = $this->createPage( __METHOD__, [ 'main' => $mainContent, 'aux' => $auxContent ] );
59
60 // clear state
61 $parserCache = MediaWikiServices::getInstance()->getParserCache();
62 $parserCache->deleteOptionsKey( $page );
63
64 $this->db->delete( 'pagelinks', '*', __METHOD__ );
65 $this->db->delete( 'categorylinks', '*', __METHOD__ );
66
67 // run job
68 $job = new RefreshLinksJob( $page->getTitle(), [ 'parseThreshold' => 0 ] );
69 $job->run();
70
71 // assert state
72 $options = ParserOptions::newCanonical( 'canonical' );
73 $out = $parserCache->get( $page, $options );
74 $this->assertNotFalse( $out, 'parser cache entry' );
75
76 $text = $out->getText();
77 $this->assertContains( 'MAIN', $text );
78 $this->assertContains( 'AUX', $text );
79
80 $this->assertSelect(
81 'pagelinks',
82 'pl_title',
83 [ 'pl_from' => $page->getId() ],
84 [ [ 'Kittens' ] ]
85 );
86 $this->assertSelect(
87 'categorylinks',
88 'cl_to',
89 [ 'cl_from' => $page->getId() ],
90 [ [ 'Goats' ] ]
91 );
92 }
93
94 }