|
Moodle
2.2.1
http://www.collinsharper.com
|
00001 <?php 00002 // This file is part of Moodle - http://moodle.org/ 00003 // 00004 // Moodle is free software: you can redistribute it and/or modify 00005 // it under the terms of the GNU General Public License as published by 00006 // the Free Software Foundation, either version 3 of the License, or 00007 // (at your option) any later version. 00008 // 00009 // Moodle is distributed in the hope that it will be useful, 00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 // GNU General Public License for more details. 00013 // 00014 // You should have received a copy of the GNU General Public License 00015 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 00016 00027 defined('MOODLE_INTERNAL') || die(); 00028 00029 require_once($CFG->dirroot . '/mod/quiz/accessrule/delaybetweenattempts/rule.php'); 00030 00031 00038 class quizaccess_delaybetweenattempts_test extends UnitTestCase { 00039 public function test_just_first_delay() { 00040 $quiz = new stdClass(); 00041 $quiz->attempts = 3; 00042 $quiz->timelimit = 0; 00043 $quiz->delay1 = 1000; 00044 $quiz->delay2 = 0; 00045 $quiz->timeclose = 0; 00046 $quiz->questions = ''; 00047 $cm = new stdClass(); 00048 $cm->id = 0; 00049 $quizobj = new quiz($quiz, $cm, null); 00050 $attempt = new stdClass(); 00051 $attempt->timefinish = 10000; 00052 00053 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000); 00054 $this->assertFalse($rule->description()); 00055 $this->assertFalse($rule->prevent_access()); 00056 $this->assertFalse($rule->is_finished(0, $attempt)); 00057 $this->assertFalse($rule->time_left($attempt, 0)); 00058 00059 $this->assertFalse($rule->prevent_new_attempt(0, $attempt)); 00060 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00061 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00062 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00063 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00064 $attempt->timefinish = 9000; 00065 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00066 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00067 $attempt->timefinish = 9001; 00068 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00069 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00070 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00071 } 00072 00073 public function test_just_second_delay() { 00074 $quiz = new stdClass(); 00075 $quiz->attempts = 5; 00076 $quiz->timelimit = 0; 00077 $quiz->delay1 = 0; 00078 $quiz->delay2 = 1000; 00079 $quiz->timeclose = 0; 00080 $quiz->questions = ''; 00081 $cm = new stdClass(); 00082 $cm->id = 0; 00083 $quizobj = new quiz($quiz, $cm, null); 00084 $attempt = new stdClass(); 00085 $attempt->timefinish = 10000; 00086 00087 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000); 00088 $this->assertFalse($rule->description()); 00089 $this->assertFalse($rule->prevent_access()); 00090 $this->assertFalse($rule->is_finished(0, $attempt)); 00091 $this->assertFalse($rule->time_left($attempt, 0)); 00092 00093 $this->assertFalse($rule->prevent_new_attempt(0, $attempt)); 00094 $this->assertFalse($rule->prevent_new_attempt(5, $attempt)); 00095 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00096 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00097 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00098 $this->assertEqual($rule->prevent_new_attempt(3, $attempt), 00099 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00100 $attempt->timefinish = 9000; 00101 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00102 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00103 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00104 $attempt->timefinish = 9001; 00105 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00106 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00107 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00108 $this->assertEqual($rule->prevent_new_attempt(4, $attempt), 00109 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00110 } 00111 00112 public function test_just_both_delays() { 00113 $quiz = new stdClass(); 00114 $quiz->attempts = 5; 00115 $quiz->timelimit = 0; 00116 $quiz->delay1 = 2000; 00117 $quiz->delay2 = 1000; 00118 $quiz->timeclose = 0; 00119 $quiz->questions = ''; 00120 $cm = new stdClass(); 00121 $cm->id = 0; 00122 $quizobj = new quiz($quiz, $cm, null); 00123 $attempt = new stdClass(); 00124 $attempt->timefinish = 10000; 00125 00126 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000); 00127 $this->assertFalse($rule->description()); 00128 $this->assertFalse($rule->prevent_access()); 00129 $this->assertFalse($rule->is_finished(0, $attempt)); 00130 $this->assertFalse($rule->time_left($attempt, 0)); 00131 00132 $this->assertFalse($rule->prevent_new_attempt(0, $attempt)); 00133 $this->assertFalse($rule->prevent_new_attempt(5, $attempt)); 00134 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00135 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(12000))); 00136 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00137 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00138 $this->assertEqual($rule->prevent_new_attempt(3, $attempt), 00139 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00140 $attempt->timefinish = 8000; 00141 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00142 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00143 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00144 $attempt->timefinish = 8001; 00145 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00146 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00147 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00148 $this->assertFalse($rule->prevent_new_attempt(4, $attempt)); 00149 $attempt->timefinish = 9000; 00150 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00151 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00152 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00153 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00154 $attempt->timefinish = 9001; 00155 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00156 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001))); 00157 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00158 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00159 $this->assertEqual($rule->prevent_new_attempt(4, $attempt), 00160 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00161 } 00162 00163 public function test_with_close_date() { 00164 $quiz = new stdClass(); 00165 $quiz->attempts = 5; 00166 $quiz->timelimit = 0; 00167 $quiz->delay1 = 2000; 00168 $quiz->delay2 = 1000; 00169 $quiz->timeclose = 15000; 00170 $quiz->questions = ''; 00171 $cm = new stdClass(); 00172 $cm->id = 0; 00173 $quizobj = new quiz($quiz, $cm, null); 00174 $attempt = new stdClass(); 00175 $attempt->timefinish = 13000; 00176 00177 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000); 00178 $this->assertFalse($rule->description()); 00179 $this->assertFalse($rule->prevent_access()); 00180 $this->assertFalse($rule->is_finished(0, $attempt)); 00181 $this->assertFalse($rule->time_left($attempt, 0)); 00182 00183 $attempt->timefinish = 13000; 00184 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00185 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(15000))); 00186 $attempt->timefinish = 13001; 00187 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00188 get_string('youcannotwait', 'quizaccess_delaybetweenattempts')); 00189 $attempt->timefinish = 14000; 00190 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00191 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(15000))); 00192 $attempt->timefinish = 14001; 00193 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00194 get_string('youcannotwait', 'quizaccess_delaybetweenattempts')); 00195 00196 $rule = new quizaccess_delaybetweenattempts($quizobj, 15000); 00197 $attempt->timefinish = 13000; 00198 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00199 $attempt->timefinish = 13001; 00200 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00201 get_string('youcannotwait', 'quizaccess_delaybetweenattempts')); 00202 $attempt->timefinish = 14000; 00203 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00204 $attempt->timefinish = 14001; 00205 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00206 get_string('youcannotwait', 'quizaccess_delaybetweenattempts')); 00207 00208 $rule = new quizaccess_delaybetweenattempts($quizobj, 15001); 00209 $attempt->timefinish = 13000; 00210 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00211 $attempt->timefinish = 13001; 00212 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00213 $attempt->timefinish = 14000; 00214 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00215 $attempt->timefinish = 14001; 00216 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00217 } 00218 00219 public function test_time_limit_and_overdue() { 00220 $quiz = new stdClass(); 00221 $quiz->attempts = 5; 00222 $quiz->timelimit = 100; 00223 $quiz->delay1 = 2000; 00224 $quiz->delay2 = 1000; 00225 $quiz->timeclose = 0; 00226 $quiz->questions = ''; 00227 $cm = new stdClass(); 00228 $cm->id = 0; 00229 $quizobj = new quiz($quiz, $cm, null); 00230 $attempt = new stdClass(); 00231 $attempt->timestart = 9900; 00232 $attempt->timefinish = 10100; 00233 00234 $rule = new quizaccess_delaybetweenattempts($quizobj, 10000); 00235 $this->assertFalse($rule->description()); 00236 $this->assertFalse($rule->prevent_access()); 00237 $this->assertFalse($rule->is_finished(0, $attempt)); 00238 $this->assertFalse($rule->time_left($attempt, 0)); 00239 00240 $this->assertFalse($rule->prevent_new_attempt(0, $attempt)); 00241 $this->assertFalse($rule->prevent_new_attempt(5, $attempt)); 00242 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00243 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(12000))); 00244 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00245 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00246 $this->assertEqual($rule->prevent_new_attempt(3, $attempt), 00247 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00248 $attempt->timestart = 7950; 00249 $attempt->timefinish = 8000; 00250 $this->assertFalse($rule->prevent_new_attempt(1, $attempt)); 00251 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00252 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00253 $attempt->timestart = 7950; 00254 $attempt->timefinish = 8001; 00255 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00256 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00257 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00258 $this->assertFalse($rule->prevent_new_attempt(4, $attempt)); 00259 $attempt->timestart = 8950; 00260 $attempt->timefinish = 9000; 00261 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00262 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00263 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00264 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00265 $attempt->timestart = 8950; 00266 $attempt->timefinish = 9001; 00267 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00268 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001))); 00269 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00270 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00271 $this->assertEqual($rule->prevent_new_attempt(4, $attempt), 00272 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00273 $attempt->timestart = 8900; 00274 $attempt->timefinish = 9100; 00275 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00276 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11000))); 00277 $this->assertFalse($rule->prevent_new_attempt(2, $attempt)); 00278 $this->assertFalse($rule->prevent_new_attempt(3, $attempt)); 00279 $attempt->timestart = 8901; 00280 $attempt->timefinish = 9100; 00281 $this->assertEqual($rule->prevent_new_attempt(1, $attempt), 00282 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(11001))); 00283 $this->assertEqual($rule->prevent_new_attempt(2, $attempt), 00284 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00285 $this->assertEqual($rule->prevent_new_attempt(4, $attempt), 00286 get_string('youmustwait', 'quizaccess_delaybetweenattempts', userdate(10001))); 00287 } 00288 }