Merge "maintenance: Script to rename titles for Unicode uppercasing changes"
[lhc/web/wiklou.git] / tests / phpunit / includes / interwiki / InterwikiTest.php
1 <?php
2
3 use MediaWiki\MediaWikiServices;
4
5 /**
6 * @covers Interwiki
7 *
8 * @group MediaWiki
9 * @group Database
10 */
11 class InterwikiTest extends MediaWikiTestCase {
12
13 public function testConstructor() {
14 $interwiki = new Interwiki(
15 'xyz',
16 'http://xyz.acme.test/wiki/$1',
17 'http://xyz.acme.test/w/api.php',
18 'xyzwiki',
19 1,
20 0
21 );
22
23 $this->setContentLang( 'qqx' );
24
25 $this->assertSame( '(interwiki-name-xyz)', $interwiki->getName() );
26 $this->assertSame( '(interwiki-desc-xyz)', $interwiki->getDescription() );
27 $this->assertSame( 'http://xyz.acme.test/w/api.php', $interwiki->getAPI() );
28 $this->assertSame( 'http://xyz.acme.test/wiki/$1', $interwiki->getURL() );
29 $this->assertSame( 'xyzwiki', $interwiki->getWikiID() );
30 $this->assertTrue( $interwiki->isLocal() );
31 $this->assertFalse( $interwiki->isTranscludable() );
32 }
33
34 public function testGetUrl() {
35 $interwiki = new Interwiki(
36 'xyz',
37 'http://xyz.acme.test/wiki/$1'
38 );
39
40 $this->assertSame( 'http://xyz.acme.test/wiki/$1', $interwiki->getURL() );
41 $this->assertSame( 'http://xyz.acme.test/wiki/Foo%26Bar', $interwiki->getURL( 'Foo&Bar' ) );
42 }
43
44 //// tests for static data access methods below ///////////////////////////////////////////////
45
46 private function populateDB( $iwrows ) {
47 $dbw = wfGetDB( DB_MASTER );
48 $dbw->delete( 'interwiki', '*', __METHOD__ );
49 $dbw->insert( 'interwiki', array_values( $iwrows ), __METHOD__ );
50 $this->tablesUsed[] = 'interwiki';
51 }
52
53 private function setWgInterwikiCache( $interwikiCache ) {
54 $this->overrideMwServices();
55 MediaWikiServices::getInstance()->resetServiceForTesting( 'InterwikiLookup' );
56 $this->setMwGlobals( 'wgInterwikiCache', $interwikiCache );
57 }
58
59 public function testDatabaseStorage() {
60 // NOTE: database setup is expensive, so we only do
61 // it once and run all the tests in one go.
62 $dewiki = [
63 'iw_prefix' => 'de',
64 'iw_url' => 'http://de.wikipedia.org/wiki/',
65 'iw_api' => 'http://de.wikipedia.org/w/api.php',
66 'iw_wikiid' => 'dewiki',
67 'iw_local' => 1,
68 'iw_trans' => 0
69 ];
70
71 $zzwiki = [
72 'iw_prefix' => 'zz',
73 'iw_url' => 'http://zzwiki.org/wiki/',
74 'iw_api' => 'http://zzwiki.org/w/api.php',
75 'iw_wikiid' => 'zzwiki',
76 'iw_local' => 0,
77 'iw_trans' => 0
78 ];
79
80 $this->populateDB( [ $dewiki, $zzwiki ] );
81
82 $this->setWgInterwikiCache( false );
83
84 $interwikiLookup = MediaWikiServices::getInstance()->getInterwikiLookup();
85 $this->assertEquals(
86 [ $dewiki, $zzwiki ],
87 $interwikiLookup->getAllPrefixes(),
88 'getAllPrefixes()'
89 );
90 $this->assertEquals(
91 [ $dewiki ],
92 $interwikiLookup->getAllPrefixes( true ),
93 'getAllPrefixes()'
94 );
95 $this->assertEquals(
96 [ $zzwiki ],
97 $interwikiLookup->getAllPrefixes( false ),
98 'getAllPrefixes()'
99 );
100
101 $this->assertTrue( $interwikiLookup->isValidInterwiki( 'de' ), 'known prefix is valid' );
102 $this->assertFalse( $interwikiLookup->isValidInterwiki( 'xyz' ), 'unknown prefix is valid' );
103
104 $this->assertNull( $interwikiLookup->fetch( null ), 'no prefix' );
105 $this->assertFalse( $interwikiLookup->fetch( 'xyz' ), 'unknown prefix' );
106
107 $interwiki = $interwikiLookup->fetch( 'de' );
108 $this->assertInstanceOf( Interwiki::class, $interwiki );
109 $this->assertSame( $interwiki, $interwikiLookup->fetch( 'de' ), 'in-process caching' );
110
111 $this->assertSame( 'http://de.wikipedia.org/wiki/', $interwiki->getURL(), 'getURL' );
112 $this->assertSame( 'http://de.wikipedia.org/w/api.php', $interwiki->getAPI(), 'getAPI' );
113 $this->assertSame( 'dewiki', $interwiki->getWikiID(), 'getWikiID' );
114 $this->assertSame( true, $interwiki->isLocal(), 'isLocal' );
115 $this->assertSame( false, $interwiki->isTranscludable(), 'isTranscludable' );
116
117 $interwikiLookup->invalidateCache( 'de' );
118 $this->assertNotSame( $interwiki, $interwikiLookup->fetch( 'de' ), 'invalidate cache' );
119 }
120
121 }