1<?php 2 3use MediaWiki\Interwiki\InterwikiLookupAdapter; 4 5/** 6 * @covers MediaWiki\Interwiki\InterwikiLookupAdapter 7 * 8 * @group MediaWiki 9 * @group Interwiki 10 */ 11class InterwikiLookupAdapterTest extends \MediaWikiUnitTestCase { 12 13 /** 14 * @var InterwikiLookupAdapter 15 */ 16 private $interwikiLookup; 17 18 protected function setUp() : void { 19 parent::setUp(); 20 21 $this->interwikiLookup = new InterwikiLookupAdapter( 22 $this->getSiteLookup( $this->getSites() ) 23 ); 24 } 25 26 public function testIsValidInterwiki() { 27 $this->assertTrue( 28 $this->interwikiLookup->isValidInterwiki( 'enwt' ), 29 'enwt known prefix is valid' 30 ); 31 $this->assertTrue( 32 $this->interwikiLookup->isValidInterwiki( 'foo' ), 33 'foo site known prefix is valid' 34 ); 35 $this->assertFalse( 36 $this->interwikiLookup->isValidInterwiki( 'xyz' ), 37 'unknown prefix is not valid' 38 ); 39 } 40 41 public function testFetch() { 42 $interwiki = $this->interwikiLookup->fetch( '' ); 43 $this->assertNull( $interwiki ); 44 45 $interwiki = $this->interwikiLookup->fetch( 'xyz' ); 46 $this->assertFalse( $interwiki ); 47 48 $interwiki = $this->interwikiLookup->fetch( 'foo' ); 49 $this->assertInstanceOf( Interwiki::class, $interwiki ); 50 $this->assertSame( 'foobar', $interwiki->getWikiID() ); 51 52 $interwiki = $this->interwikiLookup->fetch( 'enwt' ); 53 $this->assertInstanceOf( Interwiki::class, $interwiki ); 54 55 $this->assertSame( 'https://en.wiktionary.org/wiki/$1', $interwiki->getURL(), 'getURL' ); 56 $this->assertSame( 'https://en.wiktionary.org/w/api.php', $interwiki->getAPI(), 'getAPI' ); 57 $this->assertSame( 'enwiktionary', $interwiki->getWikiID(), 'getWikiID' ); 58 $this->assertTrue( $interwiki->isLocal(), 'isLocal' ); 59 } 60 61 public function testGetAllPrefixes() { 62 $foo = [ 63 'iw_prefix' => 'foo', 64 'iw_url' => '', 65 'iw_api' => '', 66 'iw_wikiid' => 'foobar', 67 'iw_local' => false, 68 'iw_trans' => false, 69 ]; 70 $enwt = [ 71 'iw_prefix' => 'enwt', 72 'iw_url' => 'https://en.wiktionary.org/wiki/$1', 73 'iw_api' => 'https://en.wiktionary.org/w/api.php', 74 'iw_wikiid' => 'enwiktionary', 75 'iw_local' => true, 76 'iw_trans' => false, 77 ]; 78 79 $this->assertEquals( 80 [ $foo, $enwt ], 81 $this->interwikiLookup->getAllPrefixes(), 82 'getAllPrefixes()' 83 ); 84 85 $this->assertEquals( 86 [ $foo ], 87 $this->interwikiLookup->getAllPrefixes( false ), 88 'get external prefixes' 89 ); 90 91 $this->assertEquals( 92 [ $enwt ], 93 $this->interwikiLookup->getAllPrefixes( true ), 94 'get local prefixes' 95 ); 96 } 97 98 private function getSiteLookup( SiteList $sites ) { 99 $siteLookup = $this->getMockBuilder( SiteLookup::class ) 100 ->disableOriginalConstructor() 101 ->getMock(); 102 103 $siteLookup->expects( $this->any() ) 104 ->method( 'getSites' ) 105 ->will( $this->returnValue( $sites ) ); 106 107 return $siteLookup; 108 } 109 110 private function getSites() { 111 $sites = []; 112 113 $site = new Site(); 114 $site->setGlobalId( 'foobar' ); 115 $site->addInterwikiId( 'foo' ); 116 $site->setSource( 'external' ); 117 $sites[] = $site; 118 119 $site = new MediaWikiSite(); 120 $site->setGlobalId( 'enwiktionary' ); 121 $site->setGroup( 'wiktionary' ); 122 $site->setLanguageCode( 'en' ); 123 $site->addNavigationId( 'enwiktionary' ); 124 $site->addInterwikiId( 'enwt' ); 125 $site->setSource( 'local' ); 126 $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" ); 127 $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" ); 128 $sites[] = $site; 129 130 return new SiteList( $sites ); 131 } 132 133} 134