Skip to content
Extraits de code Groupes Projets
Valider a94b3d49 rédigé par diosmosis's avatar diosmosis
Parcourir les fichiers

Add test for ScheduledReports API.generateReport exception catching. Includes...

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).
parent 1b3d7ff9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -37,10 +37,7 @@ class Proxy extends Singleton ...@@ -37,10 +37,7 @@ class Proxy extends Singleton
// when a parameter doesn't have a default value we use this // when a parameter doesn't have a default value we use this
private $noDefaultValue; private $noDefaultValue;
/** public function __construct()
* protected constructor
*/
protected function __construct()
{ {
$this->noDefaultValue = new NoDefaultValue(); $this->noDefaultValue = new NoDefaultValue();
} }
......
...@@ -177,17 +177,17 @@ abstract class ReportRenderer extends BaseFactory ...@@ -177,17 +177,17 @@ abstract class ReportRenderer extends BaseFactory
$filename = ReportRenderer::makeFilenameWithExtension($filename, $extension); $filename = ReportRenderer::makeFilenameWithExtension($filename, $extension);
ProxyHttp::overrideCacheControlHeaders(); ProxyHttp::overrideCacheControlHeaders();
header('Content-Description: File Transfer'); Common::sendHeader('Content-Description: File Transfer');
header('Content-Type: ' . $contentType); Common::sendHeader('Content-Type: ' . $contentType);
header('Content-Disposition: attachment; filename="' . str_replace('"', '\'', basename($filename)) . '";'); Common::sendHeader('Content-Disposition: attachment; filename="' . str_replace('"', '\'', basename($filename)) . '";');
header('Content-Length: ' . strlen($content)); Common::sendHeader('Content-Length: ' . strlen($content));
echo $content; echo $content;
} }
protected static function inlineToBrowser($contentType, $content) protected static function inlineToBrowser($contentType, $content)
{ {
header('Content-Type: ' . $contentType); Common::sendHeader('Content-Type: ' . $contentType);
echo $content; echo $content;
} }
......
...@@ -8,12 +8,18 @@ ...@@ -8,12 +8,18 @@
namespace Piwik\Plugins\ScheduledReports\tests; 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\API as APIMobileMessaging;
use Piwik\Plugins\MobileMessaging\MobileMessaging; use Piwik\Plugins\MobileMessaging\MobileMessaging;
use Piwik\Plugins\ScheduledReports\API as APIScheduledReports; use Piwik\Plugins\ScheduledReports\API as APIScheduledReports;
use Piwik\Plugins\ScheduledReports\Menu; use Piwik\Plugins\ScheduledReports\Menu;
use Piwik\Plugins\ScheduledReports\ScheduledReports;
use Piwik\Plugins\ScheduledReports\Tasks; use Piwik\Plugins\ScheduledReports\Tasks;
use Piwik\Plugins\SitesManager\API as APISitesManager; use Piwik\Plugins\SitesManager\API as APISitesManager;
use Piwik\ReportRenderer;
use Piwik\Scheduler\Schedule\Monthly; use Piwik\Scheduler\Schedule\Monthly;
use Piwik\Scheduler\Schedule\Schedule; use Piwik\Scheduler\Schedule\Schedule;
use Piwik\Scheduler\Task; use Piwik\Scheduler\Task;
...@@ -41,7 +47,8 @@ class ApiTest extends IntegrationTestCase ...@@ -41,7 +47,8 @@ class ApiTest extends IntegrationTestCase
// setup the access layer // setup the access layer
self::setSuperUser(); 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(); \Piwik\Plugin\Manager::getInstance()->installLoadedPlugins();
APISitesManager::getInstance()->addSite("Test", array("http://piwik.net")); APISitesManager::getInstance()->addSite("Test", array("http://piwik.net"));
...@@ -426,6 +433,56 @@ class ApiTest extends IntegrationTestCase ...@@ -426,6 +433,56 @@ class ApiTest extends IntegrationTestCase
$this->assertEquals($expectedReportTitle, $reportTitle); $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) private function assertReportsEqual($report, $data)
{ {
foreach ($data as $key => $value) { foreach ($data as $key => $value) {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter