MDL-55815 quiz: convert attempt state tests to a data provider

This commit is contained in:
Tim Hunt
2016-08-31 12:54:18 +01:00
parent 35d5053ba2
commit daf6becfb0
+34 -80
View File
@@ -55,92 +55,46 @@ class mod_quiz_locallib_testcase extends advanced_testcase {
format_float(0.247, 3));
}
public function test_quiz_attempt_state_in_progress() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::IN_PROGRESS;
$attempt->timefinish = 0;
$quiz = new stdClass();
$quiz->timeclose = 0;
$this->assertEquals(mod_quiz_display_options::DURING, quiz_attempt_state($quiz, $attempt));
public function quiz_attempt_state_data_provider() {
return [
[quiz_attempt::IN_PROGRESS, null, null, mod_quiz_display_options::DURING],
[quiz_attempt::FINISHED, -10, null, mod_quiz_display_options::IMMEDIATELY_AFTER],
[quiz_attempt::FINISHED, -7200, null, mod_quiz_display_options::LATER_WHILE_OPEN],
[quiz_attempt::FINISHED, -7200, 3600, mod_quiz_display_options::LATER_WHILE_OPEN],
[quiz_attempt::FINISHED, -7200, -3600, mod_quiz_display_options::AFTER_CLOSE],
[quiz_attempt::ABANDONED, -10000000, null, mod_quiz_display_options::LATER_WHILE_OPEN],
[quiz_attempt::ABANDONED, -7200, 3600, mod_quiz_display_options::LATER_WHILE_OPEN],
[quiz_attempt::ABANDONED, -7200, -3600, mod_quiz_display_options::AFTER_CLOSE],
];
}
public function test_quiz_attempt_state_recently_submitted() {
/**
* @dataProvider quiz_attempt_state_data_provider
*
* @param unknown $attemptstate as in the quiz_attempts.state DB column.
* @param unknown $relativetimefinish time relative to now when the attempt finished, or null for 0.
* @param unknown $relativetimeclose time relative to now when the quiz closes, or null for 0.
* @param unknown $expectedstate expected result. One of the mod_quiz_display_options constants/
*/
public function test_quiz_attempt_state($attemptstate,
$relativetimefinish, $relativetimeclose, $expectedstate) {
$attempt = new stdClass();
$attempt->state = quiz_attempt::FINISHED;
$attempt->timefinish = time() - 10;
$attempt->state = $attemptstate;
if ($relativetimefinish === null) {
$attempt->timefinish = 0;
} else {
$attempt->timefinish = time() + $relativetimefinish;
}
$quiz = new stdClass();
$quiz->timeclose = 0;
if ($relativetimeclose === null) {
$quiz->timeclose = 0;
} else {
$quiz->timeclose = time() + $relativetimeclose;
}
$this->assertEquals(mod_quiz_display_options::IMMEDIATELY_AFTER, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_sumitted_quiz_never_closes() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::FINISHED;
$attempt->timefinish = time() - 7200;
$quiz = new stdClass();
$quiz->timeclose = 0;
$this->assertEquals(mod_quiz_display_options::LATER_WHILE_OPEN, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_sumitted_quiz_closes_later() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::FINISHED;
$attempt->timefinish = time() - 7200;
$quiz = new stdClass();
$quiz->timeclose = time() + 3600;
$this->assertEquals(mod_quiz_display_options::LATER_WHILE_OPEN, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_sumitted_quiz_closed() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::FINISHED;
$attempt->timefinish = time() - 7200;
$quiz = new stdClass();
$quiz->timeclose = time() - 3600;
$this->assertEquals(mod_quiz_display_options::AFTER_CLOSE, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_never_sumitted_quiz_never_closes() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::ABANDONED;
$attempt->timefinish = 1000; // A very long time ago!
$quiz = new stdClass();
$quiz->timeclose = 0;
$this->assertEquals(mod_quiz_display_options::LATER_WHILE_OPEN, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_never_sumitted_quiz_closes_later() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::ABANDONED;
$attempt->timefinish = time() - 7200;
$quiz = new stdClass();
$quiz->timeclose = time() + 3600;
$this->assertEquals(mod_quiz_display_options::LATER_WHILE_OPEN, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_attempt_state_never_sumitted_quiz_closed() {
$attempt = new stdClass();
$attempt->state = quiz_attempt::ABANDONED;
$attempt->timefinish = time() - 7200;
$quiz = new stdClass();
$quiz->timeclose = time() - 3600;
$this->assertEquals(mod_quiz_display_options::AFTER_CLOSE, quiz_attempt_state($quiz, $attempt));
$this->assertEquals($expectedstate, quiz_attempt_state($quiz, $attempt));
}
public function test_quiz_question_tostring() {