Merge "Selenium: replace UserLoginPage with BlankPage where possible"
[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 // assert state
73 $options = ParserOptions::newCanonical( 'canonical' );
74 $out = $parserCache->get( $page, $options );
75 $this->assertNotFalse( $out, 'parser cache entry' );
76
77 $text = $out->getText();
78 $this->assertContains( 'MAIN', $text );
79 $this->assertContains( 'AUX', $text );
80
81 $this->assertSelect(
82 'pagelinks',
83 'pl_title',
84 [ 'pl_from' => $page->getId() ],
85 [ [ 'Kittens' ] ]
86 );
87 $this->assertSelect(
88 'categorylinks',
89 'cl_to',
90 [ 'cl_from' => $page->getId() ],
91 [ [ 'Goats' ] ]
92 );
93 }
94
95 }