3 namespace MediaWiki\Auth
;
7 * @covers MediaWiki\Auth\PasswordAuthenticationRequest
9 class PasswordAuthenticationRequestTest
extends AuthenticationRequestTestCase
{
11 protected function getInstance( array $args = [] ) {
12 $ret = new PasswordAuthenticationRequest();
13 $ret->action
= $args[0];
17 public static function provideGetFieldInfo() {
19 [ [ AuthManager
::ACTION_LOGIN
] ],
20 [ [ AuthManager
::ACTION_CREATE
] ],
21 [ [ AuthManager
::ACTION_CHANGE
] ],
22 [ [ AuthManager
::ACTION_REMOVE
] ],
26 public function testGetFieldInfo2() {
29 AuthManager
::ACTION_LOGIN
,
30 AuthManager
::ACTION_CREATE
,
31 AuthManager
::ACTION_CHANGE
,
32 AuthManager
::ACTION_REMOVE
,
34 $req = new PasswordAuthenticationRequest();
35 $req->action
= $action;
36 $info[$action] = $req->getFieldInfo();
39 $this->assertSame( [], $info[AuthManager
::ACTION_REMOVE
], 'No data needed to remove' );
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' );
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'
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'
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'
65 public function provideLoadFromSubmission() {
67 'Empty request, login' => [
68 [ AuthManager
::ACTION_LOGIN
],
72 'Empty request, change' => [
73 [ AuthManager
::ACTION_CHANGE
],
77 'Empty request, remove' => [
78 [ AuthManager
::ACTION_REMOVE
],
82 'Username + password, login' => [
83 [ AuthManager
::ACTION_LOGIN
],
84 $data = [ 'username' => 'User', 'password' => 'Bar' ],
85 $data +
[ 'action' => AuthManager
::ACTION_LOGIN
],
87 'Username + password, change' => [
88 [ AuthManager
::ACTION_CHANGE
],
89 [ 'username' => 'User', 'password' => 'Bar' ],
92 'Username + password + retype' => [
93 [ AuthManager
::ACTION_CHANGE
],
94 [ 'username' => 'User', 'password' => 'Bar', 'retype' => 'baz' ],
95 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager
::ACTION_CHANGE
],
97 'Username empty, login' => [
98 [ AuthManager
::ACTION_LOGIN
],
99 [ 'username' => '', 'password' => 'Bar' ],
102 'Username empty, change' => [
103 [ AuthManager
::ACTION_CHANGE
],
104 [ 'username' => '', 'password' => 'Bar', 'retype' => 'baz' ],
105 [ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager
::ACTION_CHANGE
],
107 'Password empty, login' => [
108 [ AuthManager
::ACTION_LOGIN
],
109 [ 'username' => 'User', 'password' => '' ],
112 'Password empty, login, with retype' => [
113 [ AuthManager
::ACTION_LOGIN
],
114 [ 'username' => 'User', 'password' => '', 'retype' => 'baz' ],
118 [ AuthManager
::ACTION_CHANGE
],
119 [ 'username' => 'User', 'password' => 'Bar', 'retype' => '' ],
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', $ret['provider'] );
133 $this->assertSame( 'authmanager-provider-password', $ret['provider']->getKey() );
134 $this->assertArrayHasKey( 'account', $ret );
135 $this->assertInstanceOf( 'Message', $ret['account'] );
136 $this->assertSame( [ 'UTSysop' ], $ret['account']->getParams() );