MDL-40264 fix essay handling of zero-string response
authorKyle Temkin <ktemkin@binghamton.edu>
Fri, 21 Jun 2013 07:28:59 +0000 (03:28 -0400)
committerKyle Temkin <ktemkin@binghamton.edu>
Fri, 21 Jun 2013 07:39:23 +0000 (03:39 -0400)
Fixes an inappropriate behavior of the is_complete_response() function
for the Essay question type, which caused the string "0" to be
inappropriately marked as an incomplete response.

Also adds a set of unit tests for the Essay question type's
is_complete_response.

question/type/essay/question.php
question/type/essay/tests/question_test.php

index 19ad588..f85eff6 100644 (file)
@@ -82,7 +82,7 @@ class qtype_essay_question extends question_with_responses {
     }
 
     public function is_complete_response(array $response) {
-        return !empty($response['answer']);
+        return array_key_exists('answer', $response) && ($response['answer'] !== '');
     }
 
     public function is_same_response(array $prevresponse, array $newresponse) {
index 6381a6d..24a2231 100644 (file)
@@ -49,4 +49,19 @@ class qtype_essay_question_test extends advanced_testcase {
         $this->assertEquals($longstring,
                 $essay->summarise_response(array('answer' => $longstring)));
     }
+
+    public function test_is_complete_response() {
+
+        $essay = test_question_maker::make_an_essay_question();
+        $essay->start_attempt(new question_attempt_step(), 1);
+
+        // The empty string should be considered an empty response, as should a lack of a response.
+        $this->assertFalse($essay->is_complete_response(array('answer' => '')));
+        $this->assertFalse($essay->is_complete_response(array()));
+
+        // Any nonempty string should be considered a complete response.
+        $this->assertTrue($essay->is_complete_response(array('answer' => 'A student response.')));
+        $this->assertTrue($essay->is_complete_response(array('answer' => '0 times.')));
+        $this->assertTrue($essay->is_complete_response(array('answer' => '0')));
+    }
 }