From db1052ce5cbbab3e35eca8b6d01ff2d6eecb11e3 Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Tue, 2 Oct 2012 15:51:45 +0100 Subject: [PATCH] MDL-35744 quiz: fix review options for Never submitted attempts --- mod/quiz/locallib.php | 2 +- mod/quiz/tests/locallib_test.php | 88 ++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) diff --git a/mod/quiz/locallib.php b/mod/quiz/locallib.php index fc59804e0ea..f55f5909f12 100644 --- a/mod/quiz/locallib.php +++ b/mod/quiz/locallib.php @@ -987,7 +987,7 @@ function quiz_get_flag_option($attempt, $context) { * IMMEDIATELY_AFTER, LATER_WHILE_OPEN or AFTER_CLOSE constants. */ function quiz_attempt_state($quiz, $attempt) { - if ($attempt->state != quiz_attempt::FINISHED) { + if ($attempt->state == quiz_attempt::IN_PROGRESS) { return mod_quiz_display_options::DURING; } else if (time() < $attempt->timefinish + 120) { return mod_quiz_display_options::IMMEDIATELY_AFTER; diff --git a/mod/quiz/tests/locallib_test.php b/mod/quiz/tests/locallib_test.php index d058b3c9a55..177947cbd94 100644 --- a/mod/quiz/tests/locallib_test.php +++ b/mod/quiz/tests/locallib_test.php @@ -151,4 +151,92 @@ class mod_quiz_locallib_testcase extends basic_testcase { $this->assertEquals(1, quiz_get_slot_for_question($quiz, 1)); $this->assertEquals(3, quiz_get_slot_for_question($quiz, 7)); } + + 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 test_quiz_attempt_state_recently_submitted() { + $attempt = new stdClass(); + $attempt->state = quiz_attempt::FINISHED; + $attempt->timefinish = time() - 10; + + $quiz = new stdClass(); + $quiz->timeclose = 0; + + $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)); + } }