Merge branch 'MDL-69419-35' of git://github.com/andrewnicols/moodle into MOODLE_35_STABLE
This commit is contained in:
@@ -148,73 +148,87 @@ class core_scheduled_task_testcase extends advanced_testcase {
|
||||
$this->assertContains('2:15 AM', core_text::strtoupper($userdate));
|
||||
}
|
||||
|
||||
public function test_reset_scheduled_tasks_for_component() {
|
||||
global $DB;
|
||||
|
||||
public function test_reset_scheduled_tasks_for_component_customised() {
|
||||
$this->resetAfterTest(true);
|
||||
// Remember the defaults.
|
||||
$defaulttasks = \core\task\manager::load_scheduled_tasks_for_component('moodle');
|
||||
$initcount = count($defaulttasks);
|
||||
|
||||
$tasks = \core\task\manager::load_scheduled_tasks_for_component('moodle');
|
||||
|
||||
// Customise a task.
|
||||
$firsttask = reset($defaulttasks);
|
||||
$firsttask->set_minute('1');
|
||||
$firsttask->set_hour('2');
|
||||
$firsttask->set_month('3');
|
||||
$firsttask->set_day_of_week('4');
|
||||
$firsttask->set_day('5');
|
||||
$firsttask->set_customised('1');
|
||||
\core\task\manager::configure_scheduled_task($firsttask);
|
||||
$firsttaskrecord = \core\task\manager::record_from_scheduled_task($firsttask);
|
||||
// We reset this field, because we do not want to compare it.
|
||||
$firsttaskrecord->nextruntime = '0';
|
||||
$task = reset($tasks);
|
||||
$task->set_minute('1');
|
||||
$task->set_hour('2');
|
||||
$task->set_month('3');
|
||||
$task->set_day_of_week('4');
|
||||
$task->set_day('5');
|
||||
$task->set_customised('1');
|
||||
\core\task\manager::configure_scheduled_task($task);
|
||||
|
||||
// Now call reset.
|
||||
\core\task\manager::reset_scheduled_tasks_for_component('moodle');
|
||||
|
||||
// Fetch the task again.
|
||||
$taskafterreset = \core\task\manager::get_scheduled_task(get_class($task));
|
||||
|
||||
// The task should still be the same as the customised.
|
||||
$this->assertTaskEquals($task, $taskafterreset);
|
||||
}
|
||||
|
||||
public function test_reset_scheduled_tasks_for_component_deleted() {
|
||||
global $DB;
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Delete a task to simulate the fact that its new.
|
||||
$secondtask = next($defaulttasks);
|
||||
$DB->delete_records('task_scheduled', array('classname' => '\\' . trim(get_class($secondtask), '\\')));
|
||||
$this->assertFalse(\core\task\manager::get_scheduled_task(get_class($secondtask)));
|
||||
$tasklist = \core\task\manager::load_scheduled_tasks_for_component('moodle');
|
||||
|
||||
// Edit a task to simulate a change in its definition (as if it was not customised).
|
||||
$thirdtask = next($defaulttasks);
|
||||
$thirdtask->set_minute('1');
|
||||
$thirdtask->set_hour('2');
|
||||
$thirdtask->set_month('3');
|
||||
$thirdtask->set_day_of_week('4');
|
||||
$thirdtask->set_day('5');
|
||||
$thirdtaskbefore = \core\task\manager::get_scheduled_task(get_class($thirdtask));
|
||||
$thirdtaskbefore->set_next_run_time(null); // Ignore this value when comparing.
|
||||
\core\task\manager::configure_scheduled_task($thirdtask);
|
||||
$thirdtask = \core\task\manager::get_scheduled_task(get_class($thirdtask));
|
||||
$thirdtask->set_next_run_time(null); // Ignore this value when comparing.
|
||||
$this->assertNotEquals($thirdtaskbefore, $thirdtask);
|
||||
// Note: This test must use a task which does not use any random values.
|
||||
$task = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
|
||||
|
||||
$DB->delete_records('task_scheduled', array('classname' => '\\' . trim(get_class($task), '\\')));
|
||||
$this->assertFalse(\core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class));
|
||||
|
||||
// Now call reset on all the tasks.
|
||||
\core\task\manager::reset_scheduled_tasks_for_component('moodle');
|
||||
|
||||
// Load the tasks again.
|
||||
$defaulttasks = \core\task\manager::load_scheduled_tasks_for_component('moodle');
|
||||
$finalcount = count($defaulttasks);
|
||||
// Compare the first task.
|
||||
$newfirsttask = reset($defaulttasks);
|
||||
$newfirsttaskrecord = \core\task\manager::record_from_scheduled_task($newfirsttask);
|
||||
// We reset this field, because we do not want to compare it.
|
||||
$newfirsttaskrecord->nextruntime = '0';
|
||||
|
||||
// Assert a customised task was not altered by reset.
|
||||
$this->assertEquals($firsttaskrecord, $newfirsttaskrecord);
|
||||
|
||||
// Assert that the second task was added back.
|
||||
$secondtaskafter = \core\task\manager::get_scheduled_task(get_class($secondtask));
|
||||
$secondtaskafter->set_next_run_time(null); // Do not compare the nextruntime.
|
||||
$secondtask->set_next_run_time(null);
|
||||
$this->assertEquals($secondtask, $secondtaskafter);
|
||||
$taskafterreset = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
|
||||
$this->assertNotFalse($taskafterreset);
|
||||
|
||||
// Assert that the third task edits were overridden.
|
||||
$thirdtaskafter = \core\task\manager::get_scheduled_task(get_class($thirdtask));
|
||||
$thirdtaskafter->set_next_run_time(null);
|
||||
$this->assertEquals($thirdtaskbefore, $thirdtaskafter);
|
||||
$this->assertTaskEquals($task, $taskafterreset);
|
||||
$this->assertCount(count($tasklist), \core\task\manager::load_scheduled_tasks_for_component('moodle'));
|
||||
}
|
||||
|
||||
// Assert we have the same number of tasks.
|
||||
$this->assertEquals($initcount, $finalcount);
|
||||
public function test_reset_scheduled_tasks_for_component_changed_in_source() {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// Delete a task to simulate the fact that its new.
|
||||
// Note: This test must use a task which does not use any random values.
|
||||
$task = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
|
||||
|
||||
// Get a copy of the task before maing changes for later comparison.
|
||||
$taskbeforechange = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
|
||||
|
||||
// Edit a task to simulate a change in its definition (as if it was not customised).
|
||||
$task->set_minute('1');
|
||||
$task->set_hour('2');
|
||||
$task->set_month('3');
|
||||
$task->set_day_of_week('4');
|
||||
$task->set_day('5');
|
||||
\core\task\manager::configure_scheduled_task($task);
|
||||
|
||||
// Fetch the task out for comparison.
|
||||
$taskafterchange = \core\task\manager::get_scheduled_task(core\task\session_cleanup_task::class);
|
||||
|
||||
// The task should now be different to the original.
|
||||
$this->assertTaskNotEquals($taskbeforechange, $taskafterchange);
|
||||
|
||||
// Now call reset.
|
||||
\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);
|
||||
|
||||
// The task should now be the same as the original.
|
||||
$this->assertTaskEquals($taskbeforechange, $taskafterreset);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -502,4 +516,56 @@ class core_scheduled_task_testcase extends advanced_testcase {
|
||||
$this->assertEquals(0, $task->get_fail_delay());
|
||||
$this->assertLessThan($before + 70, $task->get_next_run_time());
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that the specified tasks are equal.
|
||||
*
|
||||
* @param \core\task\task_base $task
|
||||
* @param \core\task\task_base $comparisontask
|
||||
*/
|
||||
public function assertTaskEquals(\core\task\task_base $task, \core\task\task_base $comparisontask) {
|
||||
// Convert both to an object.
|
||||
$task = \core\task\manager::record_from_scheduled_task($task);
|
||||
$comparisontask = \core\task\manager::record_from_scheduled_task($comparisontask);
|
||||
|
||||
// Reset the nextruntime field as it is intentionally dynamic.
|
||||
$task->nextruntime = null;
|
||||
$comparisontask->nextruntime = null;
|
||||
|
||||
$args = array_merge(
|
||||
[
|
||||
$task,
|
||||
$comparisontask,
|
||||
],
|
||||
array_slice(func_get_args(), 2)
|
||||
);
|
||||
|
||||
call_user_func_array([$this, 'assertEquals'], $args);
|
||||
}
|
||||
|
||||
/**
|
||||
* Assert that the specified tasks are not equal.
|
||||
*
|
||||
* @param \core\task\task_base $task
|
||||
* @param \core\task\task_base $comparisontask
|
||||
*/
|
||||
public function assertTaskNotEquals(\core\task\task_base $task, \core\task\task_base $comparisontask) {
|
||||
// Convert both to an object.
|
||||
$task = \core\task\manager::record_from_scheduled_task($task);
|
||||
$comparisontask = \core\task\manager::record_from_scheduled_task($comparisontask);
|
||||
|
||||
// Reset the nextruntime field as it is intentionally dynamic.
|
||||
$task->nextruntime = null;
|
||||
$comparisontask->nextruntime = null;
|
||||
|
||||
$args = array_merge(
|
||||
[
|
||||
$task,
|
||||
$comparisontask,
|
||||
],
|
||||
array_slice(func_get_args(), 2)
|
||||
);
|
||||
|
||||
call_user_func_array([$this, 'assertNotEquals'], $args);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user