wiki.techinc.nl/tests/phpunit/includes/session/UserInfoTest.php
Daimona Eaytoy c6bd1e842c Do not use UTSysop directly in tests
If the test expects the user to exist, it should use getTestSysop to
guarantee the account creation. Otherwise, use mocks or different
usernames to clarify that the username is not relevant to the test.

Change-Id: I87a27f01e1874af410e5d43e2e7fc3b10bb14eb8
2023-08-16 00:35:25 +00:00

186 lines
7.9 KiB
PHP

<?php
namespace MediaWiki\Session;
use MediaWikiIntegrationTestCase;
use User;
/**
* @group Session
* @group Database
* @covers MediaWiki\Session\UserInfo
*/
class UserInfoTest extends MediaWikiIntegrationTestCase {
public function testNewAnonymous() {
$userinfo = UserInfo::newAnonymous();
$this->assertTrue( $userinfo->isAnon() );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( 0, $userinfo->getId() );
$this->assertSame( null, $userinfo->getName() );
$this->assertSame( '', $userinfo->getToken() );
$this->assertNotNull( $userinfo->getUser() );
$this->assertSame( $userinfo, $userinfo->verified() );
$this->assertSame( '<anon>', (string)$userinfo );
}
public function testNewFromId() {
$id = wfGetDB( DB_PRIMARY )->selectField( 'user', 'MAX(user_id)' ) + 1;
try {
UserInfo::newFromId( $id );
$this->fail( 'Expected exception not thrown' );
} catch ( \InvalidArgumentException $ex ) {
$this->assertSame( 'Invalid ID', $ex->getMessage() );
}
$user = $this->getTestSysop()->getUser();
$userinfo = UserInfo::newFromId( $user->getId() );
$this->assertFalse( $userinfo->isAnon() );
$this->assertFalse( $userinfo->isVerified() );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( $user->getToken( true ), $userinfo->getToken() );
$this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertFalse( $userinfo2->isAnon() );
$this->assertTrue( $userinfo2->isVerified() );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
$this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$userinfo = UserInfo::newFromId( $user->getId(), true );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( $userinfo, $userinfo->verified() );
}
public function testNewFromName() {
try {
UserInfo::newFromName( '<bad name>' );
$this->fail( 'Expected exception not thrown' );
} catch ( \InvalidArgumentException $ex ) {
$this->assertSame( 'Invalid user name', $ex->getMessage() );
}
// User name that exists
$user = $this->getTestSysop()->getUser();
$userinfo = UserInfo::newFromName( $user->getName() );
$this->assertFalse( $userinfo->isAnon() );
$this->assertFalse( $userinfo->isVerified() );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( $user->getToken( true ), $userinfo->getToken() );
$this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertFalse( $userinfo2->isAnon() );
$this->assertTrue( $userinfo2->isVerified() );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
$this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$userinfo = UserInfo::newFromName( $user->getName(), true );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( $userinfo, $userinfo->verified() );
// User name that does not exist should still be non-anon
$user = User::newFromName( 'DoesNotExist' );
$this->assertSame( 0, $user->getId(), 'User id is 0' );
$userinfo = UserInfo::newFromName( $user->getName() );
$this->assertFalse( $userinfo->isAnon() );
$this->assertFalse( $userinfo->isVerified() );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( '', $userinfo->getToken() );
$this->assertInstanceOf( User::class, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertFalse( $userinfo2->isAnon() );
$this->assertTrue( $userinfo2->isVerified() );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( '', $userinfo2->getToken() );
$this->assertInstanceOf( User::class, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$userinfo = UserInfo::newFromName( $user->getName(), true );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( $userinfo, $userinfo->verified() );
}
public function testNewFromUser() {
// User that exists
$user = $this->getTestSysop()->getUser();
$userinfo = UserInfo::newFromUser( $user );
$this->assertFalse( $userinfo->isAnon() );
$this->assertFalse( $userinfo->isVerified() );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( $user->getToken( true ), $userinfo->getToken() );
$this->assertSame( $user, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertFalse( $userinfo2->isAnon() );
$this->assertTrue( $userinfo2->isVerified() );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( $user->getToken( true ), $userinfo2->getToken() );
$this->assertSame( $user, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$userinfo = UserInfo::newFromUser( $user, true );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( $userinfo, $userinfo->verified() );
// User name that does not exist should still be non-anon
$user = User::newFromName( 'DoesNotExist' );
$this->assertSame( 0, $user->getId() );
$userinfo = UserInfo::newFromUser( $user );
$this->assertFalse( $userinfo->isAnon() );
$this->assertFalse( $userinfo->isVerified() );
$this->assertSame( $user->getId(), $userinfo->getId() );
$this->assertSame( $user->getName(), $userinfo->getName() );
$this->assertSame( '', $userinfo->getToken() );
$this->assertSame( $user, $userinfo->getUser() );
$userinfo2 = $userinfo->verified();
$this->assertNotSame( $userinfo2, $userinfo );
$this->assertSame( "<-:{$user->getId()}:{$user->getName()}>", (string)$userinfo );
$this->assertFalse( $userinfo2->isAnon() );
$this->assertTrue( $userinfo2->isVerified() );
$this->assertSame( $user->getId(), $userinfo2->getId() );
$this->assertSame( $user->getName(), $userinfo2->getName() );
$this->assertSame( '', $userinfo2->getToken() );
$this->assertSame( $user, $userinfo2->getUser() );
$this->assertSame( $userinfo2, $userinfo2->verified() );
$this->assertSame( "<+:{$user->getId()}:{$user->getName()}>", (string)$userinfo2 );
$userinfo = UserInfo::newFromUser( $user, true );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( $userinfo, $userinfo->verified() );
// Anonymous user gives anon
$userinfo = UserInfo::newFromUser( new User, false );
$this->assertTrue( $userinfo->isVerified() );
$this->assertSame( 0, $userinfo->getId() );
$this->assertSame( null, $userinfo->getName() );
}
}