From ae88770b33b65b67fecf05967aee28c68a66d72b Mon Sep 17 00:00:00 2001 From: Shamim Rezaie Date: Sun, 11 Mar 2018 16:03:19 +1100 Subject: [PATCH] MDL-61514 Quiz: unit testing restore --- .../tests/fixtures/random_by_tag_quiz.mbz | Bin 0 -> 4894 bytes mod/quiz/tests/tags_test.php | 95 ++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 mod/quiz/tests/fixtures/random_by_tag_quiz.mbz create mode 100644 mod/quiz/tests/tags_test.php diff --git a/mod/quiz/tests/fixtures/random_by_tag_quiz.mbz b/mod/quiz/tests/fixtures/random_by_tag_quiz.mbz new file mode 100644 index 0000000000000000000000000000000000000000..643b0c1731958c7b3b4d2c35540456a0e5e80be6 GIT binary patch literal 4894 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 Q0RR63039i9fdH@o0QXO#r2qf` literal 0 HcmV?d00001 diff --git a/mod/quiz/tests/tags_test.php b/mod/quiz/tests/tags_test.php new file mode 100644 index 00000000000..c5fbbcd7b19 --- /dev/null +++ b/mod/quiz/tests/tags_test.php @@ -0,0 +1,95 @@ +. + +/** + * Unit tests for usage of tags in quizzes. + * + * @package mod_quiz + * @copyright 2018 Shamim Rezaie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +defined('MOODLE_INTERNAL') || die(); +global $CFG; +require_once($CFG->dirroot . '/mod/quiz/locallib.php'); + +/** + * Class mod_quiz_tags_testcase + * Class for tests related to usage of question tags in quizzes. + * + * @copyright 2018 Shamim Rezaie + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class mod_quiz_tags_testcase extends advanced_testcase { + public function test_restore_random_question_by_tag() { + global $CFG, $USER, $DB; + + require_once($CFG->dirroot . '/backup/util/includes/restore_includes.php'); + + $this->resetAfterTest(); + $this->setAdminUser(); + + $backupid = 'abc'; + $backuppath = $CFG->tempdir . '/backup/' . $backupid; + check_dir_exists($backuppath); + get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( + __DIR__ . "/fixtures/random_by_tag_quiz.mbz", $backuppath); + + // Do the restore to new course with default settings. + $categoryid = $DB->get_field_sql("SELECT MIN(id) FROM {course_categories}"); + $newcourseid = restore_dbops::create_new_course('Test fullname', 'Test shortname', $categoryid); + $rc = new restore_controller($backupid, $newcourseid, backup::INTERACTIVE_NO, backup::MODE_GENERAL, $USER->id, + backup::TARGET_NEW_COURSE); + + $this->assertTrue($rc->execute_precheck()); + $rc->execute_plan(); + $rc->destroy(); + + // Get the information about the resulting course and check that it is set up correctly. + $modinfo = get_fast_modinfo($newcourseid); + $quiz = array_values($modinfo->get_instances_of('quiz'))[0]; + $quizobj = quiz::create($quiz->instance); + $structure = \mod_quiz\structure::create_for_quiz($quizobj); + + // Are the correct slots returned? + $slots = $structure->get_slots(); + $this->assertCount(1, $slots); + + $quizobj->preload_questions(); + $quizobj->load_questions(); + $questions = $quizobj->get_questions(); + + $this->assertCount(1, $questions); + + $question = array_values($questions)[0]; + + $tag1 = core_tag_tag::get_by_name(0, 't1', 'id, name'); + $this->assertNotFalse($tag1); + + $tag2 = core_tag_tag::get_by_name(0, 't2', 'id, name'); + $this->assertNotFalse($tag2); + + $tag3 = core_tag_tag::get_by_name(0, 't3', 'id, name'); + $this->assertNotFalse($tag3); + + $tagrecords = array($tag2->to_object()); + $this->assertEquals(quiz_build_random_question_tag_json($tagrecords), $question->randomfromtags); + + $defaultcategory = question_get_default_category(context_course::instance($newcourseid)->id); + $this->assertEquals($defaultcategory->id, $question->randomfromcategory); + $this->assertEquals(0, $question->randomincludingsubcategories); + } +}