*/ ini_set( 'include_path', ini_get( 'include_path' ) . ':' . __DIR__ . '/../../../tests/phpunit/includes/api' ); /** * @group medium **/ class ApiQueryTitleBlacklistTest extends ApiTestCase { function setUp() { parent::setUp(); $this->doLogin(); TitleBlacklist::destroySingleton(); $this->setMwGlobals( 'wgTitleBlacklistSources', [ [ 'type' => 'file', 'src' => __DIR__ . '/testSource', ], ] ); } function tearDown() { TitleBlacklist::destroySingleton(); parent::tearDown(); } /** * Verify we allow a title which is not blacklisted */ function testCheckingUnlistedTitle() { $unlisted = $this->doApiRequest( [ 'action' => 'titleblacklist', // evil_acc is blacklisted as 'tbtitle' => 'evil_acc', 'tbaction' => 'create', 'tbnooverride' => true, ] ); $this->assertEquals( 'ok', $unlisted[0]['titleblacklist']['result'], 'Not blacklisted title returns ok' ); } /** * Verify tboverride works */ function testTboverride() { global $wgGroupPermissions; // Allow all users to override the titleblacklist $this->stashMwGlobals( 'wgGroupPermissions' ); $wgGroupPermissions['*']['tboverride'] = true; $unlisted = $this->doApiRequest( [ 'action' => 'titleblacklist', 'tbtitle' => 'bar', 'tbaction' => 'create', ] ); $this->assertEquals( 'ok', $unlisted[0]['titleblacklist']['result'], 'Blacklisted title returns ok if the user is allowd to tboverride' ); } /** * Verify a blacklisted title gives out an error. */ function testCheckingBlackListedTitle() { $listed = $this->doApiRequest( [ 'action' => 'titleblacklist', 'tbtitle' => 'bar', 'tbaction' => 'create', 'tbnooverride' => true, ] ); $this->assertEquals( 'blacklisted', $listed[0]['titleblacklist']['result'], 'Listed title returns error' ); $this->assertEquals( "The title \"bar\" has been banned from creation.\nIt matches the following " . "blacklist entry: [Bb]ar #example blacklist entry", $listed[0]['titleblacklist']['reason'], 'Listed title error text is as expected' ); $this->assertEquals( "titleblacklist-forbidden-edit", $listed[0]['titleblacklist']['message'], 'Correct blacklist message name is returned' ); $this->assertEquals( "[Bb]ar #example blacklist entry", $listed[0]['titleblacklist']['line'], 'Correct blacklist line is returned' ); } /** * Tests integration with the AntiSpoof extension */ function testAntiSpoofIntegration() { if ( !class_exists( 'AntiSpoof' ) ) { $this->markTestSkipped( "This test requires the AntiSpoof extension" ); } $listed = $this->doApiRequest( [ 'action' => 'titleblacklist', 'tbtitle' => 'AVVVV', 'tbaction' => 'create', 'tbnooverride' => true, ] ); $this->assertEquals( 'blacklisted', $listed[0]['titleblacklist']['result'], 'Spoofed title is blacklisted' ); } }