use MediaWiki\Block\DatabaseBlock;
use MediaWiki\Block\CompositeBlock;
use MediaWiki\Block\SystemBlock;
+use MediaWiki\Config\ServiceOptions;
use MediaWiki\Permissions\PermissionManager;
+use Psr\Log\NullLogger;
+use Wikimedia\Rdbms\ILoadBalancer;
/**
* @covers PasswordReset
* @group Database
*/
class PasswordResetTest extends MediaWikiTestCase {
+ private function makeConfig( $enableEmail, array $passwordResetRoutes = [] ) {
+ $hash = new HashConfig( [
+ 'EnableEmail' => $enableEmail,
+ 'PasswordResetRoutes' => $passwordResetRoutes,
+ ] );
+
+ return new ServiceOptions( PasswordReset::$constructorOptions, $hash );
+ }
+
/**
* @dataProvider provideIsAllowed
*/
public function testIsAllowed( $passwordResetRoutes, $enableEmail,
$allowsAuthenticationDataChange, $canEditPrivate, $block, $globalBlock, $isAllowed
) {
- $config = new HashConfig( [
- 'PasswordResetRoutes' => $passwordResetRoutes,
- 'EnableEmail' => $enableEmail,
- ] );
+ $config = $this->makeConfig( $enableEmail, $passwordResetRoutes );
$authManager = $this->getMockBuilder( AuthManager::class )->disableOriginalConstructor()
->getMock();
->with( $user, 'editmyprivateinfo' )
->willReturn( $canEditPrivate );
+ $loadBalancer = $this->getMockBuilder( ILoadBalancer::class )->getMock();
+
$passwordReset = new PasswordReset(
$config,
$authManager,
- $permissionManager
+ $permissionManager,
+ $loadBalancer,
+ new NullLogger()
);
$this->assertSame( $isAllowed, $passwordReset->isAllowed( $user )->isGood() );
}
public function testExecute_email() {
- $config = new HashConfig( [
- 'PasswordResetRoutes' => [ 'username' => true, 'email' => true ],
- 'EnableEmail' => true,
- ] );
+ $config = $this->makeConfig( true, [ 'username' => true, 'email' => true ] );
// Unregister the hooks for proper unit testing
$this->mergeMwGlobalArrayValue( 'wgHooks', [
->willReturn( Status::newGood() );
$authManager->expects( $this->exactly( 2 ) )->method( 'changeAuthenticationData' );
+ $permissionManager = $this->getMockBuilder( PermissionManager::class )
+ ->disableOriginalConstructor()
+ ->getMock();
+ $permissionManager->method( 'userHasRight' )->willReturn( true );
+
+ $loadBalancer = $this->getMockBuilder( ILoadBalancer::class )
+ ->getMock();
+
$request = new FauxRequest();
$request->setIP( '1.2.3.4' );
$performingUser = $this->getMockBuilder( User::class )->getMock();
$targetUser2->expects( $this->any() )->method( 'getEmail' )->willReturn( 'foo@bar.baz' );
$passwordReset = $this->getMockBuilder( PasswordReset::class )
- ->setConstructorArgs( [ $config, $authManager, $permissionManager ] )
->setMethods( [ 'getUsersByEmail' ] )
+ ->setConstructorArgs( [
+ $config,
+ $authManager,
+ $permissionManager,
+ $loadBalancer,
+ new NullLogger()
+ ] )
->getMock();
$passwordReset->expects( $this->any() )->method( 'getUsersByEmail' )->with( 'foo@bar.baz' )
->willReturn( [ $targetUser1, $targetUser2 ] );