Fix LegacyHookPreAuthenticationProvider::testUserForCreation

Simply testing shouldn't call AbortNewAccount, we only want to do that
when the account is actually being created.

Change-Id: Icb3d1ce63a2691aa232b4564ed88fee6d50d7ab7
This commit is contained in:
Brad Jorsch 2016-06-16 17:44:44 -04:00 committed by Anomie
parent cd763560c8
commit 78cb13c369
2 changed files with 11 additions and 74 deletions

View file

@ -106,27 +106,6 @@ class LegacyHookPreAuthenticationProvider extends AbstractPreAuthenticationProvi
$user, $user, LoginForm::ABORTED, $abortError, 'AbortAutoAccount'
);
}
} else {
$abortError = '';
$abortStatus = null;
if ( !\Hooks::run( 'AbortNewAccount', [ $user, &$abortError, &$abortStatus ] ) ) {
// Hook point to add extra creation throttles and blocks
$this->logger->debug( __METHOD__ . ': a hook blocked creation' );
if ( $abortStatus === null ) {
// Report back the old string as a raw message status.
// This will report the error back as 'createaccount-hook-aborted'
// with the given string as the message.
// To return a different error code, return a StatusValue object.
$msg = wfMessage( 'createaccount-hook-aborted' )->rawParams( $abortError );
return StatusValue::newFatal( $msg );
} else {
// For MediaWiki 1.23+ and updated hooks, return the Status object
// returned from the hook.
$ret = StatusValue::newGood();
$ret->merge( $abortStatus );
return $ret;
}
}
}
return StatusValue::newGood();

View file

@ -334,22 +334,23 @@ class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
* @param string|null $failMsg
*/
public function testTestUserForCreation( $error, $failMsg ) {
$testUser = self::getTestUser()->getUser();
$provider = $this->getProvider();
$options = [ 'flags' => \User::READ_LOCKING, 'creating' => true ];
$this->hook( 'AbortNewAccount', $this->never() );
$this->hook( 'AbortAutoAccount', $this->once() )
->will( $this->returnCallback( function ( $user, &$abortError ) use ( $error ) {
->will( $this->returnCallback( function ( $user, &$abortError ) use ( $testUser, $error ) {
$this->assertInstanceOf( 'User', $user );
$this->assertSame( 'UTSysop', $user->getName() );
$this->assertSame( $testUser->getName(), $user->getName() );
$abortError = $error;
return $error === null;
} ) );
$status = $this->getProvider()->testUserForCreation(
\User::newFromName( 'UTSysop' ), AuthManager::AUTOCREATE_SOURCE_SESSION
$status = $provider->testUserForCreation(
$testUser, AuthManager::AUTOCREATE_SOURCE_SESSION, $options
);
$this->unhook( 'AbortNewAccount' );
$this->unhook( 'AbortAutoAccount' );
if ( $failMsg === null ) {
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
} else {
@ -360,54 +361,11 @@ class LegacyHookPreAuthenticationProviderTest extends \MediaWikiTestCase {
}
$this->hook( 'AbortAutoAccount', $this->never() );
$this->hook( 'AbortNewAccount', $this->once() )
->will( $this->returnCallback(
function ( $user, &$abortError, &$abortStatus ) use ( $error ) {
$this->assertInstanceOf( 'User', $user );
$this->assertSame( 'UTSysop', $user->getName() );
$abortError = $error;
return $error === null;
}
) );
$status = $this->getProvider()->testUserForCreation( \User::newFromName( 'UTSysop' ), false );
$this->hook( 'AbortNewAccount', $this->never() );
$status = $provider->testUserForCreation( $testUser, false, $options );
$this->unhook( 'AbortNewAccount' );
$this->unhook( 'AbortAutoAccount' );
if ( $failMsg === null ) {
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
} else {
$this->assertInstanceOf( 'StatusValue', $status, 'should fail (type)' );
$this->assertFalse( $status->isOk(), 'should fail (ok)' );
$errors = $status->getErrors();
$msg = $errors[0]['message'];
$this->assertInstanceOf( \Message::class, $msg );
$this->assertEquals(
'createaccount-hook-aborted', $msg->getKey(), 'should fail (message)'
);
}
if ( $error !== false ) {
$this->hook( 'AbortAutoAccount', $this->never() );
$this->hook( 'AbortNewAccount', $this->once() )
->will( $this->returnCallback(
function ( $user, &$abortError, &$abortStatus ) use ( $error ) {
$this->assertInstanceOf( 'User', $user );
$this->assertSame( 'UTSysop', $user->getName() );
$abortStatus = $error ? \Status::newFatal( $error ) : \Status::newGood();
return $error === null;
}
) );
$status = $this->getProvider()->testUserForCreation( \User::newFromName( 'UTSysop' ), false );
$this->unhook( 'AbortNewAccount' );
$this->unhook( 'AbortAutoAccount' );
if ( $failMsg === null ) {
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
} else {
$this->assertInstanceOf( 'StatusValue', $status, 'should fail (type)' );
$this->assertFalse( $status->isOk(), 'should fail (ok)' );
$errors = $status->getErrors();
$this->assertEquals( $failMsg, $errors[0]['message'], 'should fail (message)' );
}
}
$this->assertEquals( \StatusValue::newGood(), $status, 'should succeed' );
}
public static function provideTestUserForCreation() {