Merge "resourceloader: Avoid clear/set timer overhead in mw.loader.store.add"
[lhc/web/wiklou.git] / tests / phpunit / includes / Storage / NameTableStoreFactoryTest.php
1 <?php
2
3 namespace MediaWiki\Tests\Storage;
4
5 use MediaWiki\Logger\LoggerFactory;
6 use MediaWiki\MediaWikiServices;
7 use MediaWiki\Storage\NameTableStore;
8 use MediaWiki\Storage\NameTableStoreFactory;
9 use MediaWikiTestCase;
10 use Wikimedia\Rdbms\ILBFactory;
11 use Wikimedia\Rdbms\ILoadBalancer;
12
13 /**
14 * @covers MediaWiki\Storage\NameTableStoreFactory
15 * @group Database
16 */
17 class NameTableStoreFactoryTest extends MediaWikiTestCase {
18 /**
19 * @return \PHPUnit_Framework_MockObject_MockObject|ILoadBalancer
20 */
21 private function getMockLoadBalancer() {
22 return $this->getMockBuilder( ILoadBalancer::class )
23 ->disableOriginalConstructor()->getMock();
24 }
25
26 /**
27 * @return \PHPUnit_Framework_MockObject_MockObject|ILBFactory
28 */
29 private function getMockLoadBalancerFactory( $expectedWiki ) {
30 $mock = $this->getMockBuilder( ILBFactory::class )
31 ->disableOriginalConstructor()->getMock();
32
33 $mock->expects( $this->once() )
34 ->method( 'getMainLB' )
35 ->with( $this->equalTo( $expectedWiki ) )
36 ->willReturnCallback( function ( $domain ) use ( $expectedWiki ) {
37 return $this->getMockLoadBalancer();
38 } );
39
40 return $mock;
41 }
42
43 public static function provideTestGet() {
44 return [
45 [
46 'change_tag_def',
47 false,
48 false,
49 ],
50 [
51 'content_models',
52 false,
53 false,
54 ],
55 [
56 'slot_roles',
57 false,
58 false,
59 ],
60 [
61 'change_tag_def',
62 'test7245',
63 'test7245',
64 ],
65 ];
66 }
67
68 /** @dataProvider provideTestGet */
69 public function testGet( $tableName, $wiki, $expectedWiki ) {
70 $services = MediaWikiServices::getInstance();
71 $db = wfGetDB( DB_MASTER );
72 if ( $wiki === false ) {
73 $wiki2 = $db->getWikiID();
74 } else {
75 $wiki2 = $wiki;
76 }
77 $names = new NameTableStoreFactory(
78 $this->getMockLoadBalancerFactory( $expectedWiki ),
79 $services->getMainWANObjectCache(),
80 LoggerFactory::getInstance( 'NameTableStoreFactory' )
81 );
82
83 $table = $names->get( $tableName, $wiki );
84 $table2 = $names->get( $tableName, $wiki2 );
85 $this->assertSame( $table, $table2 );
86 $this->assertInstanceOf( NameTableStore::class, $table );
87 }
88
89 /*
90 * The next three integration tests verify that the schema information is correct by loading
91 * the relevant information from the database.
92 */
93
94 public function testIntegratedGetChangeTagDef() {
95 $services = MediaWikiServices::getInstance();
96 $factory = $services->getNameTableStoreFactory();
97 $store = $factory->getChangeTagDef();
98 $this->assertType( 'array', $store->getMap() );
99 }
100
101 public function testIntegratedGetContentModels() {
102 $services = MediaWikiServices::getInstance();
103 $factory = $services->getNameTableStoreFactory();
104 $store = $factory->getContentModels();
105 $this->assertType( 'array', $store->getMap() );
106 }
107
108 public function testIntegratedGetSlotRoles() {
109 $services = MediaWikiServices::getInstance();
110 $factory = $services->getNameTableStoreFactory();
111 $store = $factory->getSlotRoles();
112 $this->assertType( 'array', $store->getMap() );
113 }
114 }