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-07-11 18:36:29 +00:00
|
|
|
|
|
|
|
|
public function setUp() {
|
|
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
|
|
$this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
|
|
|
|
|
$this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
|
|
|
|
|
|
|
|
|
|
$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-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
|
|
|
|
|
|
|
|
# Data for namespace based $wgGroupPermissions test
|
|
|
|
|
$wgGroupPermissions['unittesters']['writedocumentation'] = array(
|
|
|
|
|
NS_MAIN => false, NS_UNITTEST => true,
|
|
|
|
|
);
|
|
|
|
|
$wgGroupPermissions['testwriters']['writedocumentation'] = true;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private function setUpUser() {
|
|
|
|
|
$this->user = new User;
|
|
|
|
|
$this->user->addGroup( 'unittesters' );
|
2011-07-11 18:36:29 +00:00
|
|
|
}
|
2011-07-16 16:09:00 +00:00
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
public function tearDown() {
|
2011-07-11 18:38:26 +00:00
|
|
|
parent::tearDown();
|
|
|
|
|
|
2011-07-11 18:36:29 +00:00
|
|
|
$GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions;
|
|
|
|
|
$GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testGroupPermissions() {
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ) );
|
|
|
|
|
$this->assertContains( 'runtest', $rights );
|
|
|
|
|
$this->assertNotContains( 'writetest', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
|
|
|
|
|
|
|
|
|
$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 );
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
|
|
|
|
}
|
2011-07-16 16:09:00 +00:00
|
|
|
|
|
|
|
|
public function testNamespaceGroupPermissions() {
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ) );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ) , NS_MAIN );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ), NS_HELP );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = User::getGroupPermissions( array( 'unittesters' ), NS_UNITTEST );
|
|
|
|
|
$this->assertContains( 'writedocumentation', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = User::getGroupPermissions(
|
|
|
|
|
array( 'unittesters', 'testwriters' ), NS_MAIN );
|
|
|
|
|
$this->assertContains( 'writedocumentation', $rights );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testUserPermissions() {
|
|
|
|
|
$rights = $this->user->getRights();
|
|
|
|
|
$this->assertContains( 'runtest', $rights );
|
|
|
|
|
$this->assertNotContains( 'writetest', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
$this->assertNotContains( 'nukeworld', $rights );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = $this->user->getRights( NS_MAIN );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = $this->user->getRights( NS_HELP );
|
|
|
|
|
$this->assertNotContains( 'writedocumentation', $rights );
|
|
|
|
|
$this->assertNotContains( 'modifytest', $rights );
|
|
|
|
|
|
|
|
|
|
$rights = $this->user->getRights( NS_UNITTEST );
|
|
|
|
|
$this->assertContains( 'writedocumentation', $rights );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideGetGroupsWithPermission
|
|
|
|
|
*/
|
|
|
|
|
public function testGetGroupsWithPermission( $expected, $right, $ns ) {
|
|
|
|
|
$result = User::getGroupsWithPermission( $right, $ns );
|
|
|
|
|
sort( $result );
|
|
|
|
|
sort( $expected );
|
|
|
|
|
|
|
|
|
|
$this->assertEquals( $expected, $result, "Groups with permission $right" .
|
|
|
|
|
( is_null( $ns ) ? '' : "in namespace $ns" ) );
|
|
|
|
|
}
|
|
|
|
|
public function provideGetGroupsWithPermission() {
|
|
|
|
|
return array(
|
|
|
|
|
array(
|
|
|
|
|
array( 'unittesters', 'testwriters' ),
|
|
|
|
|
'test',
|
|
|
|
|
null
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
array( 'unittesters' ),
|
|
|
|
|
'runtest',
|
|
|
|
|
null
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
array( 'testwriters' ),
|
|
|
|
|
'writetest',
|
|
|
|
|
null
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
array( 'testwriters' ),
|
|
|
|
|
'modifytest',
|
|
|
|
|
null
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
array( 'testwriters' ),
|
|
|
|
|
'writedocumentation',
|
|
|
|
|
NS_MAIN
|
|
|
|
|
),
|
|
|
|
|
array(
|
|
|
|
|
array( 'unittesters', 'testwriters' ),
|
|
|
|
|
'writedocumentation',
|
|
|
|
|
NS_UNITTEST
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
2011-07-19 21:41:25 +00:00
|
|
|
}
|