mediawiki-extensions-AbuseF.../tests/phpunit/AbuseFilterCreateAccountTestTrait.php
Andre Klapper 63de22357d Use explicit nullable type on parameter arguments (for PHP 8.4)
Implicitly marking parameter $... as nullable is deprecated in PHP
8.4. The explicit nullable type must be used instead.

Bug: T376276
Change-Id: I303342cf1a002d5f0afc77ce147ce9453ea5282e
2024-10-26 14:38:46 +02:00

64 lines
2 KiB
PHP

<?php
use MediaWiki\Extension\AbuseFilter\AbuseFilterPreAuthenticationProvider;
use MediaWiki\Extension\AbuseFilter\AbuseFilterServices;
use MediaWiki\MediaWikiServices;
use MediaWiki\Page\PageReferenceValue;
use MediaWiki\User\User;
use Wikimedia\Stats\NullStatsdDataFactory;
/**
* This trait can be used to create accounts in integration tests.
* NOTE: The implementing classes MUST extend MediaWikiIntegrationTestCase
* @todo This might be moved to MediaWikiIntegrationTestCase
*/
trait AbuseFilterCreateAccountTestTrait {
/**
* @param string $accountName
* @param bool $autocreate
* @param User|null $creator Defaults to the newly created user
* @return StatusValue
*/
protected function createAccount(
string $accountName,
bool $autocreate = false,
?User $creator = null
): StatusValue {
$userFactory = MediaWikiServices::getInstance()->getUserFactory();
$user = $userFactory->newFromName( $accountName );
$creator ??= $user;
$provider = new AbuseFilterPreAuthenticationProvider(
AbuseFilterServices::getVariableGeneratorFactory(),
AbuseFilterServices::getFilterRunnerFactory(),
new NullStatsdDataFactory(),
$userFactory
);
if ( $autocreate ) {
$status = $provider->testUserForCreation( $user, $autocreate );
} else {
$status = $provider->testForAccountCreation( $user, $creator, [] );
}
if ( $status->isGood() ) {
// A creatable username must exist to be passed to $logEntry->setPerformer(),
// so create the account.
$user->addToDatabase();
// FIXME This is a bit hacky, but AuthManager doesn't expose any methods for logging
$subType = $autocreate ? 'autocreate' : 'create2';
$logEntry = new ManualLogEntry( 'newusers', $subType );
$logEntry->setPerformer( $creator );
$logEntry->setTarget( PageReferenceValue::localReference( NS_USER, $accountName ) );
$logEntry->setComment( 'Fooobarcomment' );
$logEntry->setParameters( [
'4::userid' => $user->getId(),
] );
$logid = $logEntry->insert();
$logEntry->publish( $logid );
$status->value = $logid;
}
return $status;
}
}