diff options
Diffstat (limited to 'tests/phpunit/includes/UserTest.php')
-rw-r--r-- | tests/phpunit/includes/UserTest.php | 108 |
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 |