2021-01-22 19:51:43 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace MediaWiki\Tests\User;
|
|
|
|
|
|
|
|
|
|
use MediaWiki\Config\ServiceOptions;
|
2022-08-17 20:33:06 +00:00
|
|
|
use MediaWiki\MainConfigNames;
|
2021-01-22 19:51:43 +00:00
|
|
|
use MediaWiki\User\ActorNormalization;
|
|
|
|
|
use MediaWiki\User\ActorStore;
|
|
|
|
|
use MediaWiki\User\ActorStoreFactory;
|
|
|
|
|
use MediaWiki\User\UserIdentityLookup;
|
|
|
|
|
use MediaWiki\User\UserNameUtils;
|
|
|
|
|
use MediaWikiUnitTestCase;
|
|
|
|
|
use PHPUnit\Framework\MockObject\MockObject;
|
|
|
|
|
use Psr\Log\NullLogger;
|
|
|
|
|
use Wikimedia\Rdbms\ILBFactory;
|
|
|
|
|
use Wikimedia\Rdbms\ILoadBalancer;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers \MediaWiki\User\ActorStoreFactory
|
|
|
|
|
* @covers \MediaWiki\User\ActorStore
|
|
|
|
|
* @package MediaWiki\Tests\User
|
|
|
|
|
*/
|
|
|
|
|
class ActorStoreFactoryTest extends MediaWikiUnitTestCase {
|
|
|
|
|
|
|
|
|
|
public function provideGetActorStore() {
|
|
|
|
|
yield 'local, no shared' => [
|
|
|
|
|
false, // $domain,
|
|
|
|
|
[
|
2022-08-17 20:33:06 +00:00
|
|
|
MainConfigNames::SharedDB => false,
|
|
|
|
|
MainConfigNames::SharedTables => false
|
2021-01-22 19:51:43 +00:00
|
|
|
], // $config
|
|
|
|
|
false, // $expectedDomain
|
|
|
|
|
];
|
|
|
|
|
yield 'foreign, no shared' => [
|
|
|
|
|
'acmewiki', // $domain,
|
|
|
|
|
[
|
2022-08-17 20:33:06 +00:00
|
|
|
MainConfigNames::SharedDB => false,
|
|
|
|
|
MainConfigNames::SharedTables => false
|
2021-01-22 19:51:43 +00:00
|
|
|
], //
|
|
|
|
|
'acmewiki', // $expectedDomain
|
|
|
|
|
];
|
|
|
|
|
yield 'local, shared' => [
|
|
|
|
|
false, // $domain,
|
|
|
|
|
[
|
2022-08-17 20:33:06 +00:00
|
|
|
MainConfigNames::SharedDB => [ 'sharedwiki' ],
|
|
|
|
|
MainConfigNames::SharedTables => [ 'user', 'actor' ]
|
2021-01-22 19:51:43 +00:00
|
|
|
], // $config
|
|
|
|
|
false, // $expectedDomain
|
|
|
|
|
];
|
|
|
|
|
yield 'foreign, shared' => [
|
|
|
|
|
'acmewiki', // $domain,
|
|
|
|
|
[
|
2022-08-17 20:33:06 +00:00
|
|
|
MainConfigNames::SharedDB => [ 'sharedwiki' ],
|
|
|
|
|
MainConfigNames::SharedTables => [ 'user', 'actor' ]
|
2021-01-22 19:51:43 +00:00
|
|
|
], // $config
|
|
|
|
|
false, // $expectedDomain
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideGetActorStore
|
|
|
|
|
*/
|
|
|
|
|
public function testGetActorStore( $domain, array $config, $expectedDomain ) {
|
|
|
|
|
$factory = new ActorStoreFactory(
|
|
|
|
|
new ServiceOptions( ActorStoreFactory::CONSTRUCTOR_OPTIONS, $config ),
|
|
|
|
|
$this->getMockLoadBalancerFactory( $expectedDomain ),
|
|
|
|
|
$this->createNoOpMock( UserNameUtils::class ),
|
|
|
|
|
new NullLogger()
|
|
|
|
|
);
|
|
|
|
|
$notFromCache = $factory->getActorStore( $domain );
|
|
|
|
|
$this->assertInstanceOf( ActorStore::class, $notFromCache );
|
|
|
|
|
$this->assertSame( $notFromCache, $factory->getActorStore( $domain ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideGetActorStore
|
|
|
|
|
*/
|
|
|
|
|
public function testGetActorNormalization( $domain, array $config, $expectedDomain ) {
|
|
|
|
|
$factory = new ActorStoreFactory(
|
|
|
|
|
new ServiceOptions( ActorStoreFactory::CONSTRUCTOR_OPTIONS, $config ),
|
|
|
|
|
$this->getMockLoadBalancerFactory( $expectedDomain ),
|
|
|
|
|
$this->createNoOpMock( UserNameUtils::class ),
|
|
|
|
|
new NullLogger()
|
|
|
|
|
);
|
|
|
|
|
$notFromCache = $factory->getActorNormalization( $domain );
|
|
|
|
|
$this->assertInstanceOf( ActorNormalization::class, $notFromCache );
|
|
|
|
|
$this->assertSame( $notFromCache, $factory->getActorNormalization( $domain ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideGetActorStore
|
|
|
|
|
*/
|
|
|
|
|
public function testGetUserIdentityLookup( $domain, array $config, $expectedDomain ) {
|
|
|
|
|
$factory = new ActorStoreFactory(
|
|
|
|
|
new ServiceOptions( ActorStoreFactory::CONSTRUCTOR_OPTIONS, $config ),
|
|
|
|
|
$this->getMockLoadBalancerFactory( $expectedDomain ),
|
|
|
|
|
$this->createNoOpMock( UserNameUtils::class ),
|
|
|
|
|
new NullLogger()
|
|
|
|
|
);
|
|
|
|
|
$notFromCache = $factory->getUserIdentityLookup( $domain );
|
|
|
|
|
$this->assertInstanceOf( UserIdentityLookup::class, $notFromCache );
|
|
|
|
|
$this->assertSame( $notFromCache, $factory->getUserIdentityLookup( $domain ) );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param string|false $expectDomain
|
|
|
|
|
* @return MockObject|ILBFactory
|
|
|
|
|
*/
|
|
|
|
|
private function getMockLoadBalancerFactory( $expectDomain ) {
|
2022-07-14 12:42:07 +00:00
|
|
|
$mock = $this->createMock( ILBFactory::class );
|
2021-01-22 19:51:43 +00:00
|
|
|
|
|
|
|
|
$mock->method( 'getMainLB' )
|
|
|
|
|
->willReturnCallback( function ( $domain ) use ( $expectDomain ) {
|
|
|
|
|
$this->assertSame( $expectDomain, $domain );
|
2022-07-14 12:42:07 +00:00
|
|
|
return $this->createMock( ILoadBalancer::class );
|
2021-01-22 19:51:43 +00:00
|
|
|
} );
|
|
|
|
|
|
|
|
|
|
return $mock;
|
|
|
|
|
}
|
|
|
|
|
}
|