Make RefreshLinksJob MCR compliant.
[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 $mainContent = new WikitextContent( 'MAIN [[Kittens]]' );
52 $auxContent = new WikitextContent( 'AUX [[Category:Goats]]' );
53 $page = $this->createPage( __METHOD__, [ 'main' => $mainContent, 'aux' => $auxContent ] );
54
55 // clear state
56 $parserCache = MediaWikiServices::getInstance()->getParserCache();
57 $parserCache->deleteOptionsKey( $page );
58
59 $this->db->delete( 'pagelinks', '*', __METHOD__ );
60 $this->db->delete( 'categorylinks', '*', __METHOD__ );
61
62 // run job
63 $job = new RefreshLinksJob( $page->getTitle(), [ 'parseThreshold' => 0 ] );
64 $job->run();
65
66 // assert state
67 $options = ParserOptions::newCanonical( 'canonical' );
68 $out = $parserCache->get( $page, $options );
69 $this->assertNotFalse( $out, 'parser cache entry' );
70
71 $text = $out->getText();
72 $this->assertContains( 'MAIN', $text );
73 $this->assertContains( 'AUX', $text );
74
75 $this->assertSelect(
76 'pagelinks',
77 'pl_title',
78 [ 'pl_from' => $page->getId() ],
79 [ [ 'Kittens' ] ]
80 );
81 $this->assertSelect(
82 'categorylinks',
83 'cl_to',
84 [ 'cl_from' => $page->getId() ],
85 [ [ 'Goats' ] ]
86 );
87 }
88
89 }