aboutsummaryrefslogtreecommitdiffstats
path: root/tests/phpunit/includes/UserTest.php
diff options
context:
space:
mode:
authorBryan Tong Minh <btongminh@users.mediawiki.org>2011-07-16 16:09:00 +0000
committerBryan Tong Minh <btongminh@users.mediawiki.org>2011-07-16 16:09:00 +0000
commit1fb5d73612b8137641bf3229c9a873323193cf97 (patch)
tree9dff54c11d1482e5dbdfa3ee0134291cc05c1acd /tests/phpunit/includes/UserTest.php
parent572328180cb42f4fafb9b0400bcec58ee151721a (diff)
downloadmediawikicore-1fb5d73612b8137641bf3229c9a873323193cf97.tar.gz
mediawikicore-1fb5d73612b8137641bf3229c9a873323193cf97.zip
First steps for bug 14801: add backend support for per-namespace permissions to core. This extends $wgGroupPermissions syntax from $wgGroupPermissions[$group][$right] = bool to $wgGroupPermissions[$group][$right] = array( NS_X => bool ). This is safely backwards compatible; the booleans are still fully supported, and any unset namespace will default to false.
* User::getRights(), User::isAllowed() and User::getGroupPermissions now optionally accept a namespace parameter. If not set, it will check whether the user has the right for all namespaces. * Anything that uses Title::getUserPermissionsErrorsInternal() automatically supports per-namespace permissions. This includes Title::getUserPermissionsErrors and Title::(quick)UserCan. * Fix tests that set User::mRights The next step would be to change all User::isAllowed() to Title::quickUserCan or pass the namespace to User::isAllowed().
Notes
Notes: http://mediawiki.org/wiki/Special:Code/MediaWiki/92364
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