summaryrefslogtreecommitdiff
path: root/www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php')
-rw-r--r--www/wiki/tests/phpunit/includes/user/LocalIdLookupTest.php156
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;
+ }
+
+}