MDL-32149 add quiz unit tests
[moodle.git] / mod / quiz / accessrule / delaybetweenattempts / tests / rule_test.php
blob1dcc62f1ca241470fc52268d7d52f0215de15fd2
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.
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 the quizaccess_delaybetweenattempts plugin.
20 * @package quizaccess
21 * @subpackage delaybetweenattempts
22 * @category phpunit
23 * @copyright 2008 The Open University
24 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
27 defined('MOODLE_INTERNAL') || die();
29 global $CFG;
30 require_once($CFG->dirroot . '/mod/quiz/accessrule/delaybetweenattempts/rule.php');
33 /**
34 * Unit tests for the quizaccess_delaybetweenattempts plugin.
36 * @copyright 2008 The Open University
37 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
39 class quizaccess_delaybetweenattempts_testcase extends basic_testcase {
40 public function test_just_first_delay() {
41 $quiz = new stdClass();
42 $quiz->attempts = 3;
43 $quiz->timelimit = 0;
44 $quiz->delay1 = 1000;
45 $quiz->delay2 = 0;
46 $quiz->timeclose = 0;
47 $quiz->questions = '';
48 $cm = new stdClass();
49 $cm->id = 0;
50 $quizobj = new quiz($quiz, $cm, null);
51 $attempt = new stdClass();
52 $attempt->timefinish = 10000;
54 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000);
55 $this->assertEmpty($rule->description());
56 $this->assertFalse($rule->prevent_access());
57 $this->assertFalse($rule->is_finished(0, $attempt));
58 $this->assertFalse($rule->time_left($attempt, 0));
60 $this->assertFalse($rule->prevent_new_attempt(0, $attempt));
61 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
62 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
63 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
64 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
65 $attempt->timefinish = 9000;
66 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
67 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
68 $attempt->timefinish = 9001;
69 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
70 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
71 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
74 public function test_just_second_delay() {
75 $quiz = new stdClass();
76 $quiz->attempts = 5;
77 $quiz->timelimit = 0;
78 $quiz->delay1 = 0;
79 $quiz->delay2 = 1000;
80 $quiz->timeclose = 0;
81 $quiz->questions = '';
82 $cm = new stdClass();
83 $cm->id = 0;
84 $quizobj = new quiz($quiz, $cm, null);
85 $attempt = new stdClass();
86 $attempt->timefinish = 10000;
88 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000);
89 $this->assertEmpty($rule->description());
90 $this->assertFalse($rule->prevent_access());
91 $this->assertFalse($rule->is_finished(0, $attempt));
92 $this->assertFalse($rule->time_left($attempt, 0));
94 $this->assertFalse($rule->prevent_new_attempt(0, $attempt));
95 $this->assertFalse($rule->prevent_new_attempt(5, $attempt));
96 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
97 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
98 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
99 $this->assertEquals($rule->prevent_new_attempt(3, $attempt),
100 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
101 $attempt->timefinish = 9000;
102 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
103 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
104 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
105 $attempt->timefinish = 9001;
106 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
107 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
108 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
109 $this->assertEquals($rule->prevent_new_attempt(4, $attempt),
110 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
113 public function test_just_both_delays() {
114 $quiz = new stdClass();
115 $quiz->attempts = 5;
116 $quiz->timelimit = 0;
117 $quiz->delay1 = 2000;
118 $quiz->delay2 = 1000;
119 $quiz->timeclose = 0;
120 $quiz->questions = '';
121 $cm = new stdClass();
122 $cm->id = 0;
123 $quizobj = new quiz($quiz, $cm, null);
124 $attempt = new stdClass();
125 $attempt->timefinish = 10000;
127 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000);
128 $this->assertEmpty($rule->description());
129 $this->assertFalse($rule->prevent_access());
130 $this->assertFalse($rule->is_finished(0, $attempt));
131 $this->assertFalse($rule->time_left($attempt, 0));
133 $this->assertFalse($rule->prevent_new_attempt(0, $attempt));
134 $this->assertFalse($rule->prevent_new_attempt(5, $attempt));
135 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
136 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(12000)));
137 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
138 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
139 $this->assertEquals($rule->prevent_new_attempt(3, $attempt),
140 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
141 $attempt->timefinish = 8000;
142 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
143 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
144 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
145 $attempt->timefinish = 8001;
146 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
147 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
148 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
149 $this->assertFalse($rule->prevent_new_attempt(4, $attempt));
150 $attempt->timefinish = 9000;
151 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
152 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
153 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
154 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
155 $attempt->timefinish = 9001;
156 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
157 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001)));
158 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
159 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
160 $this->assertEquals($rule->prevent_new_attempt(4, $attempt),
161 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
164 public function test_with_close_date() {
165 $quiz = new stdClass();
166 $quiz->attempts = 5;
167 $quiz->timelimit = 0;
168 $quiz->delay1 = 2000;
169 $quiz->delay2 = 1000;
170 $quiz->timeclose = 15000;
171 $quiz->questions = '';
172 $cm = new stdClass();
173 $cm->id = 0;
174 $quizobj = new quiz($quiz, $cm, null);
175 $attempt = new stdClass();
176 $attempt->timefinish = 13000;
178 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000);
179 $this->assertEmpty($rule->description());
180 $this->assertFalse($rule->prevent_access());
181 $this->assertFalse($rule->is_finished(0, $attempt));
182 $this->assertFalse($rule->time_left($attempt, 0));
184 $attempt->timefinish = 13000;
185 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
186 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(15000)));
187 $attempt->timefinish = 13001;
188 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
189 get_string('youcannotwait', 'quizaccess_delaybetweenattempts'));
190 $attempt->timefinish = 14000;
191 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
192 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(15000)));
193 $attempt->timefinish = 14001;
194 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
195 get_string('youcannotwait', 'quizaccess_delaybetweenattempts'));
197 $rule = new quizaccess_delaybetweenattempts($quizobj, 15000);
198 $attempt->timefinish = 13000;
199 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
200 $attempt->timefinish = 13001;
201 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
202 get_string('youcannotwait', 'quizaccess_delaybetweenattempts'));
203 $attempt->timefinish = 14000;
204 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
205 $attempt->timefinish = 14001;
206 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
207 get_string('youcannotwait', 'quizaccess_delaybetweenattempts'));
209 $rule = new quizaccess_delaybetweenattempts($quizobj, 15001);
210 $attempt->timefinish = 13000;
211 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
212 $attempt->timefinish = 13001;
213 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
214 $attempt->timefinish = 14000;
215 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
216 $attempt->timefinish = 14001;
217 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
220 public function test_time_limit_and_overdue() {
221 $quiz = new stdClass();
222 $quiz->attempts = 5;
223 $quiz->timelimit = 100;
224 $quiz->delay1 = 2000;
225 $quiz->delay2 = 1000;
226 $quiz->timeclose = 0;
227 $quiz->questions = '';
228 $cm = new stdClass();
229 $cm->id = 0;
230 $quizobj = new quiz($quiz, $cm, null);
231 $attempt = new stdClass();
232 $attempt->timestart = 9900;
233 $attempt->timefinish = 10100;
235 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000);
236 $this->assertEmpty($rule->description());
237 $this->assertFalse($rule->prevent_access());
238 $this->assertFalse($rule->is_finished(0, $attempt));
239 $this->assertFalse($rule->time_left($attempt, 0));
241 $this->assertFalse($rule->prevent_new_attempt(0, $attempt));
242 $this->assertFalse($rule->prevent_new_attempt(5, $attempt));
243 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
244 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(12000)));
245 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
246 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
247 $this->assertEquals($rule->prevent_new_attempt(3, $attempt),
248 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
249 $attempt->timestart = 7950;
250 $attempt->timefinish = 8000;
251 $this->assertFalse($rule->prevent_new_attempt(1, $attempt));
252 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
253 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
254 $attempt->timestart = 7950;
255 $attempt->timefinish = 8001;
256 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
257 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
258 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
259 $this->assertFalse($rule->prevent_new_attempt(4, $attempt));
260 $attempt->timestart = 8950;
261 $attempt->timefinish = 9000;
262 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
263 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
264 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
265 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
266 $attempt->timestart = 8950;
267 $attempt->timefinish = 9001;
268 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
269 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001)));
270 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
271 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
272 $this->assertEquals($rule->prevent_new_attempt(4, $attempt),
273 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
274 $attempt->timestart = 8900;
275 $attempt->timefinish = 9100;
276 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
277 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000)));
278 $this->assertFalse($rule->prevent_new_attempt(2, $attempt));
279 $this->assertFalse($rule->prevent_new_attempt(3, $attempt));
280 $attempt->timestart = 8901;
281 $attempt->timefinish = 9100;
282 $this->assertEquals($rule->prevent_new_attempt(1, $attempt),
283 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001)));
284 $this->assertEquals($rule->prevent_new_attempt(2, $attempt),
285 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));
286 $this->assertEquals($rule->prevent_new_attempt(4, $attempt),
287 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001)));