wiki.techinc.nl/tests/phpunit/includes/logging/RightsLogFormatterTest.php
Reedy 85396a9c99 tests: Fix @covers and @coversDefaultClass to have leading \
Change-Id: I5629f91387f2ac453ee4341bfe4bba310bd52f03
2024-02-16 22:43:56 +00:00

232 lines
5.7 KiB
PHP

<?php
use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\LBFactory;
/**
* @covers \RightsLogFormatter
*/
class RightsLogFormatterTest extends LogFormatterTestCase {
protected function setUp(): void {
parent::setUp();
$db = $this->createNoOpMock( IDatabase::class, [ 'getInfinity' ] );
$db->method( 'getInfinity' )->willReturn( 'infinity' );
$lbFactory = $this->createMock( LBFactory::class );
$lbFactory->method( 'getReplicaDatabase' )->willReturn( $db );
$this->setService( 'DBLoadBalancerFactory', $lbFactory );
}
/**
* Provide different rows from the logging table to test
* for backward compatibility.
* Do not change the existing data, just add a new database row
*/
public static function provideRightsLogDatabaseRows() {
return [
// Current format
[
[
'type' => 'rights',
'action' => 'rights',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'User',
'params' => [
'4::oldgroups' => [],
'5::newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [],
'newmetadata' => [
[ 'expiry' => null ],
[ 'expiry' => '20160101123456' ]
],
],
],
[
'text' => 'Sysop changed group membership for User from (none) to '
. 'bureaucrat (temporary, until 12:34, 1 January 2016) and administrator',
'api' => [
'oldgroups' => [],
'newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [],
'newmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
[ 'group' => 'bureaucrat', 'expiry' => '2016-01-01T12:34:56Z' ],
],
],
],
],
// Previous format (oldgroups and newgroups as arrays, no metadata)
[
[
'type' => 'rights',
'action' => 'rights',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'User',
'params' => [
'4::oldgroups' => [],
'5::newgroups' => [ 'sysop', 'bureaucrat' ],
],
],
[
'text' => 'Sysop changed group membership for User from (none) to '
. 'administrator and bureaucrat',
'api' => [
'oldgroups' => [],
'newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [],
'newmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
[ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
],
],
],
],
// Legacy format (oldgroups and newgroups as numeric-keyed strings)
[
[
'type' => 'rights',
'action' => 'rights',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'User',
'params' => [
'',
'sysop, bureaucrat',
],
],
[
'legacy' => true,
'text' => 'Sysop changed group membership for User from (none) to '
. 'administrator and bureaucrat',
'api' => [
'oldgroups' => [],
'newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [],
'newmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
[ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
],
],
],
],
// Really old entry
[
[
'type' => 'rights',
'action' => 'rights',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'User',
'params' => [],
],
[
'legacy' => true,
'text' => 'Sysop changed group membership for User',
'api' => [],
],
],
];
}
/**
* @dataProvider provideRightsLogDatabaseRows
*/
public function testRightsLogDatabaseRows( $row, $extra ) {
$this->doTestLogFormatter( $row, $extra );
}
/**
* Provide different rows from the logging table to test
* for backward compatibility.
* Do not change the existing data, just add a new database row
*/
public static function provideAutopromoteLogDatabaseRows() {
return [
// Current format
[
[
'type' => 'rights',
'action' => 'autopromote',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'Sysop',
'params' => [
'4::oldgroups' => [ 'sysop' ],
'5::newgroups' => [ 'sysop', 'bureaucrat' ],
],
],
[
'text' => 'Sysop was automatically promoted from administrator to '
. 'administrator and bureaucrat',
'api' => [
'oldgroups' => [ 'sysop' ],
'newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
],
'newmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
[ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
],
],
],
],
// Legacy format
[
[
'type' => 'rights',
'action' => 'autopromote',
'comment' => 'rights comment',
'user' => 0,
'user_text' => 'Sysop',
'namespace' => NS_USER,
'title' => 'Sysop',
'params' => [
'sysop',
'sysop, bureaucrat',
],
],
[
'legacy' => true,
'text' => 'Sysop was automatically promoted from administrator to '
. 'administrator and bureaucrat',
'api' => [
'oldgroups' => [ 'sysop' ],
'newgroups' => [ 'sysop', 'bureaucrat' ],
'oldmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
],
'newmetadata' => [
[ 'group' => 'sysop', 'expiry' => 'infinity' ],
[ 'group' => 'bureaucrat', 'expiry' => 'infinity' ],
],
],
],
],
];
}
/**
* @dataProvider provideAutopromoteLogDatabaseRows
*/
public function testAutopromoteLogDatabaseRows( $row, $extra ) {
$this->doTestLogFormatter( $row, $extra );
}
}