]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / tests / phpunit / includes / specials / QueryAllSpecialPagesTest.php
diff --git a/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php b/tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php
new file mode 100644 (file)
index 0000000..1208a20
--- /dev/null
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Test class to run the query of most of all our special pages
+ *
+ * Copyright © 2011, Antoine Musso
+ *
+ * @author Antoine Musso
+ * @group Database
+ */
+
+/**
+ * @covers QueryPage<extended>
+ */
+class QueryAllSpecialPagesTest extends MediaWikiTestCase {
+
+       /**
+        * @var SpecialPage[]
+        */
+       private $queryPages;
+
+       /** List query pages that can not be tested automatically */
+       protected $manualTest = [
+               'LinkSearchPage'
+       ];
+
+       /**
+        * Pages whose query use the same DB table more than once.
+        * This is used to skip testing those pages when run against a MySQL backend
+        * which does not support reopening a temporary table. See upstream bug:
+        * https://bugs.mysql.com/bug.php?id=10327
+        */
+       protected $reopensTempTable = [
+               'BrokenRedirects',
+       ];
+
+       /**
+        * Initialize all query page objects
+        */
+       function __construct() {
+               parent::__construct();
+
+               foreach ( QueryPage::getPages() as $page ) {
+                       $class = $page[0];
+                       $name = $page[1];
+                       if ( !in_array( $class, $this->manualTest ) ) {
+                               $this->queryPages[$class] = SpecialPageFactory::getPage( $name );
+                       }
+               }
+       }
+
+       /**
+        * Test SQL for each of our QueryPages objects
+        * @group Database
+        */
+       public function testQuerypageSqlQuery() {
+               global $wgDBtype;
+
+               foreach ( $this->queryPages as $page ) {
+                       // With MySQL, skips special pages reopening a temporary table
+                       // See https://bugs.mysql.com/bug.php?id=10327
+                       if (
+                               $wgDBtype === 'mysql'
+                               && in_array( $page->getName(), $this->reopensTempTable )
+                       ) {
+                               $this->markTestSkipped( "SQL query for page {$page->getName()} "
+                                       . "can not be tested on MySQL backend (it reopens a temporary table)" );
+                               continue;
+                       }
+
+                       $msg = "SQL query for page {$page->getName()} should give a result wrapper object";
+
+                       $result = $page->reallyDoQuery( 50 );
+                       if ( $result instanceof ResultWrapper ) {
+                               $this->assertTrue( true, $msg );
+                       } else {
+                               $this->assertFalse( false, $msg );
+                       }
+               }
+       }
+}