MDL-70520 tasks: Keep lastruntime when a scheduled task is reset

This commit is contained in:
Mikhail Golenkov 2020-12-22 10:37:43 +11:00
parent 4ec279a2f0
commit eb694bdd5a
2 changed files with 21 additions and 0 deletions

View File

@ -229,6 +229,7 @@ class manager {
$record = self::record_from_scheduled_task($task);
$record->id = $original->id;
$record->nextruntime = $task->get_next_scheduled_time();
unset($record->lastruntime);
$result = $DB->update_record('task_scheduled', $record);
return $result;

View File

@ -691,4 +691,24 @@ class core_scheduled_task_testcase extends advanced_testcase {
call_user_func_array([$this, 'assertNotEquals'], $args);
}
/**
* Assert that the lastruntime column holds an original value after a scheduled task is reset.
*/
public function test_reset_scheduled_tasks_for_component_keeps_original_lastruntime(): void {
global $DB;
$this->resetAfterTest(true);
// Set lastruntime for the scheduled task.
$DB->set_field('task_scheduled', 'lastruntime', 123456789, ['classname' => '\core\task\session_cleanup_task']);
// Reset the task.
\core\task\manager::reset_scheduled_tasks_for_component('moodle');
// Fetch the task again.
$taskafterreset = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
// Confirm, that lastruntime is still in place.
$this->assertEquals(123456789, $taskafterreset->get_last_run_time());
}
}