Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordiosmosis <benaka@piwik.pro>2015-09-08 00:59:06 +0300
committerdiosmosis <benaka@piwik.pro>2015-09-10 23:35:21 +0300
commita94b3d49cef47b6e5b338ed4b8a83f3318fb1ffe (patch)
treed336840ff57d34fc834deead08e030ab625abd38 /plugins/ScheduledReports
parent1b3d7ff9bda710f9c840ba38b8f65d4aec0bae50 (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.php59
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) {