3 define( 'NS_UNITTEST', 5600 );
4 define( 'NS_UNITTEST_TALK', 5601 );
9 class UserTest
extends MediaWikiTestCase
{
10 protected $savedGroupPermissions, $savedRevokedPermissions;
13 public function setUp() {
16 $this->savedGroupPermissions
= $GLOBALS['wgGroupPermissions'];
17 $this->savedRevokedPermissions
= $GLOBALS['wgRevokePermissions'];
19 $this->setUpPermissionGlobals();
22 private function setUpPermissionGlobals() {
23 global $wgGroupPermissions, $wgRevokePermissions;
25 # Data for regular $wgGroupPermissions test
26 $wgGroupPermissions['unittesters'] = array(
32 $wgGroupPermissions['testwriters'] = array(
37 # Data for regular $wgRevokePermissions test
38 $wgRevokePermissions['formertesters'] = array(
42 # Data for namespace based $wgGroupPermissions test
43 $wgGroupPermissions['unittesters']['writedocumentation'] = array(
44 NS_MAIN
=> false, NS_UNITTEST
=> true,
46 $wgGroupPermissions['testwriters']['writedocumentation'] = true;
49 private function setUpUser() {
50 $this->user
= new User
;
51 $this->user
->addGroup( 'unittesters' );
54 public function tearDown() {
57 $GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions
;
58 $GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions
;
61 public function testGroupPermissions() {
62 $rights = User
::getGroupPermissions( array( 'unittesters' ) );
63 $this->assertContains( 'runtest', $rights );
64 $this->assertNotContains( 'writetest', $rights );
65 $this->assertNotContains( 'modifytest', $rights );
66 $this->assertNotContains( 'nukeworld', $rights );
68 $rights = User
::getGroupPermissions( array( 'unittesters', 'testwriters' ) );
69 $this->assertContains( 'runtest', $rights );
70 $this->assertContains( 'writetest', $rights );
71 $this->assertContains( 'modifytest', $rights );
72 $this->assertNotContains( 'nukeworld', $rights );
74 public function testRevokePermissions() {
75 $rights = User
::getGroupPermissions( array( 'unittesters', 'formertesters' ) );
76 $this->assertNotContains( 'runtest', $rights );
77 $this->assertNotContains( 'writetest', $rights );
78 $this->assertNotContains( 'modifytest', $rights );
79 $this->assertNotContains( 'nukeworld', $rights );
82 public function testNamespaceGroupPermissions() {
83 $rights = User
::getGroupPermissions( array( 'unittesters' ) );
84 $this->assertNotContains( 'writedocumentation', $rights );
86 $rights = User
::getGroupPermissions( array( 'unittesters' ) , NS_MAIN
);
87 $this->assertNotContains( 'writedocumentation', $rights );
88 $this->assertNotContains( 'modifytest', $rights );
90 $rights = User
::getGroupPermissions( array( 'unittesters' ), NS_HELP
);
91 $this->assertNotContains( 'writedocumentation', $rights );
92 $this->assertNotContains( 'modifytest', $rights );
94 $rights = User
::getGroupPermissions( array( 'unittesters' ), NS_UNITTEST
);
95 $this->assertContains( 'writedocumentation', $rights );
97 $rights = User
::getGroupPermissions(
98 array( 'unittesters', 'testwriters' ), NS_MAIN
);
99 $this->assertContains( 'writedocumentation', $rights );
102 public function testUserPermissions() {
103 $rights = $this->user
->getRights();
104 $this->assertContains( 'runtest', $rights );
105 $this->assertNotContains( 'writetest', $rights );
106 $this->assertNotContains( 'modifytest', $rights );
107 $this->assertNotContains( 'nukeworld', $rights );
108 $this->assertNotContains( 'writedocumentation', $rights );
110 $rights = $this->user
->getRights( NS_MAIN
);
111 $this->assertNotContains( 'writedocumentation', $rights );
112 $this->assertNotContains( 'modifytest', $rights );
114 $rights = $this->user
->getRights( NS_HELP
);
115 $this->assertNotContains( 'writedocumentation', $rights );
116 $this->assertNotContains( 'modifytest', $rights );
118 $rights = $this->user
->getRights( NS_UNITTEST
);
119 $this->assertContains( 'writedocumentation', $rights );
123 * @dataProvider provideGetGroupsWithPermission
125 public function testGetGroupsWithPermission( $expected, $right, $ns ) {
126 $result = User
::getGroupsWithPermission( $right, $ns );
130 $this->assertEquals( $expected, $result, "Groups with permission $right" .
131 ( is_null( $ns ) ?
'' : "in namespace $ns" ) );
133 public function provideGetGroupsWithPermission() {
136 array( 'unittesters', 'testwriters' ),
141 array( 'unittesters' ),
146 array( 'testwriters' ),
151 array( 'testwriters' ),
156 array( 'testwriters' ),
157 'writedocumentation',
161 array( 'unittesters', 'testwriters' ),
162 'writedocumentation',
168 public function testIsValidUserName() {
169 $this->assertFalse( $this->user
->isValidUserName( '' ) );
170 $this->assertFalse( $this->user
->isValidUserName( ' ' ) );
171 $this->assertFalse( $this->user
->isValidUserName( 'abcd' ) );
172 $this->assertFalse( $this->user
->isValidUserName( 'Ab/cd' ) );
173 $this->assertTrue( $this->user
->isValidUserName( 'Ab cd' ) ); // Whitespace
174 $this->assertFalse( $this->user
->isValidUserName( '192.168.1.1' ) ); // IP
175 $this->assertFalse( $this->user
->isValidUserName( 'User:Abcd' ) ); // Reserved Namespace
176 $this->assertTrue( $this->user
->isValidUserName( '12abcd232' ) );
177 $this->assertTrue( $this->user
->isValidUserName( '12abcd.232' ) );
178 $this->assertTrue( $this->user
->isValidUserName( '?abcd' ) );
179 $this->assertFalse( $this->user
->isValidUserName( '#abcd' ) );
180 $this->assertTrue( $this->user
->isValidUserName( 'Abcdകഖഗഘ' ) ); // Mixed scripts
181 $this->assertFalse( $this->user
->isValidUserName( 'ജോസ്തോമസ്' ) ); // ZWNJ
182 $this->assertFalse( $this->user
->isValidUserName( 'Ab cd' ) ); // Ideographic space