aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/UserTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/phpunit/includes/UserTest.php')
-rw-r--r--tests/phpunit/includes/UserTest.php108
1 files changed, 107 insertions, 1 deletions
diff --git a/tests/phpunit/includes/UserTest.php b/tests/phpunit/includes/UserTest.php
index df91aca897ad..6fa730ebea50 100644
--- a/tests/phpunit/includes/UserTest.php
+++ b/tests/phpunit/includes/UserTest.php
@@ -1,7 +1,11 @@
<?php
+define( 'NS_UNITTEST', 5600 );
+define( 'NS_UNITTEST_TALK', 5601 );
+
class UserTest extends MediaWikiTestCase {
protected $savedGroupPermissions, $savedRevokedPermissions;
+ protected $user;
public function setUp() {
parent::setUp();
@@ -10,24 +14,40 @@ class UserTest extends MediaWikiTestCase {
$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,
);
+
+ # 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' );
}
+
public function tearDown() {
parent::tearDown();
@@ -55,4 +75,90 @@ class UserTest extends MediaWikiTestCase {
$this->assertNotContains( 'modifytest', $rights );
$this->assertNotContains( 'nukeworld', $rights );
}
+
+ 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
+ ),
+ );
+ }
} \ No newline at end of file