wiki.techinc.nl/tests/phpunit/includes/UserTest.php

186 lines
5.9 KiB
PHP
Raw Normal View History

<?php
define( 'NS_UNITTEST', 5600 );
define( 'NS_UNITTEST_TALK', 5601 );
/**
* @group Database
*/
class UserTest extends MediaWikiTestCase {
protected $savedGroupPermissions, $savedRevokedPermissions;
protected $user;
2011-10-11 10:02:50 +00:00
public function setUp() {
parent::setUp();
2011-10-11 10:02:50 +00:00
$this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
$this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
2011-10-11 10:02:50 +00:00
$this->setUpPermissionGlobals();
$this->setUpUser();
}
private function setUpPermissionGlobals() {
global $wgGroupPermissions, $wgRevokePermissions;
2011-10-11 10:02:50 +00:00
# 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,
);
2011-10-11 10:02:50 +00:00
# Data for namespace based $wgGroupPermissions test
$wgGroupPermissions['unittesters']['writedocumentation'] = array(
NS_MAIN => false, NS_UNITTEST => true,
);
$wgGroupPermissions['testwriters']['writedocumentation'] = true;
2011-10-11 10:02:50 +00:00
}
private function setUpUser() {
$this->user = new User;
$this->user->addGroup( 'unittesters' );
}
2011-10-11 10:02:50 +00:00
public function tearDown() {
parent::tearDown();
2011-10-11 10:02:50 +00:00
$GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions;
$GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions;
}
2011-10-11 10:02:50 +00:00
public function testGroupPermissions() {
$rights = User::getGroupPermissions( array( 'unittesters' ) );
$this->assertContains( 'runtest', $rights );
$this->assertNotContains( 'writetest', $rights );
$this->assertNotContains( 'modifytest', $rights );
$this->assertNotContains( 'nukeworld', $rights );
2011-10-11 10:02:50 +00:00
$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 );
2011-10-11 10:02:50 +00:00
$this->assertNotContains( 'nukeworld', $rights );
}
2011-10-11 10:02:50 +00:00
public function testNamespaceGroupPermissions() {
$rights = User::getGroupPermissions( array( 'unittesters' ) );
$this->assertNotContains( 'writedocumentation', $rights );
2011-10-11 10:02:50 +00:00
$rights = User::getGroupPermissions( array( 'unittesters' ) , NS_MAIN );
$this->assertNotContains( 'writedocumentation', $rights );
$this->assertNotContains( 'modifytest', $rights );
2011-10-11 10:02:50 +00:00
$rights = User::getGroupPermissions( array( 'unittesters' ), NS_HELP );
$this->assertNotContains( 'writedocumentation', $rights );
$this->assertNotContains( 'modifytest', $rights );
2011-10-11 10:02:50 +00:00
$rights = User::getGroupPermissions( array( 'unittesters' ), NS_UNITTEST );
$this->assertContains( 'writedocumentation', $rights );
2011-10-11 10:02:50 +00:00
$rights = User::getGroupPermissions(
array( 'unittesters', 'testwriters' ), NS_MAIN );
$this->assertContains( 'writedocumentation', $rights );
}
2011-10-11 10:02:50 +00:00
public function testUserPermissions() {
$rights = $this->user->getRights();
$this->assertContains( 'runtest', $rights );
$this->assertNotContains( 'writetest', $rights );
$this->assertNotContains( 'modifytest', $rights );
$this->assertNotContains( 'nukeworld', $rights );
2011-10-11 10:02:50 +00:00
$this->assertNotContains( 'writedocumentation', $rights );
$rights = $this->user->getRights( NS_MAIN );
$this->assertNotContains( 'writedocumentation', $rights );
$this->assertNotContains( 'modifytest', $rights );
2011-10-11 10:02:50 +00:00
$rights = $this->user->getRights( NS_HELP );
$this->assertNotContains( 'writedocumentation', $rights );
$this->assertNotContains( 'modifytest', $rights );
2011-10-11 10:02:50 +00:00
$rights = $this->user->getRights( NS_UNITTEST );
$this->assertContains( 'writedocumentation', $rights );
}
2011-10-11 10:02:50 +00:00
/**
* @dataProvider provideGetGroupsWithPermission
*/
public function testGetGroupsWithPermission( $expected, $right, $ns ) {
$result = User::getGroupsWithPermission( $right, $ns );
sort( $result );
sort( $expected );
2011-10-11 10:02:50 +00:00
$this->assertEquals( $expected, $result, "Groups with permission $right" .
( is_null( $ns ) ? '' : "in namespace $ns" ) );
}
public function provideGetGroupsWithPermission() {
return array(
2011-10-11 10:02:50 +00:00
array(
array( 'unittesters', 'testwriters' ),
'test',
null
2011-10-11 10:02:50 +00:00
),
array(
array( 'unittesters' ),
'runtest',
null
),
2011-10-11 10:02:50 +00:00
array(
array( 'testwriters' ),
'writetest',
null
),
2011-10-11 10:02:50 +00:00
array(
array( 'testwriters' ),
'modifytest',
null
),
2011-10-11 10:02:50 +00:00
array(
array( 'testwriters' ),
'writedocumentation',
NS_MAIN
),
2011-10-11 10:02:50 +00:00
array(
array( 'unittesters', 'testwriters' ),
'writedocumentation',
NS_UNITTEST
2011-10-11 10:02:50 +00:00
),
);
}
public function testIsValidUserName() {
$this->assertFalse( $this->user->isValidUserName( '' ) );
$this->assertFalse( $this->user->isValidUserName( ' ' ) );
$this->assertFalse( $this->user->isValidUserName( 'abcd' ) );
$this->assertFalse( $this->user->isValidUserName( 'Ab/cd' ) );
$this->assertTrue( $this->user->isValidUserName( 'Ab cd' ) ); // Whitespace
$this->assertFalse( $this->user->isValidUserName( '192.168.1.1' ) ); // IP
$this->assertFalse( $this->user->isValidUserName( 'User:Abcd' ) ); // Reserved Namespace
$this->assertTrue( $this->user->isValidUserName( '12abcd232' ) );
$this->assertTrue( $this->user->isValidUserName( '12abcd.232' ) );
$this->assertTrue( $this->user->isValidUserName( '?abcd' ) );
$this->assertFalse( $this->user->isValidUserName( '#abcd' ) );
$this->assertTrue( $this->user->isValidUserName( 'Abcdകഖഗഘ' ) ); // Mixed scripts
$this->assertFalse( $this->user->isValidUserName( 'ജോസ്‌തോമസ്' ) ); // ZWNJ
$this->assertFalse( $this->user->isValidUserName( 'Ab cd' ) ); // Ideographic space
}
}