Merge "Add SPARQL client to core"
[lhc/web/wiklou.git] / tests / phpunit / includes / auth / PasswordAuthenticationRequestTest.php
1 <?php
2
3 namespace MediaWiki\Auth;
4
5 /**
6 * @group AuthManager
7 * @covers MediaWiki\Auth\PasswordAuthenticationRequest
8 */
9 class PasswordAuthenticationRequestTest extends AuthenticationRequestTestCase {
10
11 protected function getInstance( array $args = [] ) {
12 $ret = new PasswordAuthenticationRequest();
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 PasswordAuthenticationRequest();
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( 'retype', $info[AuthManager::ACTION_CREATE],
44 'Need to retype when creating new password' );
45 $this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CHANGE],
46 'Need to retype when changing password' );
47
48 $this->assertNotEquals(
49 $info[AuthManager::ACTION_LOGIN]['password']['label'],
50 $info[AuthManager::ACTION_CHANGE]['password']['label'],
51 'Password field for change is differentiated from login'
52 );
53 $this->assertNotEquals(
54 $info[AuthManager::ACTION_CREATE]['password']['label'],
55 $info[AuthManager::ACTION_CHANGE]['password']['label'],
56 'Password field for change is differentiated from create'
57 );
58 $this->assertNotEquals(
59 $info[AuthManager::ACTION_CREATE]['retype']['label'],
60 $info[AuthManager::ACTION_CHANGE]['retype']['label'],
61 'Retype field for change is differentiated from create'
62 );
63 }
64
65 public function provideLoadFromSubmission() {
66 return [
67 'Empty request, login' => [
68 [ AuthManager::ACTION_LOGIN ],
69 [],
70 false,
71 ],
72 'Empty request, change' => [
73 [ AuthManager::ACTION_CHANGE ],
74 [],
75 false,
76 ],
77 'Empty request, remove' => [
78 [ AuthManager::ACTION_REMOVE ],
79 [],
80 false,
81 ],
82 'Username + password, login' => [
83 [ AuthManager::ACTION_LOGIN ],
84 $data = [ 'username' => 'User', 'password' => 'Bar' ],
85 $data + [ 'action' => AuthManager::ACTION_LOGIN ],
86 ],
87 'Username + password, change' => [
88 [ AuthManager::ACTION_CHANGE ],
89 [ 'username' => 'User', 'password' => 'Bar' ],
90 false,
91 ],
92 'Username + password + retype' => [
93 [ AuthManager::ACTION_CHANGE ],
94 [ 'username' => 'User', 'password' => 'Bar', 'retype' => 'baz' ],
95 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ],
96 ],
97 'Username empty, login' => [
98 [ AuthManager::ACTION_LOGIN ],
99 [ 'username' => '', 'password' => 'Bar' ],
100 false,
101 ],
102 'Username empty, change' => [
103 [ AuthManager::ACTION_CHANGE ],
104 [ 'username' => '', 'password' => 'Bar', 'retype' => 'baz' ],
105 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ],
106 ],
107 'Password empty, login' => [
108 [ AuthManager::ACTION_LOGIN ],
109 [ 'username' => 'User', 'password' => '' ],
110 false,
111 ],
112 'Password empty, login, with retype' => [
113 [ AuthManager::ACTION_LOGIN ],
114 [ 'username' => 'User', 'password' => '', 'retype' => 'baz' ],
115 false,
116 ],
117 'Retype empty' => [
118 [ AuthManager::ACTION_CHANGE ],
119 [ 'username' => 'User', 'password' => 'Bar', 'retype' => '' ],
120 false,
121 ],
122 ];
123 }
124
125 public function testDescribeCredentials() {
126 $req = new PasswordAuthenticationRequest;
127 $req->action = AuthManager::ACTION_LOGIN;
128 $req->username = 'UTSysop';
129 $ret = $req->describeCredentials();
130 $this->assertInternalType( 'array', $ret );
131 $this->assertArrayHasKey( 'provider', $ret );
132 $this->assertInstanceOf( \Message::class, $ret['provider'] );
133 $this->assertSame( 'authmanager-provider-password', $ret['provider']->getKey() );
134 $this->assertArrayHasKey( 'account', $ret );
135 $this->assertInstanceOf( \Message::class, $ret['account'] );
136 $this->assertSame( [ 'UTSysop' ], $ret['account']->getParams() );
137 }
138 }