2015-11-12 23:21:19 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @covers LocalIdLookup
|
|
|
|
|
* @group Database
|
|
|
|
|
*/
|
|
|
|
|
class LocalIdLookupTest extends MediaWikiTestCase {
|
2016-02-17 09:09:32 +00:00
|
|
|
private $localUsers = [];
|
2015-11-12 23:21:19 +00:00
|
|
|
|
|
|
|
|
protected function setUp() {
|
|
|
|
|
global $wgGroupPermissions;
|
|
|
|
|
|
|
|
|
|
parent::setUp();
|
|
|
|
|
|
2016-02-17 09:09:32 +00:00
|
|
|
$this->stashMwGlobals( [ 'wgGroupPermissions' ] );
|
2015-11-12 23:21:19 +00:00
|
|
|
$wgGroupPermissions['local-id-lookup-test']['hideuser'] = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function addDBData() {
|
|
|
|
|
for ( $i = 1; $i <= 4; $i++ ) {
|
|
|
|
|
$user = User::newFromName( "UTLocalIdLookup$i" );
|
|
|
|
|
if ( $user->getId() == 0 ) {
|
|
|
|
|
$user->addToDatabase();
|
|
|
|
|
}
|
|
|
|
|
$this->localUsers["UTLocalIdLookup$i"] = $user->getId();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
User::newFromName( 'UTLocalIdLookup1' )->addGroup( 'local-id-lookup-test' );
|
|
|
|
|
|
2016-02-17 09:09:32 +00:00
|
|
|
$block = new Block( [
|
2015-11-12 23:21:19 +00:00
|
|
|
'address' => 'UTLocalIdLookup3',
|
|
|
|
|
'by' => User::idFromName( 'UTSysop' ),
|
|
|
|
|
'reason' => __METHOD__,
|
|
|
|
|
'expiry' => '1 day',
|
|
|
|
|
'hideName' => false,
|
2016-02-17 09:09:32 +00:00
|
|
|
] );
|
2015-11-12 23:21:19 +00:00
|
|
|
$block->insert();
|
|
|
|
|
|
2016-02-17 09:09:32 +00:00
|
|
|
$block = new Block( [
|
2015-11-12 23:21:19 +00:00
|
|
|
'address' => 'UTLocalIdLookup4',
|
|
|
|
|
'by' => User::idFromName( 'UTSysop' ),
|
|
|
|
|
'reason' => __METHOD__,
|
|
|
|
|
'expiry' => '1 day',
|
|
|
|
|
'hideName' => true,
|
2016-02-17 09:09:32 +00:00
|
|
|
] );
|
2015-11-12 23:21:19 +00:00
|
|
|
$block->insert();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testLookupCentralIds() {
|
|
|
|
|
$lookup = new LocalIdLookup();
|
|
|
|
|
$user1 = User::newFromName( 'UTLocalIdLookup1' );
|
|
|
|
|
$user2 = User::newFromName( 'UTLocalIdLookup2' );
|
|
|
|
|
|
|
|
|
|
$this->assertTrue( $user1->isAllowed( 'hideuser' ), 'sanity check' );
|
|
|
|
|
$this->assertFalse( $user2->isAllowed( 'hideuser' ), 'sanity check' );
|
|
|
|
|
|
2016-02-17 09:09:32 +00:00
|
|
|
$this->assertSame( [], $lookup->lookupCentralIds( [] ) );
|
2015-11-12 23:21:19 +00:00
|
|
|
|
|
|
|
|
$expect = array_flip( $this->localUsers );
|
|
|
|
|
$expect[123] = 'X';
|
|
|
|
|
ksort( $expect );
|
|
|
|
|
|
|
|
|
|
$expect2 = $expect;
|
|
|
|
|
$expect2[$this->localUsers['UTLocalIdLookup4']] = '';
|
|
|
|
|
|
|
|
|
|
$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 = User::newFromName( 'UTLocalIdLookup1' );
|
|
|
|
|
$user2 = User::newFromName( 'UTLocalIdLookup2' );
|
|
|
|
|
|
|
|
|
|
$this->assertTrue( $user1->isAllowed( 'hideuser' ), 'sanity check' );
|
|
|
|
|
$this->assertFalse( $user2->isAllowed( 'hideuser' ), 'sanity check' );
|
|
|
|
|
|
2016-02-17 09:09:32 +00:00
|
|
|
$this->assertSame( [], $lookup->lookupUserNames( [] ) );
|
2015-11-12 23:21:19 +00:00
|
|
|
|
|
|
|
|
$expect = $this->localUsers;
|
|
|
|
|
$expect['UTDoesNotExist'] = 'X';
|
|
|
|
|
ksort( $expect );
|
|
|
|
|
|
|
|
|
|
$expect2 = $expect;
|
|
|
|
|
$expect2['UTLocalIdLookup4'] = '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 = User::newFromName( 'UTLocalIdLookup1' );
|
|
|
|
|
$user2 = User::newFromName( 'DoesNotExist' );
|
|
|
|
|
|
|
|
|
|
$this->assertTrue( $lookup->isAttached( $user1 ) );
|
|
|
|
|
$this->assertFalse( $lookup->isAttached( $user2 ) );
|
|
|
|
|
|
2016-03-18 13:55:54 +00:00
|
|
|
$wiki = wfWikiID();
|
2015-11-12 23:21:19 +00:00
|
|
|
$this->assertTrue( $lookup->isAttached( $user1, $wiki ) );
|
|
|
|
|
$this->assertFalse( $lookup->isAttached( $user2, $wiki ) );
|
|
|
|
|
|
2016-03-18 13:55:54 +00:00
|
|
|
$wiki = 'not-' . wfWikiID();
|
2015-11-12 23:21:19 +00:00
|
|
|
$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;
|
2016-02-17 09:09:32 +00:00
|
|
|
$this->setMwGlobals( [
|
2015-11-12 23:21:19 +00:00
|
|
|
'wgSharedDB' => $sharedDB ? $wgDBName : null,
|
2016-02-17 09:09:32 +00:00
|
|
|
'wgSharedTables' => $sharedTable ? [ 'user' ] : [],
|
|
|
|
|
'wgLocalDatabases' => $localDBSet ? [ 'shared' ] : [],
|
|
|
|
|
] );
|
2015-11-12 23:21:19 +00:00
|
|
|
|
|
|
|
|
$lookup = new LocalIdLookup();
|
|
|
|
|
$this->assertSame(
|
|
|
|
|
$sharedDB && $sharedTable && $localDBSet,
|
|
|
|
|
$lookup->isAttached( User::newFromName( 'UTLocalIdLookup1' ), 'shared' )
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static function provideIsAttachedShared() {
|
2016-02-17 09:09:32 +00:00
|
|
|
$ret = [];
|
2015-11-12 23:21:19 +00:00
|
|
|
for ( $i = 0; $i < 7; $i++ ) {
|
2016-02-17 09:09:32 +00:00
|
|
|
$ret[] = [
|
2015-11-12 23:21:19 +00:00
|
|
|
(bool)( $i & 1 ),
|
|
|
|
|
(bool)( $i & 2 ),
|
|
|
|
|
(bool)( $i & 4 ),
|
2016-02-17 09:09:32 +00:00
|
|
|
];
|
2015-11-12 23:21:19 +00:00
|
|
|
}
|
|
|
|
|
return $ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|