hjkhhndndndnd,trt
bnmbertsu,yu,yu,fffffffy,ltdfg
/
home4
/
gofvotmy
/
public_html
/
sitaldentallab
/
moodle
/
mod
/
data
/
tests
/
Upload FileeE
HOME
<?php // This file is part of Moodle - http://moodle.org/ // // Moodle is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Moodle is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. namespace mod_data; use file_archive; use stdClass; use zip_archive; /** * Preset tests class for mod_data. * * @package mod_data * @category test * @copyright 2022 Sara Arjona <sara@moodle.com> * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @coversDefaultClass \mod_data\preset */ class preset_test extends \advanced_testcase { /** * Test for static create_from_plugin method. * * @covers ::create_from_plugin */ public function test_create_from_plugin(): void { $this->resetAfterTest(); $this->setAdminUser(); // Check create_from_plugin is working as expected when an existing plugin is given. $pluginname = 'imagegallery'; $result = preset::create_from_plugin(null, $pluginname); $this->assertTrue($result->isplugin); $this->assertEquals(get_string('modulename', "datapreset_$pluginname"), $result->name); $this->assertEquals($pluginname, $result->shortname); $this->assertEquals(get_string('modulename_help', "datapreset_$pluginname"), $result->description); $this->assertEmpty($result->get_userid()); $this->assertEmpty($result->storedfile); $this->assertNull($result->get_path()); // Check create_from_plugin is working as expected when an unexisting plugin is given. $pluginname = 'unexisting'; $result = preset::create_from_plugin(null, $pluginname); $this->assertNull($result); } /** * Test for static create_from_storedfile method. * * @covers ::create_from_storedfile */ public function test_create_from_storedfile(): void { global $USER; $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $plugingenerator->create_preset($activity, $record); $savedpresets = $manager->get_available_saved_presets(); $savedpreset = reset($savedpresets); // Check create_from_storedfile is working as expected with a valid preset file. $result = preset::create_from_storedfile($manager, $savedpreset->storedfile); $this->assertFalse($result->isplugin); $this->assertEquals($record->name, $result->name); $this->assertEquals($record->name, $result->shortname); $this->assertEquals($record->description, $result->description); $this->assertEquals($savedpreset->storedfile->get_userid(), $result->get_userid()); $this->assertNotEmpty($result->storedfile); $this->assertEquals('/' . $record->name . '/', $result->get_path()); // Check create_from_storedfile is not creating a preset object when an invalid file is given. $draftid = file_get_unused_draft_itemid(); $filerecord = [ 'component' => 'user', 'filearea' => 'draft', 'contextid' => \context_user::instance($USER->id)->id, 'itemid' => $draftid, 'filename' => 'preset.xml', 'filepath' => '/' ]; $fs = get_file_storage(); $file = $fs->create_file_from_string($filerecord, 'This is the file content'); $result = preset::create_from_storedfile($manager, $file); $this->assertNull($result); } /** * Test for static create_from_instance method. * * @covers ::create_from_instance */ public function test_create_from_instance(): void { $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $plugingenerator->create_preset($activity, $record); $savedpresets = $manager->get_available_saved_presets(); $savedpreset = reset($savedpresets); // Check create_from_instance is working as expected when a preset with this name exists. $result = preset::create_from_instance($manager, $record->name, $record->description); $this->assertFalse($result->isplugin); $this->assertEquals($record->name, $result->name); $this->assertEquals($record->name, $result->shortname); $this->assertEquals($record->description, $result->description); $this->assertEquals($savedpreset->storedfile->get_userid(), $result->get_userid()); $this->assertNotEmpty($result->storedfile); $this->assertEquals('/' . $record->name . '/', $result->get_path()); // Check create_from_instance is working as expected when there is no preset with the given name. $presetname = 'Unexisting preset'; $presetdescription = 'This is the description for the unexisting preset'; $result = preset::create_from_instance($manager, $presetname, $presetdescription); $this->assertFalse($result->isplugin); $this->assertEquals($presetname, $result->name); $this->assertEquals($presetname, $result->shortname); $this->assertEquals($presetdescription, $result->description); $this->assertEmpty($result->get_userid()); $this->assertEmpty($result->storedfile); $this->assertEquals('/' . $presetname . '/', $result->get_path()); } /** * Test for static create_from_fullname method. * * @covers ::create_from_fullname */ public function test_create_from_fullname(): void { $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $savedpreset = $plugingenerator->create_preset($activity, $record); // Check instantiate from plugin. $pluginname = 'imagegallery'; $fullname = '0/imagegallery'; $result = preset::create_from_fullname($manager, $fullname); $this->assertTrue($result->isplugin); $this->assertEquals(get_string('modulename', "datapreset_$pluginname"), $result->name); $this->assertEquals($pluginname, $result->shortname); $this->assertEquals(get_string('modulename_help', "datapreset_$pluginname"), $result->description); $this->assertEmpty($result->get_userid()); $this->assertEmpty($result->storedfile); $this->assertNull($result->get_path()); // Check instantiate from user preset // Check create_from_instance is working as expected when a preset with this name exists. $fullname = $savedpreset->get_userid() . '/' . $savedpreset->name; $result = preset::create_from_fullname($manager, $fullname); $this->assertFalse($result->isplugin); $this->assertEquals($savedpreset->name, $result->name); $this->assertEquals($savedpreset->shortname, $result->shortname); $this->assertEquals($savedpreset->description, $savedpreset->description); $this->assertEquals($savedpreset->storedfile->get_userid(), $result->get_userid()); $this->assertNotEmpty($result->storedfile); $this->assertEquals('/' . $savedpreset->name . '/', $result->get_path()); } /** * Test for the save a preset method when the preset hasn't been saved before. * * @covers ::save */ public function test_save_new_preset(): void { $this->resetAfterTest(); $this->setAdminUser(); // Save should return false when trying to save a plugin preset. $preset = preset::create_from_plugin(null, 'imagegallery'); $result = $preset->save(); $this->assertFalse($result); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $plugingenerator->create_preset($activity, $record); // Save should return false when trying to save an existing saved preset. $preset = preset::create_from_instance($manager, $record->name, $record->description); $result = $preset->save(); $this->assertFalse($result); // The preset should be saved when it's new and there is no any other having the same name. $savedpresets = $manager->get_available_saved_presets(); $this->assertCount(1, $savedpresets); $presetname = 'New preset'; $presetdescription = 'This is the description for the new preset'; $preset = preset::create_from_instance($manager, $presetname, $presetdescription); $result = $preset->save(); $this->assertTrue($result); // Check the preset has been created. $savedpresets = $manager->get_available_saved_presets(); $this->assertCount(2, $savedpresets); $savedpresetsnames = array_map(function($preset) { return $preset->name; }, $savedpresets); $this->assertContains($presetname, $savedpresetsnames); } /** * Test for the save a preset method when is an existing preset that has been saved before. * * @covers ::save */ public function test_save_existing_preset(): void { $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $oldpresetname = $record->name; $plugingenerator->create_preset($activity, $record); // Save should return false when trying to save an existing preset. $preset = preset::create_from_instance($manager, $record->name, $record->description); $result = $preset->save(); $this->assertFalse($result); // Check no new preset has been created. $this->assertCount(1, $manager->get_available_saved_presets()); // Save should overwrite existing preset if name or description have changed. $preset->name = 'New preset name'; $preset->description = 'New preset description'; $result = $preset->save(); $this->assertTrue($result); // Check the preset files have been renamed. $presetfiles = array_merge(array_values(manager::TEMPLATES_LIST), ['preset.xml', '.']); foreach ($presetfiles as $templatefile) { $file = preset::get_file($preset->get_path(), $templatefile); $this->assertNotNull($file); } // Check old preset files have been removed. $oldpath = "{$oldpresetname}"; foreach ($presetfiles as $templatefile) { $file = preset::get_file($oldpath, $templatefile); $this->assertNull($file); } // Check no new preset has been created. $savedpresets = $manager->get_available_saved_presets(); $this->assertCount(1, $savedpresets); // Check the preset has the expected values. $savedpreset = reset($savedpresets); $this->assertEquals($preset->name, $savedpreset->name); $this->assertEquals($preset->description, $savedpreset->description); $this->assertNotEmpty($preset->storedfile); // Check the storedfile has been updated properly. $this->assertEquals($preset->name, trim($savedpreset->storedfile->get_filepath(), '/')); // Create another saved preset with empty description. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset 2', ]; $plugingenerator->create_preset($activity, $record); $this->assertCount(2, $manager->get_available_saved_presets()); // Description should be saved too when it was empty in the original preset and a new value is assigned to it. $preset = preset::create_from_instance($manager, $record->name); $preset->description = 'New preset description'; $result = $preset->save(); $this->assertTrue($result); $savedpresets = $manager->get_available_saved_presets(); $this->assertCount(2, $savedpresets); foreach ($savedpresets as $savedpreset) { if ($savedpreset->name == $record->name) { $this->assertEquals($preset->description, $savedpreset->description); } } } /** * Test for the export a preset method. * * @covers ::export */ public function test_export(): void { $this->resetAfterTest(); $this->setAdminUser(); // Export should return empty string when trying to export a plugin preset. $preset = preset::create_from_plugin(null, 'imagegallery'); $result = $preset->export(); $this->assertEmpty($result); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); // For now, default templates are not created automatically. This will be changed in MDL-75234. foreach (manager::TEMPLATES_LIST as $templatename => $notused) { data_generate_default_template($activity, $templatename); } $preset = preset::create_from_instance($manager, $activity->name); $result = $preset->export(); $presetfilenames = array_merge(array_values(manager::TEMPLATES_LIST), ['preset.xml']); $ziparchive = new zip_archive(); $ziparchive->open($result, file_archive::OPEN); $files = $ziparchive->list_files(); foreach ($files as $file) { $this->assertContains($file->pathname, $presetfilenames); // Check the file is not empty (except CSS, JS and listtemplateheader/footer files which are empty by default). $extension = pathinfo($file->pathname, PATHINFO_EXTENSION); $ishtmlorxmlfile = in_array($extension, ['html', 'xml']); $expectedemptyfiles = array_intersect_key(manager::TEMPLATES_LIST, array_flip([ 'listtemplateheader', 'listtemplatefooter', 'rsstitletemplate', ])); if ($ishtmlorxmlfile && !in_array($file->pathname, $expectedemptyfiles)) { $this->assertGreaterThan(0, $file->size); } else { $this->assertEquals(0, $file->size); } } $ziparchive->close(); } /** * Test for get_userid(). * * @covers ::get_userid */ public function test_get_userid(): void { $this->resetAfterTest(); $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $user = $this->getDataGenerator()->create_and_enrol($course, 'teacher'); $this->setUser($user); // Check userid is null for plugin preset. $manager = manager::create_from_instance($activity); $pluginpresets = $manager->get_available_plugin_presets(); $pluginpreset = reset($pluginpresets); $this->assertNull($pluginpreset->get_userid()); // Check userid meets the user that has created the preset when it's a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $savedpreset = (object) [ 'name' => 'Preset created by teacher', ]; $plugingenerator->create_preset($activity, $savedpreset); $savedpresets = $manager->get_available_saved_presets(); $savedpreset = reset($savedpresets); $this->assertEquals($user->id, $savedpreset->get_userid()); // Check userid is null when preset hasn't any file associated. $preset = preset::create_from_instance($manager, 'Unexisting preset'); $this->assertNull($preset->get_userid()); } /** * Test for get_path(). * * @covers ::get_path */ public function test_get_path(): void { $this->resetAfterTest(); $this->setAdminUser(); $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); // Check path is null for plugin preset. $manager = manager::create_from_instance($activity); $pluginpresets = $manager->get_available_plugin_presets(); $pluginpreset = reset($pluginpresets); $this->assertNull($pluginpreset->get_path()); // Check path meets expected value when it's a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $savedpreset = (object) [ 'name' => 'Saved preset', ]; $plugingenerator->create_preset($activity, $savedpreset); $savedpresets = $manager->get_available_saved_presets(); $savedpreset = reset($savedpresets); $this->assertEquals("/{$savedpreset->name}/", $savedpreset->get_path()); // Check path is /presetname/ when preset hasn't any file associated. $presetname = 'Unexisting preset'; $preset = preset::create_from_instance($manager, $presetname); $this->assertEquals("/{$presetname}/", $preset->get_path()); } /** * Test for is_directory_a_preset(). * * @dataProvider is_directory_a_preset_provider * @covers ::is_directory_a_preset * @param string $directory * @param bool $expected */ public function test_is_directory_a_preset(string $directory, bool $expected): void { $this->resetAfterTest(); $this->setAdminUser(); $result = preset::is_directory_a_preset($directory); $this->assertEquals($expected, $result); } /** * Data provider for test_is_directory_a_preset(). * * @return array */ public function is_directory_a_preset_provider(): array { global $CFG; return [ 'Valid preset directory' => [ 'directory' => $CFG->dirroot . '/mod/data/preset/imagegallery', 'expected' => true, ], 'Invalid preset directory' => [ 'directory' => $CFG->dirroot . '/mod/data/field/checkbox', 'expected' => false, ], 'Unexisting preset directory' => [ 'directory' => $CFG->dirroot . 'unexistingdirectory', 'expected' => false, ], ]; } /** * Test for get_name_from_plugin(). * * @covers ::get_name_from_plugin */ public function test_get_name_from_plugin(): void { $this->resetAfterTest(); $this->setAdminUser(); // The expected name for plugins with modulename in lang is this value. $name = preset::get_name_from_plugin('imagegallery'); $this->assertEquals('Image gallery', $name); // However, if the plugin doesn't exist or the modulename is not defined, the preset shortname will be returned. $presetshortname = 'nonexistingpreset'; $name = preset::get_name_from_plugin($presetshortname); $this->assertEquals($presetshortname, $name); } /** * Test for get_description_from_plugin(). * * @covers ::get_description_from_plugin */ public function test_get_description_from_plugin(): void { $this->resetAfterTest(); $this->setAdminUser(); // The expected name for plugins with modulename in lang is this value. $description = preset::get_description_from_plugin('imagegallery'); $this->assertEquals('Use this preset to collect images.', $description); // However, if the plugin doesn't exist or the modulename is not defined, empty string will be returned. $presetshortname = 'nonexistingpreset'; $description = preset::get_description_from_plugin($presetshortname); $this->assertEmpty($description); } /** * Test for generate_preset_xml(). * * @covers ::generate_preset_xml * @dataProvider generate_preset_xml_provider * @param array $params activity config settings * @param string|null $description preset description */ public function test_generate_preset_xml(array $params, ?string $description): void { $this->resetAfterTest(); $this->setAdminUser(); // Make accessible the method. $reflection = new \ReflectionClass(preset::class); $method = $reflection->getMethod('generate_preset_xml'); // The method should return empty string when trying to generate preset.xml for a plugin preset. $preset = preset::create_from_plugin(null, 'imagegallery'); $result = $method->invokeArgs($preset, []); $this->assertEmpty($result); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, array_merge(['course' => $course], $params)); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); $manager = manager::create_from_instance($activity); $preset = preset::create_from_instance($manager, $activity->name, $description); // Call the generate_preset_xml method. $result = $method->invokeArgs($preset, []); // Check is a valid XML. $parsedxml = simplexml_load_string($result); // Check the description has the expected value. $this->assertEquals($description, strval($parsedxml->description)); // Check settings have the expected values. foreach ($params as $paramname => $paramvalue) { $this->assertEquals($paramvalue, strval($parsedxml->settings->{$paramname})); } // Check field have the expected values. $this->assertEquals($fieldrecord->name, strval($parsedxml->field->name)); $this->assertEquals($fieldrecord->type, strval($parsedxml->field->type)); } /** * Data provider for generate_preset_xml(). * * @return array */ public function generate_preset_xml_provider(): array { return [ 'Generate preset.xml with the default params and empty description' => [ 'params' => [], 'description' => null, ], 'Generate preset.xml with a description but the default params' => [ 'params' => [], 'description' => 'This is a description', ], 'Generate preset.xml with empty description but changing some params' => [ 'params' => [ 'requiredentries' => 2, 'approval' => 1, ], 'description' => null, ], 'Generate preset.xml with a description and changing some params' => [ 'params' => [ 'maxentries' => 5, 'manageapproved' => 0, ], 'description' => 'This is a description', ], ]; } /** * Test for get_file(). * * @covers ::get_file */ public function test_get_file(): void { $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); $presetname = 'Saved preset'; // Check file doesn't exist if the preset hasn't been saved yet. $preset = preset::create_from_instance($manager, $presetname); $file = preset::get_file($preset->get_path(), 'preset.xml'); $this->assertNull($file); // Check file is not empty when there is a saved preset with this name. $preset->save(); $file = preset::get_file($preset->get_path(), 'preset.xml'); $this->assertNotNull($file); $this->assertStringContainsString($presetname, $file->get_filepath()); $this->assertEquals('preset.xml', $file->get_filename()); // Check invalid preset file name doesn't exist. $file = preset::get_file($preset->get_path(), 'unexistingpreset.xml'); $this->assertNull($file); } /** * Test for can_manage(). * * @covers ::can_manage */ public function test_can_manage(): void { $this->resetAfterTest(); // Create course, database activity and users. $course = $this->getDataGenerator()->create_course(); $data = $this->getDataGenerator()->create_module('data', ['course' => $course->id]); $teacher = $this->getDataGenerator()->create_and_enrol($course, 'teacher'); $student = $this->getDataGenerator()->create_and_enrol($course, 'student'); $manager = manager::create_from_instance($data); $preset1name = 'Admin preset'; $preset2name = 'Teacher preset'; // Create a saved preset by admin. $this->setAdminUser(); $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => $preset1name, 'description' => 'Testing preset description', ]; $adminpreset = $plugingenerator->create_preset($data, $record); // Create a saved preset by teacher. $this->setUser($teacher); $record = (object) [ 'name' => $preset2name, 'description' => 'Testing preset description', ]; $teacherpreset = $plugingenerator->create_preset($data, $record); // Plugins can't be deleted. $pluginpresets = manager::get_available_plugin_presets(); $pluginpreset = reset($pluginpresets); $this->assertFalse($pluginpreset->can_manage()); // Admin can delete all saved presets. $this->setAdminUser(); $this->assertTrue($adminpreset->can_manage()); $this->assertTrue($teacherpreset->can_manage()); // Teacher can delete their own preset only. $this->setUser($teacher); $this->assertFalse($adminpreset->can_manage()); $this->assertTrue($teacherpreset->can_manage()); // Student can't delete any of the presets. $this->setUser($student); $this->assertFalse($adminpreset->can_manage()); $this->assertFalse($teacherpreset->can_manage()); } /** * Test for delete(). * * @covers ::delete */ public function test_delete(): void { $this->resetAfterTest(); // Create course, database activity and users. $course = $this->getDataGenerator()->create_course(); $data = $this->getDataGenerator()->create_module('data', ['course' => $course->id]); $manager = manager::create_from_instance($data); $presetname = 'Admin preset'; // Create a saved preset by admin. $this->setAdminUser(); $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => $presetname, 'description' => 'Testing preset description', ]; $adminpreset = $plugingenerator->create_preset($data, $record); $initialpresets = $manager->get_available_presets(); // Plugins can't be deleted. $pluginpresets = manager::get_available_plugin_presets(); $pluginpreset = reset($pluginpresets); $result = $pluginpreset->delete(); $currentpluginpresets = manager::get_available_plugin_presets(); $this->assertEquals(count($pluginpresets), count($currentpluginpresets)); $result = $adminpreset->delete(); $this->assertTrue($result); // After deleting the preset, there is no file linked. $adminpreset = preset::create_from_instance($manager, $presetname); $this->assertEmpty($adminpreset->storedfile); // Check the preset has been deleted. $currentpresets = $manager->get_available_presets(); $this->assertEquals(count($initialpresets) - 1, count($currentpresets)); // The behavior of trying to delete a preset twice. $result = $adminpreset->delete(); $this->assertFalse($result); // Check the preset has not been deleted. $currentpresets = $manager->get_available_presets(); $this->assertEquals(count($initialpresets) - 1, count($currentpresets)); $emptypreset = preset::create_from_instance($manager, $presetname); // The behavior of deleting an empty preset. $result = $emptypreset->delete(); $this->assertFalse($result); // Check the preset has not been deleted. $currentpresets = $manager->get_available_presets(); $this->assertEquals(count($initialpresets) - 1, count($currentpresets)); } /** * Test for the get_fields method. * * @covers ::get_fields */ public function test_get_fields(): void { $this->resetAfterTest(); $this->setAdminUser(); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $preset = $plugingenerator->create_preset($activity, $record); // Check regular fields. $fields = $preset->get_fields(); $this->assertCount(1, $fields); $this->assertArrayHasKey('field-1', $fields); $field = $fields['field-1']; $this->assertEquals('text', $field->type); $this->assertEquals('field-1', $field->get_name()); $this->assertEquals(false, $field->get_preview()); // Check preview fields. $savedpresets = $manager->get_available_saved_presets(); $preset = reset($savedpresets); $fields = $preset->get_fields(true); $this->assertCount(1, $fields); $this->assertArrayHasKey('field-1', $fields); $field = $fields['field-1']; $this->assertEquals('text', $field->type); $this->assertEquals('field-1', $field->get_name()); $this->assertEquals(true, $field->get_preview()); } /** * Test for the get_sample_entries method. * * @covers ::get_sample_entries */ public function test_get_sample_entries(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); // Create a course and a database activity. $course = $this->getDataGenerator()->create_course(); $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Add a field to the activity. $fieldrecord = new stdClass(); $fieldrecord->name = 'field-1'; $fieldrecord->type = 'text'; $datagenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $datagenerator->create_field($fieldrecord, $activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $preset = $plugingenerator->create_preset($activity, $record); $entries = $preset->get_sample_entries(3); $this->assertCount(3, $entries); foreach ($entries as $entry) { $this->assertEquals($user->id, $entry->userid); $this->assertEquals($user->email, $entry->email); $this->assertEquals($user->firstname, $entry->firstname); $this->assertEquals($user->lastname, $entry->lastname); $this->assertEquals($activity->id, $entry->dataid); $this->assertEquals(0, $entry->groupid); $this->assertEquals(1, $entry->approved); } } /** * Test for the get_template_content method. * * @covers ::get_template_content */ public function test_get_template_content(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $course = $this->getDataGenerator()->create_course(); // Module data with templates. $templates = [ 'singletemplate' => 'Single template content', 'listtemplate' => 'List template content', 'listtemplateheader' => 'List template content header', 'listtemplatefooter' => 'List template content footer', 'addtemplate' => 'Add template content', 'rsstemplate' => 'RSS template content', 'rsstitletemplate' => 'RSS title template content', 'csstemplate' => 'CSS template content', 'jstemplate' => 'JS template content', 'asearchtemplate' => 'Advanced search template content', ]; $params = array_merge(['course' => $course], $templates); // Create a database activity. $activity = $this->getDataGenerator()->create_module(manager::MODULE, $params); $manager = manager::create_from_instance($activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $preset = $plugingenerator->create_preset($activity, $record); // Test user preset templates. foreach ($templates as $templatename => $templatecontent) { $content = $preset->get_template_content($templatename); $this->assertEquals($templatecontent, $content); } // Test plugin preset content. $pluginname = 'imagegallery'; $preset = preset::create_from_plugin($manager, $pluginname); foreach (manager::TEMPLATES_LIST as $templatename => $templatefile) { // Get real file contents. $path = $manager->path . '/preset/' . $pluginname . '/' . $templatefile; $templatecontent = file_get_contents($path); $content = $preset->get_template_content($templatename); $this->assertEquals($templatecontent, $content); } } /** * Test for the get_fullname method. * * @covers ::get_fullname */ public function test_get_fullname(): void { $this->resetAfterTest(); $user = $this->getDataGenerator()->create_user(); $this->setUser($user); $course = $this->getDataGenerator()->create_course(); // Create a database activity. $activity = $this->getDataGenerator()->create_module(manager::MODULE, ['course' => $course]); $manager = manager::create_from_instance($activity); // Create a saved preset. $plugingenerator = $this->getDataGenerator()->get_plugin_generator('mod_data'); $record = (object) [ 'name' => 'Testing preset name', 'description' => 'Testing preset description', ]; $preset = $plugingenerator->create_preset($activity, $record); // Test user preset templates. $this->assertEquals("{$user->id}/Testing preset name", $preset->get_fullname()); // Test plugin preset content. $pluginname = 'imagegallery'; $preset = preset::create_from_plugin($manager, $pluginname); $this->assertEquals("0/imagegallery", $preset->get_fullname()); } }