diff --git a/lib/phpunit/classes/advanced_testcase.php b/lib/phpunit/classes/advanced_testcase.php index 41a7da01b1e..7420ce40ab6 100644 --- a/lib/phpunit/classes/advanced_testcase.php +++ b/lib/phpunit/classes/advanced_testcase.php @@ -702,7 +702,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 525325d2a38..769072a5516 100644 --- a/lib/phpunit/tests/advanced_test.php +++ b/lib/phpunit/tests/advanced_test.php @@ -33,8 +33,13 @@ defined('MOODLE_INTERNAL') || die(); * @category phpunit * @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 core_phpunit_advanced_testcase extends advanced_testcase { + public static function setUpBeforeClass(): void { + global $CFG; + require_once(__DIR__ . '/fixtures/adhoc_test_task.php'); + } public function test_debugging() { global $CFG; @@ -680,4 +685,53 @@ class core_phpunit_advanced_testcase 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}"); + } +}