diff options
author | diosmosis <benaka@piwik.pro> | 2015-09-08 00:59:06 +0300 |
---|---|---|
committer | diosmosis <benaka@piwik.pro> | 2015-09-10 23:35:21 +0300 |
commit | a94b3d49cef47b6e5b338ed4b8a83f3318fb1ffe (patch) | |
tree | d336840ff57d34fc834deead08e030ab625abd38 /plugins/ScheduledReports | |
parent | 1b3d7ff9bda710f9c840ba38b8f65d4aec0bae50 (diff) |
Add test for ScheduledReports API.generateReport exception catching. Includes making Proxy constructor public (for mocking) and using Common::sendHeader in ReportRenderer (so headers won't be sent twice).
Diffstat (limited to 'plugins/ScheduledReports')
-rw-r--r-- | plugins/ScheduledReports/tests/Integration/ApiTest.php | 59 |
1 files changed, 58 insertions, 1 deletions
diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php index 8ac7ac4c26..2f4b4020fa 100644 --- a/plugins/ScheduledReports/tests/Integration/ApiTest.php +++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php @@ -8,12 +8,18 @@ namespace Piwik\Plugins\ScheduledReports\tests; +use Piwik\API\Proxy; +use Piwik\DataTable; +use Piwik\Date; +use Piwik\Plugins\API\API; use Piwik\Plugins\MobileMessaging\API as APIMobileMessaging; use Piwik\Plugins\MobileMessaging\MobileMessaging; use Piwik\Plugins\ScheduledReports\API as APIScheduledReports; use Piwik\Plugins\ScheduledReports\Menu; +use Piwik\Plugins\ScheduledReports\ScheduledReports; use Piwik\Plugins\ScheduledReports\Tasks; use Piwik\Plugins\SitesManager\API as APISitesManager; +use Piwik\ReportRenderer; use Piwik\Scheduler\Schedule\Monthly; use Piwik\Scheduler\Schedule\Schedule; use Piwik\Scheduler\Task; @@ -41,7 +47,8 @@ class ApiTest extends IntegrationTestCase // setup the access layer self::setSuperUser(); - \Piwik\Plugin\Manager::getInstance()->loadPlugins(array('API', 'UserCountry', 'ScheduledReports', 'MobileMessaging')); + \Piwik\Plugin\Manager::getInstance()->loadPlugins(array('API', 'UserCountry', 'ScheduledReports', + 'MobileMessaging', 'VisitsSummary', 'Referrers')); \Piwik\Plugin\Manager::getInstance()->installLoadedPlugins(); APISitesManager::getInstance()->addSite("Test", array("http://piwik.net")); @@ -426,6 +433,56 @@ class ApiTest extends IntegrationTestCase $this->assertEquals($expectedReportTitle, $reportTitle); } + public function test_generateReport_CatchesIndividualReportProcessExceptions_WithoutFailingToGenerateWholeReport() + { + $realProxy = new Proxy(); + + $mockProxy = $this->getMock('Piwik\API\Proxy', array('call')); + $mockProxy->expects($this->any())->method('call')->willReturnCallback(function ($className, $methodName, $parametersRequest) use ($realProxy) { + switch ($className) { + case '\Piwik\Plugins\VisitsSummary\API': + $result = new DataTable(); + $result->addRowFromSimpleArray(array('label' => 'visits label', 'nb_visits' => 1)); + return $result; + case '\Piwik\Plugins\UserCountry\API': + throw new \Exception("error"); + case '\Piwik\Plugins\Referrers\API': + $result = new DataTable(); + $result->addRowFromSimpleArray(array('label' => 'referrers label', 'nb_visits' => 1)); + return $result; + case '\Piwik\Plugins\API\API': + return $realProxy->call($className, $methodName, $parametersRequest); + default: + throw new \Exception("Unexpected method $className::$methodName."); + } + }); + Proxy::setSingletonInstance($mockProxy); + + $idReport = APIScheduledReports::getInstance()->addReport( + 1, + '', + Schedule::PERIOD_DAY, + 0, + ScheduledReports::EMAIL_TYPE, + ReportRenderer::HTML_FORMAT, + array( + 'VisitsSummary_get', + 'UserCountry_getCountry', + 'Referrers_getWebsites', + ), + array(ScheduledReports::DISPLAY_FORMAT_PARAMETER => ScheduledReports::DISPLAY_FORMAT_TABLES_ONLY) + ); + + ob_start(); + $result = APIScheduledReports::getInstance()->generateReport($idReport, Date::factory('now')->toString(), + $language = false, $outputType = APIScheduledReports::OUTPUT_RETURN); + ob_end_clean(); + + $this->assertContains('id="VisitsSummary_get"', $result); + $this->assertContains('id="Referrers_getWebsites"', $result); + $this->assertNotContains('id="UserCountry_getCountry"', $result); + } + private function assertReportsEqual($report, $data) { foreach ($data as $key => $value) { |