From 548a33d380bf51cd9e36cd41701368f66de2e94c Mon Sep 17 00:00:00 2001
From: diosmosis <benaka@piwik.pro>
Date: Tue, 4 Nov 2014 10:55:41 -0800
Subject: [PATCH] Allow UI tests to delete archiving tables.

---
 core/DbHelper.php                                | 16 +++++++++++++++-
 tests/PHPUnit/Fixtures/UITestFixture.php         |  1 +
 .../Framework/TestCase/SystemTestCase.php        |  8 +-------
 tests/PHPUnit/TestingEnvironment.php             | 11 +++++++++++
 4 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/core/DbHelper.php b/core/DbHelper.php
index 8dbf7d0a9e..0c5ed79059 100644
--- a/core/DbHelper.php
+++ b/core/DbHelper.php
@@ -11,6 +11,7 @@ namespace Piwik;
 use Exception;
 use Piwik\Db\Adapter;
 use Piwik\Db\Schema;
+use Piwik\DataAccess\ArchiveTableCreator;
 
 /**
  * Contains database related helper functions.
@@ -173,4 +174,17 @@ class DbHelper
         return Schema::getInstance()->getTableCreateSql($tableName);
     }
 
-}
+    /**
+     * Deletes archive tables. For use in tests.
+     */
+    public static function deleteArchiveTables()
+    {
+        foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
+            Log::debug("Dropping table $table");
+
+            Db::query("DROP TABLE IF EXISTS `$table`");
+        }
+
+        ArchiveTableCreator::refreshTableList($forceReload = true);
+    }
+}
\ No newline at end of file
diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php
index 88921238fa..8ff2282402 100644
--- a/tests/PHPUnit/Fixtures/UITestFixture.php
+++ b/tests/PHPUnit/Fixtures/UITestFixture.php
@@ -21,6 +21,7 @@ use Piwik\Plugins\UsersManager\API as UsersManagerAPI;
 use Piwik\Plugins\SitesManager\API as SitesManagerAPI;
 use Piwik\WidgetsList;
 use Piwik\Tests\Framework\OverrideLogin;
+use Piwik\Tests\Framework\TestCase\SystemTestCase;
 
 /**
  * Fixture for UI tests.
diff --git a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
index b515cad839..e153dc5f2f 100755
--- a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
@@ -569,13 +569,7 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
      */
     public static function deleteArchiveTables()
     {
-        foreach (ArchiveTableCreator::getTablesArchivesInstalled() as $table) {
-            Log::debug("Dropping table $table");
-
-            Db::query("DROP TABLE IF EXISTS `$table`");
-        }
-
-        ArchiveTableCreator::refreshTableList($forceReload = true);
+        DbHelper::deleteArchiveTables();
     }
 
     protected function skipWhenPhp53()
diff --git a/tests/PHPUnit/TestingEnvironment.php b/tests/PHPUnit/TestingEnvironment.php
index b2b875d7fc..c52556fa7d 100644
--- a/tests/PHPUnit/TestingEnvironment.php
+++ b/tests/PHPUnit/TestingEnvironment.php
@@ -5,6 +5,7 @@ use Piwik\Config;
 use Piwik\Piwik;
 use Piwik\Option;
 use Piwik\Plugin\Manager as PluginManager;
+use Piwik\DbHelper;
 
 require_once PIWIK_INCLUDE_PATH . "/core/Config.php";
 
@@ -217,6 +218,16 @@ class Piwik_TestingEnvironment
                 // pass
             }
         });
+        Piwik::addAction('Platform.initialized', function () use ($testingEnvironment) {
+            static $archivingTablesDeleted = false;
+
+            if ($testingEnvironment->deleteArchiveTables
+                && !$archivingTablesDeleted
+            ) {
+                $archivingTablesDeleted = true;
+                DbHelper::deleteArchiveTables();
+            }
+        });
 
         $testingEnvironment->logVariables();
         $testingEnvironment->executeSetupTestEnvHook();
-- 
GitLab