Commit | Line | Data |
---|---|---|
78135fd2 MG |
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/>. | |
16 | ||
17 | /** | |
18 | * mod_lesson generator tests | |
19 | * | |
20 | * @package mod_lesson | |
21 | * @category test | |
22 | * @copyright 2013 Marina Glancy | |
23 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
24 | */ | |
25 | ||
26 | /** | |
27 | * Genarator tests class for mod_lesson. | |
28 | * | |
29 | * @package mod_lesson | |
30 | * @category test | |
31 | * @copyright 2013 Marina Glancy | |
32 | * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later | |
33 | */ | |
34 | class mod_lesson_generator_testcase extends advanced_testcase { | |
35 | ||
36 | public function test_create_instance() { | |
37 | global $DB; | |
38 | $this->resetAfterTest(); | |
39 | $this->setAdminUser(); | |
40 | ||
41 | $course = $this->getDataGenerator()->create_course(); | |
42 | ||
43 | $this->assertFalse($DB->record_exists('lesson', array('course' => $course->id))); | |
44 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
45 | $records = $DB->get_records('lesson', array('course' => $course->id), 'id'); | |
46 | $this->assertEquals(1, count($records)); | |
47 | $this->assertTrue(array_key_exists($lesson->id, $records)); | |
48 | ||
49 | $params = array('course' => $course->id, 'name' => 'Another lesson'); | |
50 | $lesson = $this->getDataGenerator()->create_module('lesson', $params); | |
51 | $records = $DB->get_records('lesson', array('course' => $course->id), 'id'); | |
52 | $this->assertEquals(2, count($records)); | |
53 | $this->assertEquals('Another lesson', $records[$lesson->id]->name); | |
54 | } | |
55 | ||
56 | public function test_create_content() { | |
57 | global $DB; | |
58 | $this->resetAfterTest(); | |
59 | $this->setAdminUser(); | |
60 | ||
61 | $course = $this->getDataGenerator()->create_course(); | |
62 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
63 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
64 | ||
65 | $page1 = $lessongenerator->create_content($lesson); | |
66 | $page2 = $lessongenerator->create_content($lesson, array('title' => 'Custom title')); | |
67 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
68 | $this->assertEquals(2, count($records)); | |
69 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
70 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
71 | $this->assertEquals('Custom title', $records[$page2->id]->title); | |
72 | } | |
6f5d9a93 SB |
73 | |
74 | /** | |
75 | * This tests the true/false question generator. | |
76 | */ | |
77 | public function test_create_question_truefalse() { | |
78 | global $DB; | |
79 | $this->resetAfterTest(); | |
80 | $this->setAdminUser(); | |
81 | ||
82 | $course = $this->getDataGenerator()->create_course(); | |
83 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
84 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
85 | ||
86 | $page1 = $lessongenerator->create_question_truefalse($lesson); | |
87 | $page2 = $lessongenerator->create_question_truefalse($lesson, array('title' => 'Custom title')); | |
88 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
89 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
90 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
91 | $this->assertCount(2, $records); | |
92 | $this->assertCount(2, $p1answers); // True/false only supports 2 answer records. | |
93 | $this->assertCount(2, $p2answers); | |
94 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
95 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
96 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
97 | } | |
98 | ||
99 | /** | |
100 | * This tests the multichoice question generator. | |
101 | */ | |
102 | public function test_create_question_multichoice() { | |
103 | global $DB; | |
104 | $this->resetAfterTest(); | |
105 | $this->setAdminUser(); | |
106 | ||
107 | $course = $this->getDataGenerator()->create_course(); | |
108 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
109 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
110 | ||
111 | $page1 = $lessongenerator->create_question_multichoice($lesson); | |
112 | $page2 = $lessongenerator->create_question_multichoice($lesson, array('title' => 'Custom title')); | |
113 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
114 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
115 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
116 | $this->assertCount(2, $records); | |
117 | $this->assertCount(2, $p1answers); // Multichoice requires at least 2 records. | |
118 | $this->assertCount(2, $p2answers); | |
119 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
120 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
121 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
122 | } | |
123 | ||
124 | /** | |
125 | * This tests the essay question generator. | |
126 | */ | |
127 | public function test_create_question_essay() { | |
128 | global $DB; | |
129 | $this->resetAfterTest(); | |
130 | $this->setAdminUser(); | |
131 | ||
132 | $course = $this->getDataGenerator()->create_course(); | |
133 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
134 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
135 | ||
136 | $page1 = $lessongenerator->create_question_essay($lesson); | |
137 | $page2 = $lessongenerator->create_question_essay($lesson, array('title' => 'Custom title')); | |
138 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
139 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
140 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
141 | $this->assertCount(2, $records); | |
142 | $this->assertCount(1, $p1answers); // Essay creates a single (empty) answer record. | |
143 | $this->assertCount(1, $p2answers); | |
144 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
145 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
146 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
147 | } | |
148 | ||
149 | /** | |
150 | * This tests the matching question generator. | |
151 | */ | |
152 | public function test_create_question_matching() { | |
153 | global $DB; | |
154 | $this->resetAfterTest(); | |
155 | $this->setAdminUser(); | |
156 | ||
157 | $course = $this->getDataGenerator()->create_course(); | |
158 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
159 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
160 | ||
161 | $page1 = $lessongenerator->create_question_matching($lesson); | |
162 | $page2 = $lessongenerator->create_question_matching($lesson, array('title' => 'Custom title')); | |
163 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
164 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
165 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
166 | $this->assertCount(2, $records); | |
167 | $this->assertCount(4, $p1answers); // Matching creates two extra records plus 1 for each answer value. | |
168 | $this->assertCount(4, $p2answers); | |
169 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
170 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
171 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
172 | } | |
173 | ||
174 | /** | |
175 | * This tests the numeric question generator. | |
176 | */ | |
177 | public function test_create_question_numeric() { | |
178 | global $DB; | |
179 | $this->resetAfterTest(); | |
180 | $this->setAdminUser(); | |
181 | ||
182 | $course = $this->getDataGenerator()->create_course(); | |
183 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
184 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
185 | ||
186 | $page1 = $lessongenerator->create_question_numeric($lesson); | |
187 | $page2 = $lessongenerator->create_question_numeric($lesson, array('title' => 'Custom title')); | |
188 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
189 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
190 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
191 | $this->assertCount(2, $records); | |
192 | $this->assertCount(1, $p1answers); // Numeric only requires 1 answer. | |
193 | $this->assertCount(1, $p2answers); | |
194 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
195 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
196 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
197 | } | |
198 | ||
199 | /** | |
200 | * This tests the shortanswer question generator. | |
201 | */ | |
202 | public function test_create_question_shortanswer() { | |
203 | global $DB; | |
204 | $this->resetAfterTest(); | |
205 | $this->setAdminUser(); | |
206 | ||
207 | $course = $this->getDataGenerator()->create_course(); | |
208 | $lesson = $this->getDataGenerator()->create_module('lesson', array('course' => $course)); | |
209 | $lessongenerator = $this->getDataGenerator()->get_plugin_generator('mod_lesson'); | |
210 | ||
211 | $page1 = $lessongenerator->create_question_shortanswer($lesson); | |
212 | $page2 = $lessongenerator->create_question_shortanswer($lesson, array('title' => 'Custom title')); | |
213 | $records = $DB->get_records('lesson_pages', array('lessonid' => $lesson->id), 'id'); | |
214 | $p1answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page1->id), 'id'); | |
215 | $p2answers = $DB->get_records('lesson_answers', array('lessonid' => $lesson->id, 'pageid' => $page2->id), 'id'); | |
216 | $this->assertCount(2, $records); | |
217 | $this->assertCount(1, $p1answers); // Shortanswer only requires 1 answer. | |
218 | $this->assertCount(1, $p2answers); | |
219 | $this->assertEquals($page1->id, $records[$page1->id]->id); | |
220 | $this->assertEquals($page2->id, $records[$page2->id]->id); | |
221 | $this->assertEquals($page2->title, $records[$page2->id]->title); | |
222 | } | |
78135fd2 | 223 | } |