diff --git a/mod/data/tests/backup/restore_type_test.php b/mod/data/tests/backup/restore_type_test.php new file mode 100644 index 00000000000..f22777d934a --- /dev/null +++ b/mod/data/tests/backup/restore_type_test.php @@ -0,0 +1,81 @@ +. + +namespace mod_data\backup; + +/** + * Restore type tests. + * + * @package mod_data + * @copyright 2024 Laurent David + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class restore_type_test extends \advanced_testcase { + + /** + * Data provider for test_duplicating_data_remove_unwanted_types. + * + * @return array[] + */ + public static function restore_format_test_provider(): array { + return [ + 'text' => [ + 'type' => 'text', + 'expected' => 'text', + ], + 'picture' => [ + 'type' => 'picture', + 'expected' => 'picture', + ], + 'wrong type' => [ + 'type' => '../wrongtype123', + 'expected' => 'wrongtype', + ], + ]; + } + + /** + * Test that duplicating a database removes unwanted / invalid format. + * + * @param string $type The type of the field. + * @param string $expected The expected type of the field after duplication. + * + * @covers \restore_data_activity_structure_step + * @dataProvider restore_format_test_provider + */ + public function test_duplicating_data_remove_unwanted_types(string $type, string $expected): void { + global $DB; + $this->resetAfterTest(); + $this->setAdminUser(); + + // Make a test course. + $generator = $this->getDataGenerator(); + $course = $generator->create_course(); + $data = $this->getDataGenerator()->create_module('data', ['course' => $course->id]); + $this->getDataGenerator()->get_plugin_generator('mod_data')->create_field( + (object) ['name' => 'field', 'type' => $type], + $data + ); + // Duplicate the data module with the type. + $newdata = duplicate_module($course, get_fast_modinfo($course)->get_cm($data->cmid)); + // Verify the settings of the duplicated activity. + $fields = $DB->get_records('data_fields', ['dataid' => $newdata->instance], 'id'); + $newfield = reset($fields); + $this->assertEquals($expected, $newfield->type); + } + +} diff --git a/mod/data/tests/lib_test.php b/mod/data/tests/lib_test.php index 0f24e1c20e2..154deae9e11 100644 --- a/mod/data/tests/lib_test.php +++ b/mod/data/tests/lib_test.php @@ -2039,4 +2039,47 @@ class lib_test extends \advanced_testcase { $this->assertNotEmpty($activity->{$template}); } } + /** + * Test that format that are not supported are raising an exception + * + * @param string $type + * @param string $expected + * @covers \data_get_field_new + * @dataProvider format_parser_provider + */ + public function test_create_field(string $type, string $expected) { + $this->resetAfterTest(); + $this->setAdminUser(); + $generator = $this->getDataGenerator(); + $course = $generator->create_course(); + + $data = $this->getDataGenerator()->create_module('data', ['course' => $course->id] ); + if ($expected === 'exception') { + $this->expectException(\moodle_exception::class); + } + $field = data_get_field_new($type, $data); + $this->assertStringContainsString($expected, get_class($field)); + } + + /** + * Data provider for test_format_parser + * + * @return array[] + */ + public static function format_parser_provider(): array { + return [ + 'text' => [ + 'type' => 'text', + 'expected' => 'data_field_text', + ], + 'picture' => [ + 'type' => 'picture', + 'expected' => 'data_field_picture', + ], + 'wrong type' => [ + 'type' => '../wrongformat123', + 'expected' => 'exception', + ], + ]; + } }