/** * Tests forbidden call to setDay on Daily */ public function testSetDayScheduledTimeDaily() { try { $dailySchedule = Schedule::factory('daily'); $dailySchedule->setDay(1); } catch (Exception $e) { return; } $this->fail('Expected exception not raised'); }
public function schedule() { foreach (API::getInstance()->getReports() as $report) { if (!$report['deleted'] && $report['period'] != Schedule::PERIOD_NEVER) { $schedule = Schedule::getScheduledTimeForPeriod($report['period']); $schedule->setHour($report['hour']); $schedule->setTimezone('UTC'); // saved hour is UTC always $this->custom(API::getInstance(), 'sendReport', $report['idreport'], $schedule); } } }
/** * @group Plugins */ public function testGetScheduledTasks() { // stub API to control getReports() return values $report1 = self::getDailyPDFReportData($this->idSite); $report1['idreport'] = 1; $report1['hour'] = 0; $report1['deleted'] = 0; $report2 = self::getMonthlyEmailReportData($this->idSite); $report2['idreport'] = 2; $report2['idsite'] = 2; $report2['hour'] = 0; $report2['deleted'] = 0; $report3 = self::getMonthlyEmailReportData($this->idSite); $report3['idreport'] = 3; $report3['deleted'] = 1; // should not be scheduled $report4 = self::getMonthlyEmailReportData($this->idSite); $report4['idreport'] = 4; $report4['idsite'] = 1; $report4['hour'] = 8; $report4['deleted'] = 0; $report5 = self::getMonthlyEmailReportData($this->idSite); $report5['idreport'] = 5; $report5['idsite'] = 2; $report5['hour'] = 8; $report5['deleted'] = 0; // test no exception is raised when a scheduled report is set to never send $report6 = self::getMonthlyEmailReportData($this->idSite); $report6['idreport'] = 6; $report6['period'] = Schedule::PERIOD_NEVER; $report6['deleted'] = 0; $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))); \Piwik\Plugins\ScheduledReports\API::setSingletonInstance($stubbedAPIScheduledReports); // initialize sites 1 and 2 Site::setSites(array(1 => array('timezone' => 'Europe/Paris'), 2 => array('timezone' => 'UTC-6.5'))); // expected tasks $scheduleTask1 = Schedule::factory('daily'); $scheduleTask1->setHour(0); // paris is UTC-1, period ends at 23h UTC $scheduleTask1->setTimezone('Europe/Paris'); $scheduleTask2 = new Monthly(); $scheduleTask2->setHour(0); // site is UTC-6.5, period ends at 6h30 UTC, smallest resolution is hour $scheduleTask2->setTimezone('UTC-6.5'); $scheduleTask3 = new Monthly(); $scheduleTask3->setHour(8); // paris is UTC-1, configured to be sent at 8h $scheduleTask3->setTimezone('Europe/Paris'); $scheduleTask4 = new Monthly(); $scheduleTask4->setHour(8); // site is UTC-6.5, configured to be sent at 8h $scheduleTask4->setTimezone('UTC-6.5'); $expectedTasks = array(new Task(APIScheduledReports::getInstance(), 'sendReport', 1, $scheduleTask1), new Task(APIScheduledReports::getInstance(), 'sendReport', 2, $scheduleTask2), new Task(APIScheduledReports::getInstance(), 'sendReport', 4, $scheduleTask3), new Task(APIScheduledReports::getInstance(), 'sendReport', 5, $scheduleTask4)); $pdfReportPlugin = new Tasks(); $pdfReportPlugin->schedule(); $tasks = $pdfReportPlugin->getScheduledTasks(); $this->assertEquals($expectedTasks, $tasks); \Piwik\Plugins\ScheduledReports\API::unsetInstance(); }
public function provideContainerConfig() { if (!defined('DEBUG_FORCE_SCHEDULED_TASKS')) { define('DEBUG_FORCE_SCHEDULED_TASKS', 1); } $testingEnvironment = new \Piwik\Tests\Framework\TestingEnvironmentVariables(); $tasksToAdd = array(); if ($testingEnvironment->addFailingScheduledTask) { if ($testingEnvironment->scheduledTaskFailureShouldBeFatal) { $tasksToAdd[] = new Task($this, 'triggerFatalError', null, Schedule::factory('hourly')); } else { $tasksToAdd[] = new Task($this, 'throwScheduledTaskException', null, Schedule::factory('hourly')); } } if ($testingEnvironment->addScheduledTask) { $tasksToAdd[] = new Task($this, 'markScheduledTaskExecutionFinished', null, Schedule::factory('hourly')); } $result = array(); if (!empty($tasksToAdd)) { $initialTask = new Task($this, 'markCustomTaskExecuted', null, Schedule::factory('hourly')); $tasksToAdd = array_merge(array($initialTask), $tasksToAdd); $mockTaskLoader = $this->getMock('Piwik\\Scheduler\\TaskLoader', array('loadTasks')); $mockTaskLoader->expects($this->any())->method('loadTasks')->will($this->returnValue($tasksToAdd)); $result['Piwik\\Scheduler\\TaskLoader'] = $mockTaskLoader; } return $result; }
/** * Schedules the given tasks/method to run depending at the given scheduled time. Unlike the convenient methods * such as {@link hourly()} you need to specify the object on which the given method should be called. This can be * either an instance of a class or a class name. For more information about these parameters see {@link hourly()} * * @param string|object $objectOrClassName * @param string $methodName * @param null|string $methodParameter * @param string|Schedule $time * @param int $priority * * @return \Piwik\Scheduler\Schedule\Schedule * * @throws \Exception If a wrong time format is given. Needs to be either a string such as 'daily', 'weekly', ... * or an instance of {@link Piwik\Scheduler\Schedule\Schedule} * * @api */ protected function custom($objectOrClassName, $methodName, $methodParameter, $time, $priority = self::NORMAL_PRIORITY) { $this->checkIsValidTask($objectOrClassName, $methodName); if (is_string($time)) { $time = Schedule::factory($time); } if (!$time instanceof Schedule) { throw new \Exception('$time should be an instance of Schedule'); } $this->scheduleTask(new Task($objectOrClassName, $methodName, $methodParameter, $time, $priority)); return $time; }