MDL-46086 quiz: fix unit test on Oracle
[moodle.git] / mod / quiz / tests / editlib_test.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Unit tests for (some of) mod/quiz/editlib.php.
19  *
20  * @package    mod_quiz
21  * @category   phpunit
22  * @copyright  2009 Tim Hunt
23  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24  */
27 defined('MOODLE_INTERNAL') || die();
29 global $CFG;
30 require_once($CFG->dirroot . '/mod/quiz/editlib.php');
33 /**
34  * Unit tests for (some of) mod/quiz/editlib.php.
35  *
36  * @copyright  2009 Tim Hunt
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class mod_quiz_editlib_testcase extends advanced_testcase {
40     public function test_quiz_question_tostring() {
41         $question = new stdClass();
42         $question->qtype = 'multichoice';
43         $question->name = 'The question name';
44         $question->questiontext = '<p>What sort of <b>inequality</b> is x &lt; y<img alt="?" src="..."></p>';
45         $question->questiontextformat = FORMAT_HTML;
47         $summary = quiz_question_tostring($question);
48         $this->assertEquals('<span class="questionname">The question name</span>' .
49                 '<span class="questiontext">What sort of INEQUALITY is x &lt; y[?]</span>', $summary);
50     }
52     /**
53      * Test removing slots from a quiz.
54      */
55     public function test_quiz_remove_slot() {
56         global $SITE, $DB;
57         $this->resetAfterTest(true);
58         $this->setAdminUser();
60         // Setup a quiz with 1 standard and 1 random question.
61         $quizgenerator = $this->getDataGenerator()->get_plugin_generator('mod_quiz');
62         $quiz = $quizgenerator->create_instance(array('course' => $SITE->id, 'questionsperpage' => 3, 'grade' => 100.0));
64         $questiongenerator = $this->getDataGenerator()->get_plugin_generator('core_question');
65         $cat = $questiongenerator->create_question_category();
66         $standardq = $questiongenerator->create_question('shortanswer', null, array('category' => $cat->id));
68         quiz_add_quiz_question($standardq->id, $quiz);
69         quiz_add_random_questions($quiz, 0, $cat->id, 1, false);
71         // Get the random question.
72         $randomq = $DB->get_record('question', array('qtype' => 'random'));
74         $slotssql = "SELECT qs.*, q.qtype AS qtype
75                        FROM {quiz_slots} qs
76                        JOIN {question} q ON qs.questionid = q.id
77                       WHERE qs.quizid = ?
78                    ORDER BY qs.slot";
79         $slots = $DB->get_records_sql($slotssql, array($quiz->id));
81         // Check that the setup looks right.
82         $this->assertEquals(2, count($slots));
83         $slot = array_shift($slots);
84         $this->assertEquals($standardq->id, $slot->questionid);
85         $slot = array_shift($slots);
86         $this->assertEquals($randomq->id, $slot->questionid);
87         $this->assertEquals(2, $slot->slot);
89         // Remove the standard question.
90         quiz_remove_slot($quiz, 1);
92         $slots = $DB->get_records_sql($slotssql, array($quiz->id));
94         // Check the new ordering, and that the slot number was updated.
95         $this->assertEquals(1, count($slots));
96         $slot = array_shift($slots);
97         $this->assertEquals($randomq->id, $slot->questionid);
98         $this->assertEquals(1, $slot->slot);
100         // Check the the standard question was not deleted.
101         $count = $DB->count_records('question', array('id' => $standardq->id));
102         $this->assertEquals(1, $count);
104         // Remove the random question.
105         quiz_remove_slot($quiz, 1);
107         $slots = $DB->get_records_sql($slotssql, array($quiz->id));
109         // Check that new ordering.
110         $this->assertEquals(0, count($slots));
112         // Check that the random question was deleted.
113         $count = $DB->count_records('question', array('id' => $randomq->id));
114         $this->assertEquals(0, $count);
115     }