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