]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / extensions / TitleBlacklist / tests / phpunit / ApiQueryTitleBlacklistTest.php
diff --git a/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php b/extensions/TitleBlacklist/tests/phpunit/ApiQueryTitleBlacklistTest.php
new file mode 100644 (file)
index 0000000..5e775ce
--- /dev/null
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Test the TitleBlacklist API.
+ *
+ * This wants to run with phpunit.php, like so:
+ * cd $IP/tests/phpunit
+ * php phpunit.php ../../extensions/TitleBlacklist/tests/ApiQueryTitleBlacklistTest.php
+ *
+ * The blacklist file is `testSource` and shared by all tests.
+ *
+ * Ian Baker <ian@wikimedia.org>
+ */
+
+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 <newaccountonly>
+                       '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: <code>[Bb]ar #example blacklist entry</code>",
+                       $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'
+               );
+       }
+}