* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. */ class CronjobTestSchedule extends SimpleORMap { } class CronjobScheduleTest extends \Codeception\Test\Unit { function setUp(): void { date_default_timezone_set('Europe/Berlin'); StudipTestHelper::set_up_tables(['cronjobs_schedules', 'cronjobs_tasks']); } function tearDown(): void { StudipTestHelper::tear_down_tables(); } function testPeriodicSchedule() { $schedule = new CronjobSchedule(); $schedule->minute = null; $schedule->hour = null; $schedule->day = null; $schedule->month = null; $schedule->day_of_week = null; return $schedule; } /** * @depends testPeriodicSchedule */ function testNextExecutionPeriodicMinutely($schedule) { $now = strtotime('10.11.2013 01:02:00'); $then = strtotime('10.11.2013 01:03:00'); $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } /** * @depends testPeriodicSchedule */ function testNextExecutionPeriodicHourly($schedule) { $now = strtotime('10.11.2013 01:02:00'); $then = strtotime('10.11.2013 02:00:00'); $schedule->minute = 0; $schedule->hour = null; $schedule->day = null; $schedule->month = null; $schedule->day_of_week = null; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } /** * @depends testPeriodicSchedule */ function testNextExecutionPeriodicDaily($schedule) { $now = strtotime('10.11.2013 01:02:00'); $then = strtotime('11.11.2013 00:00:00'); $schedule->minute = 0; $schedule->hour = 0; $schedule->day = null; $schedule->month = null; $schedule->day_of_week = null; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } /** * @depends testPeriodicSchedule */ function testNextExecutionPeriodicMonthly($schedule) { $now = strtotime('10.11.2013 01:02:00'); $then = strtotime('01.12.2013 00:00:00'); $schedule->minute = 0; $schedule->hour = 0; $schedule->day = 1; $schedule->month = null; $schedule->day_of_week = null; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } /* * @depends testPeriodicSchedule function testNextExecutionPeriodicYearly($schedule) { // Stop here and mark this test as incomplete. $this->markTestIncomplete('This section needs to be optimized so this test is skipped.'); $now = strtotime('01.01.2013 00:01:00'); $then = strtotime('01.01.2014 00:00:00'); $schedule->minute = 0; $schedule->hour = 0; $schedule->day = 1; $schedule->month = 1; $schedule->day_of_week = null; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } */ /** * @depends testPeriodicSchedule */ function testNextExecutionPeriodicFriday($schedule) { $now = strtotime('10.11.2013 01:02:00'); $then = strtotime('next friday 0:00:00', $now); $schedule->minute = null; $schedule->hour = null; $schedule->day = null; $schedule->month = null; $schedule->day_of_week = 5; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } /** * @depends testPeriodicSchedule */ function testBuggyConditions($schedule) { $now = strtotime('16.04.2013 01:10:00'); $then = strtotime('17.04.2013 01:07:00'); $schedule->minute = 7; $schedule->hour = 1; $schedule->day = null; $schedule->month = null; $schedule->day_of_week = null; $schedule->calculateNextExecution($now); $this->assertEquals($then, $schedule->next_execution); } }