1
0
قرینه از https://github.com/matomo-org/matomo.git synced 2025-08-25 00:17:37 +00:00
Files
matomo/tests/PHPUnit/Unit/Scheduler/TimetableTest.php
Michal Kleiner 9a3ef94df6 [Coding Style] Enable rule PSR12.Files.FileHeader + unify file headers (#22132)
* [Coding Style] Enable rule PSR12.Files.FileHeader

* Apply CS

* Replace Piwik with Matomo in file headers

* Unify file headers (position, no. of lines, https links)

* Rebuild dist files

* Apply CS

* Fix system test that relies on line numbers in a file that had the file header updated

---------

Co-authored-by: Stefan Giehl <stefan@matomo.org>
2024-04-20 20:50:47 +02:00

182 خطوط
5.3 KiB
PHP

<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Tests\Unit\Scheduler;
use Piwik\Date;
use Piwik\Scheduler\Task;
use Piwik\Scheduler\Timetable;
use Piwik\Tests\Framework\Mock\PiwikOption;
use Piwik\Option;
/**
* @group Scheduler
*/
class TimetableTest extends \PHPUnit\Framework\TestCase
{
private $timetable = array(
'CoreAdminHome.purgeOutdatedArchives' => 1355529607,
'PrivacyManager.deleteReportData_1' => 1322229607,
);
public function tearDown(): void
{
self::resetPiwikOption();
}
/**
* Dataprovider for testGetTimetableFromOptionValue
*/
public function getTimetableFromOptionValueTestCases()
{
return array(
// invalid option values should return a fresh array
array(array(), false),
array(array(), null),
array(array(), 1),
array(array(), ''),
array(array(), 'test'),
// valid serialized array
array(
array(
'CoreAdminHome.purgeOutdatedArchives' => 1355529607,
'PrivacyManager.deleteReportData' => 1355529607,
),
'a:2:{s:35:"CoreAdminHome.purgeOutdatedArchives";i:1355529607;s:31:"PrivacyManager.deleteReportData";i:1355529607;}'
),
);
}
/**
* @dataProvider getTimetableFromOptionValueTestCases
*/
public function testGetTimetableFromOptionValue($expectedTimetable, $option)
{
self::stubPiwikOption($option);
$timetable = new Timetable();
$this->assertEquals($expectedTimetable, $timetable->getTimetable());
}
public function testRescheduleTaskAndRunTomorrow()
{
self::stubPiwikOption(serialize([]));
$timetable = new Timetable();
$task = $this->getMockBuilder(Task::class)
->disableOriginalConstructor()
->getMock();
$task->method('getName')->willReturn('taskName');
$timetable->rescheduleTaskAndRunTomorrow($task);
$this->assertEquals(Date::factory('tomorrow')->getTimeStamp(), $timetable->getTimetable()[$task->getName()]);
}
public function testRescheduleTaskAndRunInOneHour()
{
self::stubPiwikOption(serialize([]));
$timetable = new Timetable();
$task = $this->getMockBuilder(Task::class)
->disableOriginalConstructor()
->getMock();
$task->method('getName')->willReturn('taskName');
$timetable->rescheduleTaskAndRunInOneHour($task);
$this->assertEquals(Date::factory('now')->addHour(1)->getTimeStamp(), $timetable->getTimetable()[$task->getName()]);
}
/**
* Dataprovider for testTaskHasBeenScheduledOnce
*/
public function taskHasBeenScheduledOnceTestCases()
{
return array(
array(true, 'CoreAdminHome.purgeOutdatedArchives', $this->timetable),
array(true, 'PrivacyManager.deleteReportData_1', $this->timetable),
array(false, 'ScheduledReports.weeklySchedule"', $this->timetable)
);
}
/**
* @dataProvider taskHasBeenScheduledOnceTestCases
*/
public function testTaskHasBeenScheduledOnce($expectedDecision, $taskName, $timetable)
{
self::stubPiwikOption(false);
$timetableObj = new Timetable();
$timetableObj->setTimetable($timetable);
$this->assertEquals($expectedDecision, $timetableObj->taskHasBeenScheduledOnce($taskName));
self::resetPiwikOption();
}
/**
* Dataprovider for testGetScheduledTimeForMethod
*/
public function getScheduledTimeForMethodTestCases()
{
$timetable = serialize($this->timetable);
return array(
array(1355529607, 'CoreAdminHome', 'purgeOutdatedArchives', null, $timetable),
array(1322229607, 'PrivacyManager', 'deleteReportData', 1, $timetable),
array(false, 'ScheduledReports', 'weeklySchedule', null, $timetable)
);
}
/**
* Dataprovider for testTaskShouldBeExecuted
*/
public function taskShouldBeExecutedTestCases()
{
$timetable = $this->timetable;
// set a date in the future (should not run)
$timetable['CoreAdminHome.purgeOutdatedArchives'] = time() + 60000;
// set now (should run)
$timetable['PrivacyManager.deleteReportData_1'] = time();
return array(
array(false, 'CoreAdminHome.purgeOutdatedArchives', $timetable),
array(true, 'PrivacyManager.deleteReportData_1', $timetable),
array(false, 'ScheduledReports.weeklySchedule"', $timetable)
);
}
/**
* @dataProvider taskShouldBeExecutedTestCases
*/
public function testTaskShouldBeExecuted($expectedDecision, $taskName, $timetable)
{
self::stubPiwikOption(serialize($timetable));
$timetable = new Timetable();
$this->assertEquals($expectedDecision, $timetable->shouldExecuteTask($taskName));
self::resetPiwikOption();
}
private static function stubPiwikOption($timetable)
{
Option::setSingletonInstance(new PiwikOption($timetable));
}
private static function resetPiwikOption()
{
Option::setSingletonInstance(null);
}
}