New test case, which checked, if for all available rights a right- message exist (Core and Extensions) Some missing rights added with extra patch sets (need merge/rebasing before merge of this) Change-Id: I28957835fb77a01a799439ad7b3d22b96db07204
171 lines
4.8 KiB
PHP
171 lines
4.8 KiB
PHP
<?php
|
||
|
||
define( 'NS_UNITTEST', 5600 );
|
||
define( 'NS_UNITTEST_TALK', 5601 );
|
||
|
||
/**
|
||
* @group Database
|
||
*/
|
||
class UserTest extends MediaWikiTestCase {
|
||
protected $savedGroupPermissions, $savedRevokedPermissions;
|
||
|
||
/**
|
||
* @var User
|
||
*/
|
||
protected $user;
|
||
|
||
public function setUp() {
|
||
parent::setUp();
|
||
|
||
$this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
|
||
$this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
|
||
|
||
$this->setUpPermissionGlobals();
|
||
$this->setUpUser();
|
||
}
|
||
private function setUpPermissionGlobals() {
|
||
global $wgGroupPermissions, $wgRevokePermissions;
|
||
|
||
# Data for regular $wgGroupPermissions test
|
||
$wgGroupPermissions['unittesters'] = array(
|
||
'test' => true,
|
||
'runtest' => true,
|
||
'writetest' => false,
|
||
'nukeworld' => false,
|
||
);
|
||
$wgGroupPermissions['testwriters'] = array(
|
||
'test' => true,
|
||
'writetest' => true,
|
||
'modifytest' => true,
|
||
);
|
||
# Data for regular $wgRevokePermissions test
|
||
$wgRevokePermissions['formertesters'] = array(
|
||
'runtest' => true,
|
||
);
|
||
}
|
||
private function setUpUser() {
|
||
$this->user = new User;
|
||
$this->user->addGroup( 'unittesters' );
|
||
}
|
||
|
||
public function tearDown() {
|
||
parent::tearDown();
|
||
|
||
$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 );
|
||
}
|
||
|
||
public function testUserPermissions() {
|
||
$rights = $this->user->getRights();
|
||
$this->assertContains( 'runtest', $rights );
|
||
$this->assertNotContains( 'writetest', $rights );
|
||
$this->assertNotContains( 'modifytest', $rights );
|
||
$this->assertNotContains( 'nukeworld', $rights );
|
||
}
|
||
|
||
/**
|
||
* @dataProvider provideGetGroupsWithPermission
|
||
*/
|
||
public function testGetGroupsWithPermission( $expected, $right ) {
|
||
$result = User::getGroupsWithPermission( $right );
|
||
sort( $result );
|
||
sort( $expected );
|
||
|
||
$this->assertEquals( $expected, $result, "Groups with permission $right" );
|
||
}
|
||
|
||
public function provideGetGroupsWithPermission() {
|
||
return array(
|
||
array(
|
||
array( 'unittesters', 'testwriters' ),
|
||
'test'
|
||
),
|
||
array(
|
||
array( 'unittesters' ),
|
||
'runtest'
|
||
),
|
||
array(
|
||
array( 'testwriters' ),
|
||
'writetest'
|
||
),
|
||
array(
|
||
array( 'testwriters' ),
|
||
'modifytest'
|
||
),
|
||
);
|
||
}
|
||
|
||
/**
|
||
* @dataProvider provideUserNames
|
||
*/
|
||
public function testIsValidUserName( $username, $result, $message ) {
|
||
$this->assertEquals( $this->user->isValidUserName( $username ), $result, $message );
|
||
}
|
||
|
||
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' ),
|
||
);
|
||
}
|
||
|
||
/**
|
||
* Test, if for all rights a right- message exist,
|
||
* which is used on Special:ListGroupRights as help text
|
||
* Extensions and core
|
||
*/
|
||
public function testAllRightsWithMessage() {
|
||
//Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
|
||
$allRights = User::getAllRights();
|
||
$allMessageKeys = Language::getMessageKeysFor( 'en' );
|
||
|
||
$rightsWithMessage = array();
|
||
foreach ( $allMessageKeys as $message ) {
|
||
// === 0: must be at beginning of string (position 0)
|
||
if ( strpos( $message, 'right-' ) === 0 ) {
|
||
$rightsWithMessage[] = substr( $message, strlen( 'right-' ) );
|
||
}
|
||
}
|
||
|
||
sort( $allRights );
|
||
sort( $rightsWithMessage );
|
||
|
||
$this->assertEquals(
|
||
$allRights,
|
||
$rightsWithMessage,
|
||
'Each user rights (core/extensions) has a corresponding right- message.'
|
||
);
|
||
}
|
||
}
|