NameTableStoreFactoryTest.php 2.9 KB

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