MediaWiki  REL1_21
UserTest.php
Go to the documentation of this file.
00001 <?php
00002 
00003 define( 'NS_UNITTEST', 5600 );
00004 define( 'NS_UNITTEST_TALK', 5601 );
00005 
00009 class UserTest extends MediaWikiTestCase {
00013         protected $user;
00014 
00015         protected function setUp() {
00016                 parent::setUp();
00017 
00018                 $this->setMwGlobals( array(
00019                         'wgGroupPermissions' => array(),
00020                         'wgRevokePermissions' => array(),
00021                 ) );
00022 
00023                 $this->setUpPermissionGlobals();
00024 
00025                 $this->user = new User;
00026                 $this->user->addGroup( 'unittesters' );
00027         }
00028 
00029         private function setUpPermissionGlobals() {
00030                 global $wgGroupPermissions, $wgRevokePermissions;
00031 
00032                 # Data for regular $wgGroupPermissions test
00033                 $wgGroupPermissions['unittesters'] = array(
00034                         'test' => true,
00035                         'runtest' => true,
00036                         'writetest' => false,
00037                         'nukeworld' => false,
00038                 );
00039                 $wgGroupPermissions['testwriters'] = array(
00040                         'test' => true,
00041                         'writetest' => true,
00042                         'modifytest' => true,
00043                 );
00044 
00045                 # Data for regular $wgRevokePermissions test
00046                 $wgRevokePermissions['formertesters'] = array(
00047                         'runtest' => true,
00048                 );
00049         }
00050 
00051         public function testGroupPermissions() {
00052                 $rights = User::getGroupPermissions( array( 'unittesters' ) );
00053                 $this->assertContains( 'runtest', $rights );
00054                 $this->assertNotContains( 'writetest', $rights );
00055                 $this->assertNotContains( 'modifytest', $rights );
00056                 $this->assertNotContains( 'nukeworld', $rights );
00057 
00058                 $rights = User::getGroupPermissions( array( 'unittesters', 'testwriters' ) );
00059                 $this->assertContains( 'runtest', $rights );
00060                 $this->assertContains( 'writetest', $rights );
00061                 $this->assertContains( 'modifytest', $rights );
00062                 $this->assertNotContains( 'nukeworld', $rights );
00063         }
00064 
00065         public function testRevokePermissions() {
00066                 $rights = User::getGroupPermissions( array( 'unittesters', 'formertesters' ) );
00067                 $this->assertNotContains( 'runtest', $rights );
00068                 $this->assertNotContains( 'writetest', $rights );
00069                 $this->assertNotContains( 'modifytest', $rights );
00070                 $this->assertNotContains( 'nukeworld', $rights );
00071         }
00072 
00073         public function testUserPermissions() {
00074                 $rights = $this->user->getRights();
00075                 $this->assertContains( 'runtest', $rights );
00076                 $this->assertNotContains( 'writetest', $rights );
00077                 $this->assertNotContains( 'modifytest', $rights );
00078                 $this->assertNotContains( 'nukeworld', $rights );
00079         }
00080 
00084         public function testGetGroupsWithPermission( $expected, $right ) {
00085                 $result = User::getGroupsWithPermission( $right );
00086                 sort( $result );
00087                 sort( $expected );
00088 
00089                 $this->assertEquals( $expected, $result, "Groups with permission $right" );
00090         }
00091 
00092         public static function provideGetGroupsWithPermission() {
00093                 return array(
00094                         array(
00095                                 array( 'unittesters', 'testwriters' ),
00096                                 'test'
00097                         ),
00098                         array(
00099                                 array( 'unittesters' ),
00100                                 'runtest'
00101                         ),
00102                         array(
00103                                 array( 'testwriters' ),
00104                                 'writetest'
00105                         ),
00106                         array(
00107                                 array( 'testwriters' ),
00108                                 'modifytest'
00109                         ),
00110                 );
00111         }
00112 
00116         public function testIsValidUserName( $username, $result, $message ) {
00117                 $this->assertEquals( $this->user->isValidUserName( $username ), $result, $message );
00118         }
00119 
00120         public static function provideUserNames() {
00121                 return array(
00122                         array( '', false, 'Empty string' ),
00123                         array( ' ', false, 'Blank space' ),
00124                         array( 'abcd', false, 'Starts with small letter' ),
00125                         array( 'Ab/cd', false, 'Contains slash' ),
00126                         array( 'Ab cd', true, 'Whitespace' ),
00127                         array( '192.168.1.1', false, 'IP' ),
00128                         array( 'User:Abcd', false, 'Reserved Namespace' ),
00129                         array( '12abcd232', true, 'Starts with Numbers' ),
00130                         array( '?abcd', true, 'Start with ? mark' ),
00131                         array( '#abcd', false, 'Start with #' ),
00132                         array( 'Abcdകഖഗഘ', true, ' Mixed scripts' ),
00133                         array( 'ജോസ്‌തോമസ്', false, 'ZWNJ- Format control character' ),
00134                         array( 'Ab cd', false, ' Ideographic space' ),
00135                 );
00136         }
00137 
00143         public function testAllRightsWithMessage() {
00144                 //Getting all user rights, for core: User::$mCoreRights, for extensions: $wgAvailableRights
00145                 $allRights = User::getAllRights();
00146                 $allMessageKeys = Language::getMessageKeysFor( 'en' );
00147 
00148                 $rightsWithMessage = array();
00149                 foreach ( $allMessageKeys as $message ) {
00150                         // === 0: must be at beginning of string (position 0)
00151                         if ( strpos( $message, 'right-' ) === 0 ) {
00152                                 $rightsWithMessage[] = substr( $message, strlen( 'right-' ) );
00153                         }
00154                 }
00155 
00156                 sort( $allRights );
00157                 sort( $rightsWithMessage );
00158 
00159                 $this->assertEquals(
00160                         $allRights,
00161                         $rightsWithMessage,
00162                         'Each user rights (core/extensions) has a corresponding right- message.'
00163                 );
00164         }
00165 
00170         public function testEditCount() {
00171                 $user = User::newFromName( 'UnitTestUser' );
00172                 $user->loadDefaults();
00173                 $user->addToDatabase();
00174 
00175                 // let the user have a few (3) edits
00176                 $page = WikiPage::factory( Title::newFromText( 'Help:UserTest_EditCount' ) );
00177                 for ( $i = 0; $i < 3; $i++ ) {
00178                         $page->doEdit( (string)$i, 'test', 0, false, $user );
00179                 }
00180 
00181                 $user->clearInstanceCache();
00182                 $this->assertEquals( 3, $user->getEditCount(), 'After three edits, the user edit count should be 3' );
00183 
00184                 // increase the edit count and clear the cache
00185                 $user->incEditCount();
00186 
00187                 $user->clearInstanceCache();
00188                 $this->assertEquals( 4, $user->getEditCount(), 'After increasing the edit count manually, the user edit count should be 4' );
00189         }
00190 
00194         public function testOptions() {
00195                 $user = User::newFromName( 'UnitTestUser' );
00196                 $user->addToDatabase();
00197 
00198                 $user->setOption( 'someoption', 'test' );
00199                 $user->setOption( 'cols', 200 );
00200                 $user->saveSettings();
00201 
00202                 $user = User::newFromName( 'UnitTestUser' );
00203                 $this->assertEquals( 'test', $user->getOption( 'someoption' ) );
00204                 $this->assertEquals( 200, $user->getOption( 'cols' ) );
00205         }
00206 
00211         public function testAnonOptions() {
00212                 global $wgDefaultUserOptions;
00213                 $this->user->setOption( 'someoption', 'test' );
00214                 $this->assertEquals( $wgDefaultUserOptions['cols'], $this->user->getOption( 'cols' ) );
00215                 $this->assertEquals( 'test', $this->user->getOption( 'someoption' ) );
00216         }
00217 }