diff --git a/lib/phpunit/classes/advanced_testcase.php b/lib/phpunit/classes/advanced_testcase.php index 15de8395ab9..c6b71329335 100644 --- a/lib/phpunit/classes/advanced_testcase.php +++ b/lib/phpunit/classes/advanced_testcase.php @@ -733,7 +733,7 @@ abstract class advanced_testcase extends base_testcase { } cron_prepare_core_renderer(); - $this->setUser($user); + cron_setup_user($user); $task->execute(); \core\task\manager::adhoc_task_complete($task); diff --git a/lib/phpunit/tests/advanced_test.php b/lib/phpunit/tests/advanced_test.php index 8ee2388c63f..4b67b169bac 100644 --- a/lib/phpunit/tests/advanced_test.php +++ b/lib/phpunit/tests/advanced_test.php @@ -23,8 +23,13 @@ namespace core; * @category test * @copyright 2012 Petr Skoda {@link http://skodak.org} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @coversDefaultClass \advanced_testcase */ class advanced_test extends \advanced_testcase { + public static function setUpBeforeClass(): void { + global $CFG; + require_once(__DIR__ . '/fixtures/adhoc_test_task.php'); + } public function test_debugging() { global $CFG; @@ -697,4 +702,53 @@ class advanced_test extends \advanced_testcase { self::resetAllData(false); self::assertFalse(\core_useragent::get_user_agent_string(), 'It should not be set again, data was reset.'); } + + /** + * @covers ::runAdhocTasks + */ + public function test_runadhoctasks_no_tasks_queued(): void { + $this->runAdhocTasks(); + $this->expectOutputRegex('/^$/'); + } + + /** + * @covers ::runAdhocTasks + */ + public function test_runadhoctasks_tasks_queued(): void { + $this->resetAfterTest(true); + $admin = get_admin(); + \core\task\manager::queue_adhoc_task(new \core_phpunit\adhoc_test_task()); + $this->runAdhocTasks(); + $this->expectOutputRegex("/Task was run as {$admin->id}/"); + } + + /** + * @covers ::runAdhocTasks + */ + public function test_runadhoctasks_with_existing_user_change(): void { + $this->resetAfterTest(true); + $admin = get_admin(); + + $this->setGuestUser(); + \core\task\manager::queue_adhoc_task(new \core_phpunit\adhoc_test_task()); + $this->runAdhocTasks(); + $this->expectOutputRegex("/Task was run as {$admin->id}/"); + } + + /** + * @covers ::runAdhocTasks + */ + public function test_runadhoctasks_with_existing_user_change_and_specified(): void { + global $USER; + + $this->resetAfterTest(true); + $user = $this->getDataGenerator()->create_user(); + + $this->setGuestUser(); + $task = new \core_phpunit\adhoc_test_task(); + $task->set_userid($user->id); + \core\task\manager::queue_adhoc_task($task); + $this->runAdhocTasks(); + $this->expectOutputRegex("/Task was run as {$user->id}/"); + } } diff --git a/lib/phpunit/tests/fixtures/adhoc_test_task.php b/lib/phpunit/tests/fixtures/adhoc_test_task.php new file mode 100644 index 00000000000..090650fdc0c --- /dev/null +++ b/lib/phpunit/tests/fixtures/adhoc_test_task.php @@ -0,0 +1,35 @@ +. + +namespace core_phpunit; + +/** + * Fixtures for task tests. + * + * @package core + * @category phpunit + * @copyright 2023 Andrew Lyons + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class adhoc_test_task extends \core\task\adhoc_task { + /** + * Execute. + */ + public function execute() { + global $USER; + mtrace("Task was run as {$USER->id}"); + } +}