From 7da0007856df9b35891e484c9320a37749041ff3 Mon Sep 17 00:00:00 2001
From: mattab <matthieu.aubry@gmail.com>
Date: Fri, 11 Oct 2013 09:25:12 +1300
Subject: [PATCH] Refs #4208 refactor some singletons

---
 core/Singleton.php                             |  9 +++++++++
 tests/PHPUnit/Plugins/MobileMessagingTest.php  | 11 ++++-------
 tests/PHPUnit/Plugins/ScheduledReportsTest.php | 13 +++++--------
 tests/PHPUnit/proxy/index.php                  |  2 +-
 4 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/core/Singleton.php b/core/Singleton.php
index 7e7679c67a..73bbd26196 100644
--- a/core/Singleton.php
+++ b/core/Singleton.php
@@ -34,4 +34,13 @@ class Singleton
         $class = get_called_class();
         unset(self::$instances[$class]);
     }
+
+    /**
+     * Sets the singleton instance. For testing purposes.
+     */
+    public static function setSingletonInstance($instance)
+    {
+        $class = get_called_class();
+        self::$instances[$class] = $instance;
+    }
 }
diff --git a/tests/PHPUnit/Plugins/MobileMessagingTest.php b/tests/PHPUnit/Plugins/MobileMessagingTest.php
index be6c6bdf6d..f39bce5161 100644
--- a/tests/PHPUnit/Plugins/MobileMessagingTest.php
+++ b/tests/PHPUnit/Plugins/MobileMessagingTest.php
@@ -213,7 +213,7 @@ class MobileMessagingTest extends DatabaseTestCase
      */
     public function testPhoneNumberIsSanitized()
     {
-        $mobileMessagingAPI = new APIMobileMessaging();
+        $mobileMessagingAPI = APIMobileMessaging::getInstance();
         $mobileMessagingAPI->setSMSAPICredential('StubbedProvider', '');
         $mobileMessagingAPI->addPhoneNumber('  6  76 93 26 47');
         $this->assertEquals('676932647', key($mobileMessagingAPI->getPhoneNumbers()));
@@ -246,21 +246,18 @@ class MobileMessagingTest extends DatabaseTestCase
              ),
         );
 
-        $stubbedAPIMobileMessaging = $this->getMock('\\Piwik\\Plugins\\MobileMessaging\\API');
+        $stubbedAPIMobileMessaging = $this->getMock('\\Piwik\\Plugins\\MobileMessaging\\API', array('sendSMS', 'getInstance'), $arguments = array(), $mockClassName = '', $callOriginalConstructor = false);
         $stubbedAPIMobileMessaging->expects($this->once())->method('sendSMS')->with(
             $this->equalTo($expectedReportContent, 0),
             $this->equalTo($expectedPhoneNumber, 1),
             $this->equalTo($expectedFrom, 2)
         );
 
-        $stubbedAPIMobileMessagingClass = new ReflectionProperty('\\Piwik\\Plugins\\MobileMessaging\\API', 'instance');
-        $stubbedAPIMobileMessagingClass->setAccessible(true);
-        $stubbedAPIMobileMessagingClass->setValue($stubbedAPIMobileMessaging);
+        \Piwik\Plugins\MobileMessaging\API::setSingletonInstance($stubbedAPIMobileMessaging);
 
         $mobileMessaging = new MobileMessaging();
         $mobileMessaging->sendReport($notificationInfo);
 
-        // restore API
-        $stubbedAPIMobileMessagingClass->setValue(null);
+        \Piwik\Plugins\MobileMessaging\API::unsetInstance();
     }
 }
diff --git a/tests/PHPUnit/Plugins/ScheduledReportsTest.php b/tests/PHPUnit/Plugins/ScheduledReportsTest.php
index 71c2b17cac..f46390a176 100644
--- a/tests/PHPUnit/Plugins/ScheduledReportsTest.php
+++ b/tests/PHPUnit/Plugins/ScheduledReportsTest.php
@@ -356,14 +356,11 @@ class ScheduledReportsTest extends DatabaseTestCase
         $report6['period'] = ScheduledTime::PERIOD_NEVER;
         $report6['deleted'] = 0;
 
-        $stubbedAPIScheduledReports = $this->getMock('\\Piwik\\Plugins\\ScheduledReports\\API');
+        $stubbedAPIScheduledReports = $this->getMock('\\Piwik\\Plugins\\ScheduledReports\\API', array('getReports', 'getInstance'), $arguments = array(), $mockClassName = '', $callOriginalConstructor = false);
         $stubbedAPIScheduledReports->expects($this->any())->method('getReports')->will($this->returnValue(
                 array($report1, $report2, $report3, $report4, $report5, $report6))
         );
-
-        $stubbedAPIScheduledReportsClass = new ReflectionProperty('\\Piwik\\Plugins\\ScheduledReports\\API', 'instance');
-        $stubbedAPIScheduledReportsClass->setAccessible(true);
-        $stubbedAPIScheduledReportsClass->setValue($stubbedAPIScheduledReports);
+        \Piwik\Plugins\ScheduledReports\API::setSingletonInstance($stubbedAPIScheduledReports);
 
         // initialize sites 1 and 2
         Site::$infoSites = array(
@@ -396,8 +393,8 @@ class ScheduledReportsTest extends DatabaseTestCase
         $pdfReportPlugin->getScheduledTasks($tasks);
         $this->assertEquals($expectedTasks, $tasks);
 
-        // restore API
-        $stubbedAPIScheduledReportsClass->setValue(null);
+        \Piwik\Plugins\ScheduledReports\API::unsetInstance();
+
     }
 
     /**
@@ -424,7 +421,7 @@ class ScheduledReportsTest extends DatabaseTestCase
         );
         $getReportSubjectAndReportTitle->setAccessible(true);
 
-        list($reportSubject, $reportTitle) = $getReportSubjectAndReportTitle->invoke(new APIScheduledReports(), $websiteName, $reports);
+        list($reportSubject, $reportTitle) = $getReportSubjectAndReportTitle->invoke( APIScheduledReports::getInstance(), $websiteName, $reports);
         $this->assertEquals($expectedReportSubject, $reportSubject);
         $this->assertEquals($expectedReportTitle, $reportTitle);
     }
diff --git a/tests/PHPUnit/proxy/index.php b/tests/PHPUnit/proxy/index.php
index 7d2d40b550..59dbab1ec5 100644
--- a/tests/PHPUnit/proxy/index.php
+++ b/tests/PHPUnit/proxy/index.php
@@ -21,7 +21,7 @@ Cache::deleteTrackerCache();
 define('PIWIK_ENABLE_DISPATCH', false);
 include PIWIK_INCLUDE_PATH . '/index.php';
 
-$controller = new \Piwik\FrontController;
+$controller = \Piwik\FrontController::getInstance();
 $controller->init();
 $controller->dispatch();
 
-- 
GitLab