This commit changes the way how HTMLForm handles a Status object when executed from a request. It now handles, beside the errors, also the warnings of a Status object and prints them out, wrapped in a warning box. The LoginSignupPage uses this feature to show informative warnings actually as warnings and not as more disturbing error messages. Error messages should be reserved for errors and only for erros. An AuthenticationProvider, which returns an UI AuthenticationResponse can choose, if the given message is an error or a warning message. This commit also addds a new function to Status, which allows a developer to split the object into two new Status objects, where one only contains the errors and the other only the warnings of the origin Status object (splitByErrorType). StatusValue also has a new function, splitByErrorType(), to support this. Bug: T139179 Change-Id: I9a27911613e62b5c4cb86bea40696cb37c4f49c2
112 lines
3 KiB
PHP
112 lines
3 KiB
PHP
<?php
|
|
|
|
namespace MediaWiki\Auth;
|
|
|
|
/**
|
|
* @group AuthManager
|
|
* @covers MediaWiki\Auth\AuthenticationResponse
|
|
*/
|
|
class AuthenticationResponseTest extends \MediaWikiTestCase {
|
|
/**
|
|
* @dataProvider provideConstructors
|
|
* @param string $constructor
|
|
* @param array $args
|
|
* @param array|Exception $expect
|
|
*/
|
|
public function testConstructors( $constructor, $args, $expect ) {
|
|
if ( is_array( $expect ) ) {
|
|
$res = new AuthenticationResponse();
|
|
$res->messageType = 'warning';
|
|
foreach ( $expect as $field => $value ) {
|
|
$res->$field = $value;
|
|
}
|
|
$ret = call_user_func_array( "MediaWiki\\Auth\\AuthenticationResponse::$constructor", $args );
|
|
$this->assertEquals( $res, $ret );
|
|
} else {
|
|
try {
|
|
call_user_func_array( "MediaWiki\\Auth\\AuthenticationResponse::$constructor", $args );
|
|
$this->fail( 'Expected exception not thrown' );
|
|
} catch ( \Exception $ex ) {
|
|
$this->assertEquals( $expect, $ex );
|
|
}
|
|
}
|
|
}
|
|
|
|
public function provideConstructors() {
|
|
$req = $this->getMockForAbstractClass( AuthenticationRequest::class );
|
|
$msg = new \Message( 'mainpage' );
|
|
|
|
return [
|
|
[ 'newPass', [], [
|
|
'status' => AuthenticationResponse::PASS,
|
|
] ],
|
|
[ 'newPass', [ 'name' ], [
|
|
'status' => AuthenticationResponse::PASS,
|
|
'username' => 'name',
|
|
] ],
|
|
[ 'newPass', [ 'name', null ], [
|
|
'status' => AuthenticationResponse::PASS,
|
|
'username' => 'name',
|
|
] ],
|
|
|
|
[ 'newFail', [ $msg ], [
|
|
'status' => AuthenticationResponse::FAIL,
|
|
'message' => $msg,
|
|
'messageType' => 'error',
|
|
] ],
|
|
|
|
[ 'newRestart', [ $msg ], [
|
|
'status' => AuthenticationResponse::RESTART,
|
|
'message' => $msg,
|
|
] ],
|
|
|
|
[ 'newAbstain', [], [
|
|
'status' => AuthenticationResponse::ABSTAIN,
|
|
] ],
|
|
|
|
[ 'newUI', [ [ $req ], $msg ], [
|
|
'status' => AuthenticationResponse::UI,
|
|
'neededRequests' => [ $req ],
|
|
'message' => $msg,
|
|
'messageType' => 'warning',
|
|
] ],
|
|
|
|
[ 'newUI', [ [ $req ], $msg, 'warning' ], [
|
|
'status' => AuthenticationResponse::UI,
|
|
'neededRequests' => [ $req ],
|
|
'message' => $msg,
|
|
'messageType' => 'warning',
|
|
] ],
|
|
|
|
[ 'newUI', [ [ $req ], $msg, 'error' ], [
|
|
'status' => AuthenticationResponse::UI,
|
|
'neededRequests' => [ $req ],
|
|
'message' => $msg,
|
|
'messageType' => 'error',
|
|
] ],
|
|
[ 'newUI', [ [], $msg ],
|
|
new \InvalidArgumentException( '$reqs may not be empty' )
|
|
],
|
|
|
|
[ 'newRedirect', [ [ $req ], 'http://example.org/redir' ], [
|
|
'status' => AuthenticationResponse::REDIRECT,
|
|
'neededRequests' => [ $req ],
|
|
'redirectTarget' => 'http://example.org/redir',
|
|
] ],
|
|
[
|
|
'newRedirect',
|
|
[ [ $req ], 'http://example.org/redir', [ 'foo' => 'bar' ] ],
|
|
[
|
|
'status' => AuthenticationResponse::REDIRECT,
|
|
'neededRequests' => [ $req ],
|
|
'redirectTarget' => 'http://example.org/redir',
|
|
'redirectApiData' => [ 'foo' => 'bar' ],
|
|
]
|
|
],
|
|
[ 'newRedirect', [ [], 'http://example.org/redir' ],
|
|
new \InvalidArgumentException( '$reqs may not be empty' )
|
|
],
|
|
];
|
|
}
|
|
|
|
}
|