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