From 3ea15bcef1f2deea0562be9024ce206d57babe09 Mon Sep 17 00:00:00 2001 From: Ilya Tregubov Date: Tue, 1 Aug 2023 11:38:00 +0800 Subject: [PATCH] MDL-43820 enrol_guest: Override find_instance For guest enrol method there can be just one instance. So we can just match by type --- enrol/guest/lib.php | 22 +++++++++++++ enrol/guest/tests/lib_test.php | 59 ++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 enrol/guest/tests/lib_test.php diff --git a/enrol/guest/lib.php b/enrol/guest/lib.php index 2e6ddf8f2b8..a9b7d9b6eb8 100644 --- a/enrol/guest/lib.php +++ b/enrol/guest/lib.php @@ -497,6 +497,28 @@ class enrol_guest_plugin extends enrol_plugin { public function is_csv_upload_supported(): bool { return true; } + + /** + * Finds matching instances for a given course. + * + * @param array $enrolmentdata enrolment data. + * @param int $courseid Course ID. + * @return stdClass|null Matching instance + */ + public function find_instance(array $enrolmentdata, int $courseid) : ?stdClass { + + $instances = enrol_get_instances($courseid, false); + $instance = null; + foreach ($instances as $i) { + if ($i->enrol == 'guest') { + // There can be only one guest enrol instance so find first available. + $instance = $i; + break; + } + } + return $instance; + } + } /** diff --git a/enrol/guest/tests/lib_test.php b/enrol/guest/tests/lib_test.php new file mode 100644 index 00000000000..1a35b5801b7 --- /dev/null +++ b/enrol/guest/tests/lib_test.php @@ -0,0 +1,59 @@ +. + +/** + * Guest enrolment tests. + * + * @package enrol_guest + * @category phpunit + * @copyright 2023 Ilya Tregubov + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +namespace enrol_guest; + +class lib_test extends \advanced_testcase { + + /** + * Test the behaviour of find_instance(). + * + * @covers ::find_instance + */ + public function test_find_instance() { + global $DB; + $this->resetAfterTest(); + + $cat = $this->getDataGenerator()->create_category(); + // When we create a course, a guest enrolment instance is also created. + $course = $this->getDataGenerator()->create_course(['category' => $cat->id, 'shortname' => 'ANON']); + + $guestplugin = enrol_get_plugin('guest'); + + $expected = $DB->get_record('enrol', ['courseid' => $course->id, 'enrol' => 'guest']); + + // Let's try to add second instance - only 1 guest instance is possible. + $instanceid2 = null; + // Have to do this check since add_instance doesn't block adding second instance for guest plugin. + if ($guestplugin->can_add_instance($course->id)) { + $instanceid2 = $guestplugin->add_instance($course, []); + } + $this->assertNull($instanceid2); + + $enrolmentdata = []; + $actual = $guestplugin->find_instance($enrolmentdata, $course->id); + $this->assertEquals($expected->id, $actual->id); + } + +}