AutorÃa | Ultima modificación | Ver Log |
<?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 core_question\local\bank;/*** Unit tests for the version_options class and associated methods.** @package core_question* @copyright 2024 onwards Catalyst IT {@link http://www.catalyst-eu.net/}* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later* @author Conn Warwicker <conn.warwicker@catalyst-eu.net>* @covers \core_question\local\bank\version_options*/final class version_options_test extends \advanced_testcase {/*** Tests the retrieval and correctness of version selection menu options for a given question.** This method verifies that the correct version options are available for a specific question* within a course, ensuring that the options are accurately labeled and ordered. It includes* checks for version labeling, the presence of an "Always latest" option, and the correct count* and sequence of version numbers after creating multiple versions of a question.** @return void*/public function test_get_version_options(): void {// Reset everything after this test completes.$this->resetAfterTest();// Load the generators we need.$questiongenerator = self::getDataGenerator()->get_plugin_generator('core_question');// Create a test course we can use the question bank on.$category = self::getDataGenerator()->create_category();$course = self::getDataGenerator()->create_course(['category' => $category->id]);$coursecontext = \core\context\course::instance($course->id);// Create a question category on the course.$cat = $questiongenerator->create_question_category(['contextid' => $coursecontext->id]);// Create a question within that category.$question = $questiongenerator->create_question('essay', null,['category' => $cat->id, 'name' => 'This is the first version']);// Get the select menu options for the question versions.$options = version_options::get_version_menu_options($question->id);// Assert that there are 2 and that they "Always latest" is first.$this->assertCount(2, $options);$this->assertEquals('Always latest', $options[0]);$this->assertEquals('v1 (latest)', $options[1]);// Create some new versions of the question.$questiongenerator->update_question($question, null, ['name' => 'This is the second version']);$questiongenerator->update_question($question, null, ['name' => 'This is the third version']);// Get the options which would be used for the select menu.$options = version_options::get_version_menu_options($question->id);// Assert that there are now 4.$this->assertCount(4, $options);// Assert that they are keyed to their verison numbers.$this->assertEquals('Always latest', $options[0]);$this->assertEquals('v1', $options[1]);$this->assertEquals('v2', $options[2]);$this->assertEquals('v3 (latest)', $options[3]);// Assert that they are in the correct order of "Always latest" first, then descending versions.$this->assertEquals(array_keys($options), [0, 3, 2, 1]);}}