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