Merge "Avoid "unittest_imagelinks" already exists error in tests"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 6 Jun 2018 18:21:21 +0000 (18:21 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 6 Jun 2018 18:21:21 +0000 (18:21 +0000)
1  2 
tests/phpunit/MediaWikiTestCase.php

@@@ -1373,7 -1373,7 +1373,7 @@@ abstract class MediaWikiTestCase extend
        }
  
        /**
-        * Undoes the dpecified schema overrides..
+        * Undoes the specified schema overrides..
         * Called once per test class, just before addDataOnce().
         *
         * @param IMaintainableDatabase $db
                $this->ensureMockDatabaseConnection( $db );
  
                $oldOverrides = $oldOverrides + self::$schemaOverrideDefaults;
-               $originalTables = $this->listOriginalTables( $db );
+               $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
  
                // Drop tables that need to be restored or removed.
                $tablesToDrop = array_merge( $oldOverrides['create'], $oldOverrides['alter'] );
                $this->ensureMockDatabaseConnection( $db );
  
                // Drop the tables that will be created by the schema scripts.
-               $originalTables = $this->listOriginalTables( $db );
+               $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
                $tablesToDrop = array_intersect( $originalTables, $overrides['create'] );
  
                if ( $tablesToDrop ) {
         * Lists all tables in the live database schema.
         *
         * @param IMaintainableDatabase $db
+        * @param string $prefix Either 'prefixed' or 'unprefixed'
         * @return array
         */
-       private function listOriginalTables( IMaintainableDatabase $db ) {
+       private function listOriginalTables( IMaintainableDatabase $db, $prefix = 'prefixed' ) {
                if ( !isset( $db->_originalTablePrefix ) ) {
                        throw new LogicException( 'No original table prefix know, cannot list tables!' );
                }
  
                $originalTables = $db->listTables( $db->_originalTablePrefix, __METHOD__ );
+               if ( $prefix === 'unprefixed' ) {
+                       $originalPrefixRegex = '/^' . preg_quote( $db->_originalTablePrefix ) . '/';
+                       $originalTables = array_map(
+                               function ( $pt ) use ( $originalPrefixRegex ) {
+                                       return preg_replace( $originalPrefixRegex, '', $pt );
+                               },
+                               $originalTables
+                       );
+               }
                return $originalTables;
        }
  
                        throw new LogicException( 'No original table prefix know, cannot restore tables!' );
                }
  
-               $originalTables = $this->listOriginalTables( $db );
+               $originalTables = $this->listOriginalTables( $db, 'unprefixed' );
                $tables = array_intersect( $tables, $originalTables );
  
                $dbClone = new CloneDatabase( $db, $tables, $db->tablePrefix(), $db->_originalTablePrefix );
                if ( $db ) {
                        $userTables = [ 'user', 'user_groups', 'user_properties', 'actor' ];
                        $pageTables = [ 'page', 'revision', 'ip_changes', 'revision_comment_temp',
 -                              'revision_actor_temp', 'comment' ];
 +                              'revision_actor_temp', 'comment', 'archive' ];
                        $coreDBDataTables = array_merge( $userTables, $pageTables );
  
                        // If any of the user or page tables were marked as used, we should clear all of them.