]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - tests/phpunit/includes/auth/PasswordDomainAuthenticationRequestTest.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / tests / phpunit / includes / auth / PasswordDomainAuthenticationRequestTest.php
1 <?php
2
3 namespace MediaWiki\Auth;
4
5 /**
6  * @group AuthManager
7  * @covers MediaWiki\Auth\PasswordDomainAuthenticationRequest
8  */
9 class PasswordDomainAuthenticationRequestTest extends AuthenticationRequestTestCase {
10
11         protected function getInstance( array $args = [] ) {
12                 $ret = new PasswordDomainAuthenticationRequest( [ 'd1', 'd2' ] );
13                 $ret->action = $args[0];
14                 return $ret;
15         }
16
17         public static function provideGetFieldInfo() {
18                 return [
19                         [ [ AuthManager::ACTION_LOGIN ] ],
20                         [ [ AuthManager::ACTION_CREATE ] ],
21                         [ [ AuthManager::ACTION_CHANGE ] ],
22                         [ [ AuthManager::ACTION_REMOVE ] ],
23                 ];
24         }
25
26         public function testGetFieldInfo2() {
27                 $info = [];
28                 foreach ( [
29                         AuthManager::ACTION_LOGIN,
30                         AuthManager::ACTION_CREATE,
31                         AuthManager::ACTION_CHANGE,
32                         AuthManager::ACTION_REMOVE,
33                 ] as $action ) {
34                         $req = new PasswordDomainAuthenticationRequest( [ 'd1', 'd2' ] );
35                         $req->action = $action;
36                         $info[$action] = $req->getFieldInfo();
37                 }
38
39                 $this->assertSame( [], $info[AuthManager::ACTION_REMOVE], 'No data needed to remove' );
40
41                 $this->assertArrayNotHasKey( 'retype', $info[AuthManager::ACTION_LOGIN],
42                         'No need to retype password on login' );
43                 $this->assertArrayHasKey( 'domain', $info[AuthManager::ACTION_LOGIN],
44                         'Domain needed on login' );
45                 $this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CREATE],
46                         'Need to retype when creating new password' );
47                 $this->assertArrayHasKey( 'domain', $info[AuthManager::ACTION_CREATE],
48                         'Domain needed on account creation' );
49                 $this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CHANGE],
50                         'Need to retype when changing password' );
51                 $this->assertArrayNotHasKey( 'domain', $info[AuthManager::ACTION_CHANGE],
52                         'Domain not needed on account creation' );
53
54                 $this->assertNotEquals(
55                         $info[AuthManager::ACTION_LOGIN]['password']['label'],
56                         $info[AuthManager::ACTION_CHANGE]['password']['label'],
57                         'Password field for change is differentiated from login'
58                 );
59                 $this->assertNotEquals(
60                         $info[AuthManager::ACTION_CREATE]['password']['label'],
61                         $info[AuthManager::ACTION_CHANGE]['password']['label'],
62                         'Password field for change is differentiated from create'
63                 );
64                 $this->assertNotEquals(
65                         $info[AuthManager::ACTION_CREATE]['retype']['label'],
66                         $info[AuthManager::ACTION_CHANGE]['retype']['label'],
67                         'Retype field for change is differentiated from create'
68                 );
69         }
70
71         public function provideLoadFromSubmission() {
72                 $domainList = [ 'domainList' => [ 'd1', 'd2' ] ];
73                 return [
74                         'Empty request, login' => [
75                                 [ AuthManager::ACTION_LOGIN ],
76                                 [],
77                                 false,
78                         ],
79                         'Empty request, change' => [
80                                 [ AuthManager::ACTION_CHANGE ],
81                                 [],
82                                 false,
83                         ],
84                         'Empty request, remove' => [
85                                 [ AuthManager::ACTION_REMOVE ],
86                                 [],
87                                 false,
88                         ],
89                         'Username + password, login' => [
90                                 [ AuthManager::ACTION_LOGIN ],
91                                 $data = [ 'username' => 'User', 'password' => 'Bar' ],
92                                 false,
93                         ],
94                         'Username + password + domain, login' => [
95                                 [ AuthManager::ACTION_LOGIN ],
96                                 $data = [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd1' ],
97                                 $data + [ 'action' => AuthManager::ACTION_LOGIN ] + $domainList,
98                         ],
99                         'Username + password + bad domain, login' => [
100                                 [ AuthManager::ACTION_LOGIN ],
101                                 $data = [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd5' ],
102                                 false,
103                         ],
104                         'Username + password + domain, change' => [
105                                 [ AuthManager::ACTION_CHANGE ],
106                                 [ 'username' => 'User', 'password' => 'Bar', 'domain' => 'd1' ],
107                                 false,
108                         ],
109                         'Username + password + domain + retype' => [
110                                 [ AuthManager::ACTION_CHANGE ],
111                                 [ 'username' => 'User', 'password' => 'Bar', 'retype' => 'baz', 'domain' => 'd1' ],
112                                 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ] +
113                                         $domainList,
114                         ],
115                         'Username empty, login' => [
116                                 [ AuthManager::ACTION_LOGIN ],
117                                 [ 'username' => '', 'password' => 'Bar', 'domain' => 'd1' ],
118                                 false,
119                         ],
120                         'Username empty, change' => [
121                                 [ AuthManager::ACTION_CHANGE ],
122                                 [ 'username' => '', 'password' => 'Bar', 'retype' => 'baz', 'domain' => 'd1' ],
123                                 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ] +
124                                         $domainList,
125                         ],
126                         'Password empty, login' => [
127                                 [ AuthManager::ACTION_LOGIN ],
128                                 [ 'username' => 'User', 'password' => '', 'domain' => 'd1' ],
129                                 false,
130                         ],
131                         'Password empty, login, with retype' => [
132                                 [ AuthManager::ACTION_LOGIN ],
133                                 [ 'username' => 'User', 'password' => '', 'retype' => 'baz', 'domain' => 'd1' ],
134                                 false,
135                         ],
136                         'Retype empty' => [
137                                 [ AuthManager::ACTION_CHANGE ],
138                                 [ 'username' => 'User', 'password' => 'Bar', 'retype' => '', 'domain' => 'd1' ],
139                                 false,
140                         ],
141                 ];
142         }
143
144         public function testDescribeCredentials() {
145                 $req = new PasswordDomainAuthenticationRequest( [ 'd1', 'd2' ] );
146                 $req->action = AuthManager::ACTION_LOGIN;
147                 $req->username = 'UTSysop';
148                 $req->domain = 'd2';
149                 $ret = $req->describeCredentials();
150                 $this->assertInternalType( 'array', $ret );
151                 $this->assertArrayHasKey( 'provider', $ret );
152                 $this->assertInstanceOf( 'Message', $ret['provider'] );
153                 $this->assertSame( 'authmanager-provider-password-domain', $ret['provider']->getKey() );
154                 $this->assertArrayHasKey( 'account', $ret );
155                 $this->assertInstanceOf( 'Message', $ret['account'] );
156                 $this->assertSame( 'authmanager-account-password-domain', $ret['account']->getKey() );
157                 $this->assertSame( [ 'UTSysop', 'd2' ], $ret['account']->getParams() );
158         }
159 }