diff --git a/mod/data/tests/generator/behat_mod_data_generator.php b/mod/data/tests/generator/behat_mod_data_generator.php index 8f39d2d02c5..53c1c7542d5 100644 --- a/mod/data/tests/generator/behat_mod_data_generator.php +++ b/mod/data/tests/generator/behat_mod_data_generator.php @@ -53,7 +53,7 @@ class behat_mod_data_generator extends behat_generator_base { 'singular' => 'preset', 'datagenerator' => 'preset', 'required' => ['database', 'name'], - 'switchids' => ['database' => 'databaseid'], + 'switchids' => ['database' => 'databaseid', 'user' => 'userid'], ], ]; } diff --git a/mod/data/tests/generator/lib.php b/mod/data/tests/generator/lib.php index a1497e9faa7..44e434f4c70 100644 --- a/mod/data/tests/generator/lib.php +++ b/mod/data/tests/generator/lib.php @@ -373,10 +373,19 @@ class mod_data_generator extends testing_module_generator { * @return preset The preset that has been created. */ public function create_preset(stdClass $instance, stdClass $record = null): preset { + global $USER; + if (is_null($record)) { $record = new stdClass(); } + // Set current user if defined. + if (isset($record->userid) && $record->userid != $USER->id) { + $currentuser = $USER; + $user = \core_user::get_user($record->userid); + $this->set_user($user); + } + // Fill in optional values if not specified. $presetname = 'New preset ' . microtime(); if (isset($record->name)) { @@ -391,6 +400,10 @@ class mod_data_generator extends testing_module_generator { $preset = preset::create_from_instance($manager, $presetname, $presetdescription); $preset->save(); + if (isset($currentuser)) { + $this->set_user($currentuser); + } + return $preset; } } diff --git a/mod/data/tests/generator_test.php b/mod/data/tests/generator_test.php index 24a87938d94..c571db1f92d 100644 --- a/mod/data/tests/generator_test.php +++ b/mod/data/tests/generator_test.php @@ -249,6 +249,11 @@ class generator_test extends \advanced_testcase { $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $cm = get_coursemodule_from_id(manager::MODULE, $activity->cmid, 0, false, MUST_EXIST); + if (!is_null($record) && property_exists($record, 'user')) { + $user = $this->getDataGenerator()->create_and_enrol($course, 'teacher', (object)['username' => $record->user]); + $record->userid = $user->id; + unset($record->user); + } // Check initially there are no saved presets. $manager = manager::create_from_coursemodule($cm); @@ -273,9 +278,14 @@ class generator_test extends \advanced_testcase { } else { $this->assertEquals($record->description, $preset->description); } + // Check the preset author has the expected value. + if (is_null($record) || !property_exists($record, 'userid')) { + $this->assertEquals($USER->id, $preset->get_userid()); + } else { + $this->assertEquals($record->userid, $preset->get_userid()); + } // Check the file has been updated properly. $this->assertNotNull($preset->storedfile); - $this->assertEquals($USER->id, $preset->get_userid()); } /** @@ -304,6 +314,30 @@ class generator_test extends \advanced_testcase { 'description' => 'This is a preset to collect the most popular world recipes.', ], ], + 'Create with a given user but no description or name' => [ + 'record' => (object) [ + 'user' => 'teacher1', + ], + ], + 'Create with a given name and user but no description' => [ + 'record' => (object) [ + 'name' => 'World recipes preset', + 'user' => 'teacher1', + ], + ], + 'Create with a given description and user but no name' => [ + 'record' => (object) [ + 'description' => 'This is a preset to collect the most popular world recipes.', + 'user' => 'teacher1', + ], + ], + 'Create with a given name, description and user' => [ + 'record' => (object) [ + 'name' => 'World recipes preset', + 'description' => 'This is a preset to collect the most popular world recipes.', + 'user' => 'teacher1', + ], + ], ]; } }