wiki.techinc.nl/tests/phpunit/integration/includes/StubGlobalUserTest.php
Reedy 6e29611642 Remove or replace usages of "sanity"
Still some more to go...

Bug: T254646
Change-Id: Ia117f01e443c35b4765f3275cab4f2707e1be96f
2021-11-21 16:42:31 +00:00

169 lines
4.3 KiB
PHP

<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
// phpcs:disable MediaWiki.Usage.DeprecatedGlobalVariables.Deprecated$wgUser
/**
* Tests the StubGlobalUser, including magic support for __get() and __set()
*
* @author DannyS712
*
* @covers \StubGlobalUser
*/
class StubGlobalUserTest extends MediaWikiIntegrationTestCase {
/** @var int */
private $oldErrorLevel;
protected function setUp(): void {
parent::setUp();
// Make sure deprecation notices are seen
$this->oldErrorLevel = error_reporting( -1 );
// Using User::newFromRow() to avoid needing any integration
$userFields = [
'user_id' => 12345,
];
$realUser = User::newFromRow( (object)$userFields );
StubGlobalUser::setUser( $realUser );
}
protected function tearDown(): void {
error_reporting( $this->oldErrorLevel );
parent::tearDown();
}
public function testRealUser() {
// Should not be emitting deprecation warnings
global $wgUser;
$this->assertInstanceOf( StubGlobalUser::class, $wgUser );
$real = StubGlobalUser::getRealUser( $wgUser );
$this->assertInstanceOf( User::class, $real );
$real2 = StubGlobalUser::getRealUser( $real );
$this->assertSame( $real, $real2 );
}
public function testRealUser_exception() {
$this->expectException( InvalidArgumentException::class );
$this->expectExceptionMessage(
'$globalUser must be a User (or StubGlobalUser), got integer'
);
StubGlobalUser::getRealUser( 12345 );
}
public function testMagicCall() {
$this->expectDeprecation();
$this->expectDeprecationMessage( 'Use of $wgUser was deprecated in MediaWiki 1.35' );
global $wgUser;
$this->assertInstanceOf(
StubGlobalUser::class,
$wgUser,
'Check: $wgUser should be a StubGlobalUser at the start of the test'
);
$this->assertSame(
12345,
$wgUser->getId(),
'__call() based on id set in ::setUp()'
);
$this->assertInstanceOf(
User::class,
$wgUser,
'__call() resulted in unstubbing'
);
}
public function testGetMagic() {
$this->expectDeprecation();
$this->expectDeprecationMessage( 'Use of $wgUser was deprecated in MediaWiki 1.35' );
global $wgUser;
$this->assertInstanceOf(
StubGlobalUser::class,
$wgUser,
'Check: $wgUser should be a StubGlobalUser at the start of the test'
);
$this->assertSame(
12345,
$wgUser->mId,
'__get() based on id set in ::setUp()'
);
$this->assertInstanceOf(
User::class,
$wgUser,
'__get() resulted in unstubbing'
);
}
public function testSetMagic() {
// This test is why we need StubGlobalUser::_unstub to override StubObject::_unstub
// and not try to detect and throw exceptions in unstub loops - for some reason it
// thinks this creates a loop.
$this->expectDeprecation();
$this->expectDeprecationMessage( 'Use of $wgUser was deprecated in MediaWiki 1.35' );
global $wgUser;
$this->assertInstanceOf(
StubGlobalUser::class,
$wgUser,
'Check: $wgUser should be a StubGlobalUser at the start of the test'
);
$wgUser->mId = 2000;
$this->assertInstanceOf(
User::class,
$wgUser,
'__set() resulted in unstubbing'
);
$this->assertSame(
2000,
$wgUser->mId,
'__set() call worked'
);
}
public function testDeprecationEmittedWhenReassigned() {
$this->expectDeprecation();
global $wgUser;
$wgUser = new User;
}
/**
* @doesNotPerformAssertions
*/
public function testReassignmentWithRestoring() {
global $wgUser;
$oldUser = $wgUser;
$wgUser = new User;
$wgUser = $oldUser;
}
/**
* @doesNotPerformAssertions
*/
public function testSetUserNoDeprecation() {
StubGlobalUser::setUser( new User );
}
}