Stylize.php changes
[lhc/web/wiklou.git] / tests / phpunit / includes / UserTest.php
1 <?php
2
3 define( 'NS_UNITTEST', 5600 );
4 define( 'NS_UNITTEST_TALK', 5601 );
5
6 /**
7 * @group Database
8 */
9 class UserTest extends MediaWikiTestCase {
10 protected $savedGroupPermissions, $savedRevokedPermissions;
11 protected $user;
12
13 public function setUp() {
14 parent::setUp();
15
16 $this->savedGroupPermissions = $GLOBALS['wgGroupPermissions'];
17 $this->savedRevokedPermissions = $GLOBALS['wgRevokePermissions'];
18
19 $this->setUpPermissionGlobals();
20 $this->setUpUser();
21 }
22 private function setUpPermissionGlobals() {
23 global $wgGroupPermissions, $wgRevokePermissions;
24
25 # Data for regular $wgGroupPermissions test
26 $wgGroupPermissions['unittesters'] = array(
27 'test' => true,
28 'runtest' => true,
29 'writetest' => false,
30 'nukeworld' => false,
31 );
32 $wgGroupPermissions['testwriters'] = array(
33 'test' => true,
34 'writetest' => true,
35 'modifytest' => true,
36 );
37 # Data for regular $wgRevokePermissions test
38 $wgRevokePermissions['formertesters'] = array(
39 'runtest' => true,
40 );
41
42 # Data for namespace based $wgGroupPermissions test
43 $wgGroupPermissions['unittesters']['writedocumentation'] = array(
44 NS_MAIN => false, NS_UNITTEST => true,
45 );
46 $wgGroupPermissions['testwriters']['writedocumentation'] = true;
47
48 }
49 private function setUpUser() {
50 $this->user = new User;
51 $this->user->addGroup( 'unittesters' );
52 }
53
54 public function tearDown() {
55 parent::tearDown();
56
57 $GLOBALS['wgGroupPermissions'] = $this->savedGroupPermissions;
58 $GLOBALS['wgRevokePermissions'] = $this->savedRevokedPermissions;
59 }
60
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 );
67
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 );
73 }
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 );
80 }
81
82 public function testNamespaceGroupPermissions() {
83 $rights = User::getGroupPermissions( array( 'unittesters' ) );
84 $this->assertNotContains( 'writedocumentation', $rights );
85
86 $rights = User::getGroupPermissions( array( 'unittesters' ) , NS_MAIN );
87 $this->assertNotContains( 'writedocumentation', $rights );
88 $this->assertNotContains( 'modifytest', $rights );
89
90 $rights = User::getGroupPermissions( array( 'unittesters' ), NS_HELP );
91 $this->assertNotContains( 'writedocumentation', $rights );
92 $this->assertNotContains( 'modifytest', $rights );
93
94 $rights = User::getGroupPermissions( array( 'unittesters' ), NS_UNITTEST );
95 $this->assertContains( 'writedocumentation', $rights );
96
97 $rights = User::getGroupPermissions(
98 array( 'unittesters', 'testwriters' ), NS_MAIN );
99 $this->assertContains( 'writedocumentation', $rights );
100 }
101
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 );
109
110 $rights = $this->user->getRights( NS_MAIN );
111 $this->assertNotContains( 'writedocumentation', $rights );
112 $this->assertNotContains( 'modifytest', $rights );
113
114 $rights = $this->user->getRights( NS_HELP );
115 $this->assertNotContains( 'writedocumentation', $rights );
116 $this->assertNotContains( 'modifytest', $rights );
117
118 $rights = $this->user->getRights( NS_UNITTEST );
119 $this->assertContains( 'writedocumentation', $rights );
120 }
121
122 /**
123 * @dataProvider provideGetGroupsWithPermission
124 */
125 public function testGetGroupsWithPermission( $expected, $right, $ns ) {
126 $result = User::getGroupsWithPermission( $right, $ns );
127 sort( $result );
128 sort( $expected );
129
130 $this->assertEquals( $expected, $result, "Groups with permission $right" .
131 ( is_null( $ns ) ? '' : "in namespace $ns" ) );
132 }
133 public function provideGetGroupsWithPermission() {
134 return array(
135 array(
136 array( 'unittesters', 'testwriters' ),
137 'test',
138 null
139 ),
140 array(
141 array( 'unittesters' ),
142 'runtest',
143 null
144 ),
145 array(
146 array( 'testwriters' ),
147 'writetest',
148 null
149 ),
150 array(
151 array( 'testwriters' ),
152 'modifytest',
153 null
154 ),
155 array(
156 array( 'testwriters' ),
157 'writedocumentation',
158 NS_MAIN
159 ),
160 array(
161 array( 'unittesters', 'testwriters' ),
162 'writedocumentation',
163 NS_UNITTEST
164 ),
165 );
166 }
167
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
183 }
184
185 }