1<?php 2 3namespace MediaWiki\Tests\Unit\Storage; 4 5use MediaWiki\Config\ServiceOptions; 6use MediaWiki\Storage\DerivedPageDataUpdater; 7use MediaWiki\Storage\PageUpdater; 8use MediaWiki\Storage\PageUpdaterFactory; 9use MediaWiki\Tests\Unit\MockServiceDependenciesTrait; 10use MediaWiki\User\UserIdentityValue; 11use MediaWikiUnitTestCase; 12use Wikimedia\Rdbms\LBFactory; 13use Wikimedia\Rdbms\LoadBalancer; 14use WikiPage; 15 16/** 17 * @covers \MediaWiki\Storage\PageUpdaterFactory 18 */ 19class PageUpdaterFactoryTest extends MediaWikiUnitTestCase { 20 use MockServiceDependenciesTrait; 21 22 private function getPageUpdaterFactory() { 23 $config = [ 24 'ArticleCountMethod' => null, 25 'RCWatchCategoryMembership' => null, 26 'PageCreationLog' => null, 27 'UseAutomaticEditSummaries' => null, 28 'ManualRevertSearchRadius' => null, 29 'UseRCPatrol' => null, 30 ]; 31 32 $lb = $this->createNoOpMock( LoadBalancer::class ); 33 $lbFactory = $this->createNoOpMock( LBFactory::class, [ 'getMainLB' ] ); 34 $lbFactory->method( 'getMainLB' )->willReturn( $lb ); 35 36 return $this->newServiceInstance( 37 PageUpdaterFactory::class, 38 [ 39 'loadbalancerFactory' => $lbFactory, 40 'options' => new ServiceOptions( 41 PageUpdaterFactory::CONSTRUCTOR_OPTIONS, 42 $config 43 ), 44 'softwareTags' => [], 45 ] 46 ); 47 } 48 49 public function testNewDerivedPageDataUpdater() { 50 $page = $this->createNoOpMock( WikiPage::class ); 51 52 $factory = $this->getPageUpdaterFactory(); 53 $derivedPageDataUpdater = $factory->newDerivedPageDataUpdater( $page ); 54 55 $this->assertInstanceOf( DerivedPageDataUpdater::class, $derivedPageDataUpdater ); 56 } 57 58 public function testNewPageUpdater() { 59 $page = $this->createNoOpMock( WikiPage::class, [ 'canExist' ] ); 60 $page->method( 'canExist' )->willReturn( true ); 61 62 $user = new UserIdentityValue( 0, 'Dummy' ); 63 64 $factory = $this->getPageUpdaterFactory(); 65 $pageUpdater = $factory->newPageUpdater( $page, $user ); 66 67 $this->assertInstanceOf( PageUpdater::class, $pageUpdater ); 68 } 69 70 public function testNewPageUpdaterForDerivedPageDataUpdater() { 71 $page = $this->createNoOpMock( WikiPage::class, [ 'canExist' ] ); 72 $page->method( 'canExist' )->willReturn( true ); 73 74 $user = new UserIdentityValue( 0, 'Dummy' ); 75 76 $factory = $this->getPageUpdaterFactory(); 77 $derivedPageDataUpdater = $factory->newDerivedPageDataUpdater( $page ); 78 $pageUpdater = $factory->newPageUpdaterForDerivedPageDataUpdater( 79 $page, 80 $user, 81 $derivedPageDataUpdater 82 ); 83 84 $this->assertInstanceOf( PageUpdater::class, $pageUpdater ); 85 } 86} 87