diff options
Diffstat (limited to 'www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php')
-rw-r--r-- | www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php b/www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php new file mode 100644 index 00000000..c91d8e0c --- /dev/null +++ b/www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php @@ -0,0 +1,156 @@ +<?php + +/** + * @covers LocalIdLookup + * @group Database + */ +class LocalIdLookupTest extends MediaWikiTestCase { + private $localUsers = []; + + protected function setUp() { + global $wgGroupPermissions; + + parent::setUp(); + + $this->stashMwGlobals( [ 'wgGroupPermissions' ] ); + $wgGroupPermissions['local-id-lookup-test']['hideuser'] = true; + } + + public function addDBData() { + for ( $i = 1; $i <= 4; $i++ ) { + $this->localUsers[] = $this->getMutableTestUser()->getUser(); + } + + $sysop = static::getTestSysop()->getUser(); + + $block = new Block( [ + 'address' => $this->localUsers[2]->getName(), + 'by' => $sysop->getId(), + 'reason' => __METHOD__, + 'expiry' => '1 day', + 'hideName' => false, + ] ); + $block->insert(); + + $block = new Block( [ + 'address' => $this->localUsers[3]->getName(), + 'by' => $sysop->getId(), + 'reason' => __METHOD__, + 'expiry' => '1 day', + 'hideName' => true, + ] ); + $block->insert(); + } + + public function getLookupUser() { + return static::getTestUser( [ 'local-id-lookup-test' ] )->getUser(); + } + + public function testLookupCentralIds() { + $lookup = new LocalIdLookup(); + + $user1 = $this->getLookupUser(); + $user2 = User::newFromName( 'UTLocalIdLookup2' ); + + $this->assertTrue( $user1->isAllowed( 'hideuser' ), 'sanity check' ); + $this->assertFalse( $user2->isAllowed( 'hideuser' ), 'sanity check' ); + + $this->assertSame( [], $lookup->lookupCentralIds( [] ) ); + + $expect = []; + foreach ( $this->localUsers as $localUser ) { + $expect[$localUser->getId()] = $localUser->getName(); + } + $expect[12345] = 'X'; + ksort( $expect ); + + $expect2 = $expect; + $expect2[$this->localUsers[3]->getId()] = ''; + + $arg = array_fill_keys( array_keys( $expect ), 'X' ); + + $this->assertSame( $expect2, $lookup->lookupCentralIds( $arg ) ); + $this->assertSame( $expect, $lookup->lookupCentralIds( $arg, CentralIdLookup::AUDIENCE_RAW ) ); + $this->assertSame( $expect, $lookup->lookupCentralIds( $arg, $user1 ) ); + $this->assertSame( $expect2, $lookup->lookupCentralIds( $arg, $user2 ) ); + } + + public function testLookupUserNames() { + $lookup = new LocalIdLookup(); + $user1 = $this->getLookupUser(); + $user2 = User::newFromName( 'UTLocalIdLookup2' ); + + $this->assertTrue( $user1->isAllowed( 'hideuser' ), 'sanity check' ); + $this->assertFalse( $user2->isAllowed( 'hideuser' ), 'sanity check' ); + + $this->assertSame( [], $lookup->lookupUserNames( [] ) ); + + $expect = []; + foreach ( $this->localUsers as $localUser ) { + $expect[$localUser->getName()] = $localUser->getId(); + } + $expect['UTDoesNotExist'] = 'X'; + ksort( $expect ); + + $expect2 = $expect; + $expect2[$this->localUsers[3]->getName()] = 'X'; + + $arg = array_fill_keys( array_keys( $expect ), 'X' ); + + $this->assertSame( $expect2, $lookup->lookupUserNames( $arg ) ); + $this->assertSame( $expect, $lookup->lookupUserNames( $arg, CentralIdLookup::AUDIENCE_RAW ) ); + $this->assertSame( $expect, $lookup->lookupUserNames( $arg, $user1 ) ); + $this->assertSame( $expect2, $lookup->lookupUserNames( $arg, $user2 ) ); + } + + public function testIsAttached() { + $lookup = new LocalIdLookup(); + $user1 = $this->getLookupUser(); + $user2 = User::newFromName( 'DoesNotExist' ); + + $this->assertTrue( $lookup->isAttached( $user1 ) ); + $this->assertFalse( $lookup->isAttached( $user2 ) ); + + $wiki = wfWikiID(); + $this->assertTrue( $lookup->isAttached( $user1, $wiki ) ); + $this->assertFalse( $lookup->isAttached( $user2, $wiki ) ); + + $wiki = 'not-' . wfWikiID(); + $this->assertFalse( $lookup->isAttached( $user1, $wiki ) ); + $this->assertFalse( $lookup->isAttached( $user2, $wiki ) ); + } + + /** + * @dataProvider provideIsAttachedShared + * @param bool $sharedDB $wgSharedDB is set + * @param bool $sharedTable $wgSharedTables contains 'user' + * @param bool $localDBSet $wgLocalDatabases contains the shared DB + */ + public function testIsAttachedShared( $sharedDB, $sharedTable, $localDBSet ) { + global $wgDBName; + $this->setMwGlobals( [ + 'wgSharedDB' => $sharedDB ? $wgDBName : null, + 'wgSharedTables' => $sharedTable ? [ 'user' ] : [], + 'wgLocalDatabases' => $localDBSet ? [ 'shared' ] : [], + ] ); + + $lookup = new LocalIdLookup(); + $this->assertSame( + $sharedDB && $sharedTable && $localDBSet, + $lookup->isAttached( $this->getLookupUser(), 'shared' ) + ); + } + + public static function provideIsAttachedShared() { + $ret = []; + for ( $i = 0; $i < 7; $i++ ) { + $ret[] = [ + (bool)( $i & 1 ), + (bool)( $i & 2 ), + (bool)( $i & 4 ), + ]; + } + return $ret; + } + +} |