wiki.techinc.nl/tests/phpunit/includes/auth/PasswordAuthenticationRequestTest.php
Brad Jorsch d245bd25ae Add AuthManager
This implements the AuthManager class and its needed interfaces and
subclasses, and integrates them into the backend portion of MediaWiki.
Integration with frontend portions of MediaWiki (e.g. ApiLogin,
Special:Login) is left for a followup.

Bug: T91699
Bug: T71589
Bug: T111299
Co-Authored-By: Gergő Tisza <gtisza@wikimedia.org>
Change-Id: If89d24838e326fe25fe867d02181eebcfbb0e196
2016-05-16 15:11:02 +00:00

138 lines
4.2 KiB
PHP

<?php
namespace MediaWiki\Auth;
/**
* @group AuthManager
* @covers MediaWiki\Auth\PasswordAuthenticationRequest
*/
class PasswordAuthenticationRequestTest extends AuthenticationRequestTestCase {
protected function getInstance( array $args = [] ) {
$ret = new PasswordAuthenticationRequest();
$ret->action = $args[0];
return $ret;
}
public static function provideGetFieldInfo() {
return [
[ [ AuthManager::ACTION_LOGIN ] ],
[ [ AuthManager::ACTION_CREATE ] ],
[ [ AuthManager::ACTION_CHANGE ] ],
[ [ AuthManager::ACTION_REMOVE ] ],
];
}
public function testGetFieldInfo2() {
$info = [];
foreach ( [
AuthManager::ACTION_LOGIN,
AuthManager::ACTION_CREATE,
AuthManager::ACTION_CHANGE,
AuthManager::ACTION_REMOVE,
] as $action ) {
$req = new PasswordAuthenticationRequest();
$req->action = $action;
$info[$action] = $req->getFieldInfo();
}
$this->assertSame( [], $info[AuthManager::ACTION_REMOVE], 'No data needed to remove' );
$this->assertArrayNotHasKey( 'retype', $info[AuthManager::ACTION_LOGIN],
'No need to retype password on login' );
$this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CREATE],
'Need to retype when creating new password' );
$this->assertArrayHasKey( 'retype', $info[AuthManager::ACTION_CHANGE],
'Need to retype when changing password' );
$this->assertNotEquals(
$info[AuthManager::ACTION_LOGIN]['password']['label'],
$info[AuthManager::ACTION_CHANGE]['password']['label'],
'Password field for change is differentiated from login'
);
$this->assertNotEquals(
$info[AuthManager::ACTION_CREATE]['password']['label'],
$info[AuthManager::ACTION_CHANGE]['password']['label'],
'Password field for change is differentiated from create'
);
$this->assertNotEquals(
$info[AuthManager::ACTION_CREATE]['retype']['label'],
$info[AuthManager::ACTION_CHANGE]['retype']['label'],
'Retype field for change is differentiated from create'
);
}
public function provideLoadFromSubmission() {
return [
'Empty request, login' => [
[ AuthManager::ACTION_LOGIN ],
[],
false,
],
'Empty request, change' => [
[ AuthManager::ACTION_CHANGE ],
[],
false,
],
'Empty request, remove' => [
[ AuthManager::ACTION_REMOVE ],
[],
false,
],
'Username + password, login' => [
[ AuthManager::ACTION_LOGIN ],
$data = [ 'username' => 'User', 'password' => 'Bar' ],
$data + [ 'action' => AuthManager::ACTION_LOGIN ],
],
'Username + password, change' => [
[ AuthManager::ACTION_CHANGE ],
[ 'username' => 'User', 'password' => 'Bar' ],
false,
],
'Username + password + retype' => [
[ AuthManager::ACTION_CHANGE ],
[ 'username' => 'User', 'password' => 'Bar', 'retype' => 'baz' ],
[ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ],
],
'Username empty, login' => [
[ AuthManager::ACTION_LOGIN ],
[ 'username' => '', 'password' => 'Bar' ],
false,
],
'Username empty, change' => [
[ AuthManager::ACTION_CHANGE ],
[ 'username' => '', 'password' => 'Bar', 'retype' => 'baz' ],
[ 'password' => 'Bar', 'retype' => 'baz', 'action' => AuthManager::ACTION_CHANGE ],
],
'Password empty, login' => [
[ AuthManager::ACTION_LOGIN ],
[ 'username' => 'User', 'password' => '' ],
false,
],
'Password empty, login, with retype' => [
[ AuthManager::ACTION_LOGIN ],
[ 'username' => 'User', 'password' => '', 'retype' => 'baz' ],
false,
],
'Retype empty' => [
[ AuthManager::ACTION_CHANGE ],
[ 'username' => 'User', 'password' => 'Bar', 'retype' => '' ],
false,
],
];
}
public function testDescribeCredentials() {
$req = new PasswordAuthenticationRequest;
$req->action = AuthManager::ACTION_LOGIN;
$req->username = 'UTSysop';
$ret = $req->describeCredentials();
$this->assertInternalType( 'array', $ret );
$this->assertArrayHasKey( 'provider', $ret );
$this->assertInstanceOf( 'Message', $ret['provider'] );
$this->assertSame( 'authmanager-provider-password', $ret['provider']->getKey() );
$this->assertArrayHasKey( 'account', $ret );
$this->assertInstanceOf( 'Message', $ret['account'] );
$this->assertSame( [ 'UTSysop' ], $ret['account']->getParams() );
}
}