wiki.techinc.nl/tests/phpunit/maintenance/ProtectTest.php
Dreamy Jazz 67b9e9465f Test protect.php
Why:
* The maintenance scripts in core are mostly untested and testing
  the less complex scripts will improve the test coverage in core.

What:
* Test protect.php

Bug: T371167
Change-Id: Ib49d5dec2121ac9a8030c4aabeadaac37c42bad3
2024-07-27 08:50:43 +00:00

55 lines
1.7 KiB
PHP

<?php
namespace MediaWiki\Tests\Maintenance;
use Protect;
/**
* @covers \Protect
* @group Database
* @author Dreamy Jazz
*/
class ProtectTest extends MaintenanceBaseTestCase {
protected function getMaintenanceClass() {
return Protect::class;
}
/** @dataProvider provideExecute */
public function testExecute( $options, $expectedProtectionLevel ) {
$testPage = $this->getExistingTestPage();
// Set the options from $options.
foreach ( $options as $name => $option ) {
$this->maintenance->setOption( $name, $option );
}
// Call ::execute
$this->maintenance->setArg( 'title', $testPage );
$this->maintenance->execute();
// Verify that the specified protection level has been applied
$this->expectOutputString( "Updating protection status..." . "done\n" );
$resultingPageRestrictions = $this->getServiceContainer()->getRestrictionStore()
->getAllRestrictions( $testPage );
foreach ( $resultingPageRestrictions as $restrictions ) {
$this->assertContains( $expectedProtectionLevel, $restrictions );
}
}
public static function provideExecute() {
return [
'Sysop protection' => [ [], 'sysop' ],
'Autoconfirmed protection' => [ [ 'semiprotect' => 1 ], 'autoconfirmed' ],
];
}
public function testExecuteWhenReadOnly() {
// Get a test page and then add it as an argument to the maintenance script
$testPage = $this->getExistingTestPage();
$this->maintenance->setArg( 'title', $testPage );
// Enable read-only mode
$this->getServiceContainer()->getReadOnlyMode()->setReason( 'test' );
// Call ::execute
$this->maintenance->execute();
// Verify that the updating the protection status failed.
$this->expectOutputString( "Updating protection status..." . "failed\n" );
}
}