wiki.techinc.nl/tests/phpunit/integration/includes/user/UserFactoryTest.php
Derick Alangi f88eab53a6 tests: Use overrideConfig(Value|Values) where needed
This continues the work in the child patch to replace callers
of setMwGlobals() with the appropriate method. Directory this
patch covers is `tests/phpunit/integration/`.

Change-Id: I0a9abf0d2a43587f2ffa029b68024a1ba5165fc7
2022-07-12 14:40:46 +01:00

225 lines
6.4 KiB
PHP

<?php
use MediaWiki\MainConfigNames;
use MediaWiki\Permissions\UltimateAuthority;
use MediaWiki\User\UserFactory;
use MediaWiki\User\UserIdentityValue;
use Wikimedia\IPUtils;
/**
* @covers \MediaWiki\User\UserFactory
* @group Database
*
* @author DannyS712
*/
class UserFactoryTest extends MediaWikiIntegrationTestCase {
private function getUserFactory() {
return $this->getServiceContainer()->getUserFactory();
}
public function testNewFromName() {
$name = 'UserFactoryTest1';
$factory = $this->getUserFactory();
$user = $factory->newFromName( $name );
$this->assertInstanceOf( User::class, $user );
$this->assertSame( $name, $user->getName() );
}
public function testNewAnonymous() {
$factory = $this->getUserFactory();
$anon = $factory->newAnonymous();
$this->assertInstanceOf( User::class, $anon );
$currentIp = IPUtils::sanitizeIP( $anon->getRequest()->getIP() );
// Unspecified name defaults to current user's IP address
$this->assertSame( $currentIp, $anon->getName() );
// FIXME: should be a query count performance assertion instead of this hack
$this->getServiceContainer()->disableService( 'DBLoadBalancer' );
$name = '192.0.2.0';
$anonIpSpecified = $factory->newAnonymous( $name );
$this->assertSame( $name, $anonIpSpecified->getName() );
$anonIpSpecified->load(); // no queries expected
}
public function testNewFromId() {
$id = 98257;
$factory = $this->getUserFactory();
$user = $factory->newFromId( $id );
$this->assertInstanceOf( User::class, $user );
$this->assertSame( $id, $user->getId() );
}
public function testNewFromIdentity() {
$identity = new UserIdentityValue( 98257, __METHOD__ );
$factory = $this->getUserFactory();
$user = $factory->newFromUserIdentity( $identity );
$this->assertInstanceOf( User::class, $user );
$this->assertSame( $identity->getId(), $user->getId() );
$this->assertSame( $identity->getName(), $user->getName() );
// make sure instance caching happens
$this->assertSame( $user, $factory->newFromUserIdentity( $identity ) );
// make sure instance caching distingushes between IDs
$otherIdentity = new UserIdentityValue( 33245, __METHOD__ );
$this->assertNotSame( $user, $factory->newFromUserIdentity( $otherIdentity ) );
}
public function testNewFromActorId() {
$name = 'UserFactoryTest2';
$factory = $this->getUserFactory();
$user1 = $factory->newFromName( $name );
$user1->addToDatabase();
$actorId = $user1->getActorId();
$this->assertGreaterThan(
0,
$actorId,
'Valid actor id for a user'
);
$user2 = $factory->newFromActorId( $actorId );
$this->assertInstanceOf( User::class, $user2 );
$this->assertSame( $actorId, $user2->getActorId() );
}
public function testNewFromUserIdentity() {
$id = 23560;
$name = 'UserFactoryTest3';
$userIdentity = new UserIdentityValue( $id, $name );
$factory = $this->getUserFactory();
$user1 = $factory->newFromUserIdentity( $userIdentity );
$this->assertInstanceOf( User::class, $user1 );
$this->assertSame( $id, $user1->getId() );
$this->assertSame( $name, $user1->getName() );
$user2 = $factory->newFromUserIdentity( $user1 );
$this->assertInstanceOf( User::class, $user1 );
$this->assertSame( $user1, $user2 );
}
public function testNewFromAnyId() {
$name = 'UserFactoryTest4';
$factory = $this->getUserFactory();
$user1 = $factory->newFromName( $name );
$user1->addToDatabase();
$id = $user1->getId();
$this->assertGreaterThan(
0,
$id,
'Valid user'
);
$actorId = $user1->getActorId();
$this->assertGreaterThan(
0,
$actorId,
'Valid actor id for a user'
);
$user2 = $factory->newFromAnyId( $id, null, null );
$this->assertInstanceOf( User::class, $user2 );
$this->assertSame( $id, $user2->getId() );
$user3 = $factory->newFromAnyId( null, $name, null );
$this->assertInstanceOf( User::class, $user3 );
$this->assertSame( $name, $user3->getName() );
$user4 = $factory->newFromAnyId( null, null, $actorId );
$this->assertInstanceOf( User::class, $user4 );
$this->assertSame( $actorId, $user4->getActorId() );
}
public function testNewFromConfirmationCode() {
$fakeCode = 'NotARealConfirmationCode';
$factory = $this->getUserFactory();
$user1 = $factory->newFromConfirmationCode( $fakeCode );
$this->assertNull(
$user1,
'Invalid confirmation codes result in null users when reading from replicas'
);
$user2 = $factory->newFromConfirmationCode( $fakeCode, UserFactory::READ_LATEST );
$this->assertNull(
$user2,
'Invalid confirmation codes result in null users when reading from master'
);
}
// Copied from UserTest
public function testNewFromRow() {
// TODO: Create real tests here for loadFromRow
$row = (object)[];
$user = $this->getUserFactory()->newFromRow( $row );
$this->assertInstanceOf( User::class, $user, 'newFromRow returns a user object' );
}
public function testNewFromRow_bad() {
$this->expectException( InvalidArgumentException::class );
$this->expectExceptionMessage( '$row must be an object' );
$this->getUserFactory()->newFromRow( [] );
}
/**
* @covers \MediaWiki\User\UserFactory::newFromAuthority
*/
public function testNewFromAuthority() {
$authority = new UltimateAuthority( new UserIdentityValue( 42, 'Test' ) );
$user = $this->getUserFactory()->newFromAuthority( $authority );
$this->assertSame( 42, $user->getId() );
$this->assertSame( 'Test', $user->getName() );
}
public function testNewTempPlaceholder() {
$this->overrideConfigValue(
MainConfigNames::AutoCreateTempUser,
[
'enabled' => true,
'actions' => [ 'edit' ],
'genPattern' => '*Unregistered $1',
'matchPattern' => '*$1',
'serialProvider' => [ 'type' => 'local' ],
'serialMapping' => [ 'type' => 'plain-numeric' ],
]
);
$user = $this->getUserFactory()->newTempPlaceholder();
$this->assertTrue( $user->isTemp() );
$this->assertFalse( $user->isRegistered() );
$this->assertFalse( $user->isNamed() );
$this->assertSame( 0, $user->getId() );
}
public function testNewUnsavedTempUser() {
$this->overrideConfigValue(
MainConfigNames::AutoCreateTempUser,
[
'enabled' => true,
'actions' => [ 'edit' ],
'genPattern' => '*Unregistered $1',
'matchPattern' => '*$1',
'serialProvider' => [ 'type' => 'local' ],
'serialMapping' => [ 'type' => 'plain-numeric' ],
]
);
$user = $this->getUserFactory()->newUnsavedTempUser( '*Unregistered 1234' );
$this->assertTrue( $user->isTemp() );
$this->assertFalse( $user->isNamed() );
}
}