MediaWiki
REL1_21
|
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 }