2011-07-11 18:36:29 +00:00
|
|
|
|
<?php
|
|
|
|
|
|
|
2011-07-16 16:09:00 +00:00
|
|
|
|
define( 'NS_UNITTEST', 5600 );
|
|
|
|
|
|
define( 'NS_UNITTEST_TALK', 5601 );
|
|
|
|
|
|
|
2011-07-19 21:41:25 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* @group Database
|
|
|
|
|
|
*/
|
2011-07-11 18:36:29 +00:00
|
|
|
|
class UserTest extends MediaWikiTestCase {
|
|
|
|
|
|
protected $savedGroupPermissions, $savedRevokedPermissions;
|
2011-07-16 16:09:00 +00:00
|
|
|
|
protected $user;
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
public function setUp() {
|
|
|
|
|
|
parent::setUp();
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
|
|
|
|
|
|
$this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$this->setUpPermissionGlobals();
|
2011-07-16 16:09:00 +00:00
|
|
|
|
$this->setUpUser();
|
2011-07-11 18:36:29 +00:00
|
|
|
|
}
|
|
|
|
|
|
private function setUpPermissionGlobals() {
|
|
|
|
|
|
global $wgGroupPermissions, $wgRevokePermissions;
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-16 16:09:00 +00:00
|
|
|
|
# Data for regular $wgGroupPermissions test
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$wgGroupPermissions['unittesters'] = array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
'test' => true,
|
2011-07-11 18:36:29 +00:00
|
|
|
|
'runtest' => true,
|
|
|
|
|
|
'writetest' => false,
|
|
|
|
|
|
'nukeworld' => false,
|
|
|
|
|
|
);
|
|
|
|
|
|
$wgGroupPermissions['testwriters'] = array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
'test' => true,
|
2011-07-11 18:36:29 +00:00
|
|
|
|
'writetest' => true,
|
|
|
|
|
|
'modifytest' => true,
|
|
|
|
|
|
);
|
2011-07-16 16:09:00 +00:00
|
|
|
|
# Data for regular $wgRevokePermissions test
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$wgRevokePermissions['formertesters'] = array(
|
|
|
|
|
|
'runtest' => true,
|
|
|
|
|
|
);
|
2011-07-16 16:09:00 +00:00
|
|
|
|
}
|
|
|
|
|
|
private function setUpUser() {
|
|
|
|
|
|
$this->user = new User;
|
|
|
|
|
|
$this->user->addGroup( 'unittesters' );
|
2011-07-11 18:36:29 +00:00
|
|
|
|
}
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
public function tearDown() {
|
2011-07-11 18:38:26 +00:00
|
|
|
|
parent::tearDown();
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions;
|
|
|
|
|
|
$GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions;
|
|
|
|
|
|
}
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
public function testGroupPermissions() {
|
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ) );
|
|
|
|
|
|
$this->assertContains( 'runtest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'writetest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters', 'testwriters' ) );
|
|
|
|
|
|
$this->assertContains( 'runtest', $rights );
|
|
|
|
|
|
$this->assertContains( 'writetest', $rights );
|
|
|
|
|
|
$this->assertContains( 'modifytest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
|
|
|
|
|
}
|
|
|
|
|
|
public function testRevokePermissions() {
|
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters', 'formertesters' ) );
|
|
|
|
|
|
$this->assertNotContains( 'runtest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'writetest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
2011-10-11 10:02:50 +00:00
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
2011-07-11 18:36:29 +00:00
|
|
|
|
}
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-16 16:09:00 +00:00
|
|
|
|
public function testUserPermissions() {
|
|
|
|
|
|
$rights = $this->user->getRights();
|
|
|
|
|
|
$this->assertContains( 'runtest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'writetest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
|
|
|
|
|
}
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-07-16 16:09:00 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* @dataProvider provideGetGroupsWithPermission
|
|
|
|
|
|
*/
|
2011-12-12 06:03:01 +00:00
|
|
|
|
public function testGetGroupsWithPermission( $expected, $right ) {
|
|
|
|
|
|
$result = User::getGroupsWithPermission( $right );
|
2011-07-16 16:09:00 +00:00
|
|
|
|
sort( $result );
|
|
|
|
|
|
sort( $expected );
|
2011-10-11 10:02:50 +00:00
|
|
|
|
|
2011-12-12 06:03:01 +00:00
|
|
|
|
$this->assertEquals( $expected, $result, "Groups with permission $right" );
|
2011-07-16 16:09:00 +00:00
|
|
|
|
}
|
|
|
|
|
|
public function provideGetGroupsWithPermission() {
|
|
|
|
|
|
return array(
|
2011-10-11 10:02:50 +00:00
|
|
|
|
array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
array( 'unittesters', 'testwriters' ),
|
2011-12-12 06:03:01 +00:00
|
|
|
|
'test'
|
2011-10-11 10:02:50 +00:00
|
|
|
|
),
|
|
|
|
|
|
array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
array( 'unittesters' ),
|
2011-12-12 06:03:01 +00:00
|
|
|
|
'runtest'
|
2011-07-16 16:09:00 +00:00
|
|
|
|
),
|
2011-10-11 10:02:50 +00:00
|
|
|
|
array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
array( 'testwriters' ),
|
2011-12-12 06:03:01 +00:00
|
|
|
|
'writetest'
|
2011-07-16 16:09:00 +00:00
|
|
|
|
),
|
2011-10-11 10:02:50 +00:00
|
|
|
|
array(
|
2011-07-16 16:09:00 +00:00
|
|
|
|
array( 'testwriters' ),
|
2011-12-12 06:03:01 +00:00
|
|
|
|
'modifytest'
|
2011-10-11 10:02:50 +00:00
|
|
|
|
),
|
2011-07-16 16:09:00 +00:00
|
|
|
|
);
|
|
|
|
|
|
}
|
2011-10-11 09:17:36 +00:00
|
|
|
|
|
2011-10-11 10:25:58 +00:00
|
|
|
|
/**
|
|
|
|
|
|
* @dataProvider provideUserNames
|
|
|
|
|
|
*/
|
|
|
|
|
|
public function testIsValidUserName( $username, $result, $message ) {
|
|
|
|
|
|
$this->assertEquals( $this->user->isValidUserName( $username ), $result, $message );
|
2011-10-11 09:17:36 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2011-10-11 10:25:58 +00:00
|
|
|
|
public function provideUserNames() {
|
|
|
|
|
|
return array(
|
|
|
|
|
|
array( '', false, 'Empty string' ),
|
|
|
|
|
|
array( ' ', false, 'Blank space' ),
|
|
|
|
|
|
array( 'abcd', false, 'Starts with small letter' ),
|
|
|
|
|
|
array( 'Ab/cd', false, 'Contains slash' ),
|
|
|
|
|
|
array( 'Ab cd' , true, 'Whitespace' ),
|
|
|
|
|
|
array( '192.168.1.1', false, 'IP' ),
|
|
|
|
|
|
array( 'User:Abcd', false, 'Reserved Namespace' ),
|
|
|
|
|
|
array( '12abcd232' , true , 'Starts with Numbers' ),
|
|
|
|
|
|
array( '?abcd' , true, 'Start with ? mark' ),
|
|
|
|
|
|
array( '#abcd', false, 'Start with #' ),
|
|
|
|
|
|
array( 'Abcdകഖഗഘ', true, ' Mixed scripts' ),
|
|
|
|
|
|
array( 'ജോസ്തോമസ്', false, 'ZWNJ- Format control character' ),
|
|
|
|
|
|
array( 'Ab cd', false, ' Ideographic space' ),
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
2011-07-19 21:41:25 +00:00
|
|
|
|
}
|