From 11f6680deec05ae45aa563c8956dbd9adf1a0f53 Mon Sep 17 00:00:00 2001 From: Kyle Temkin Date: Wed, 19 Jun 2013 23:31:01 -0400 Subject: [PATCH] MDL-40264 fix essay handling of zero-string response 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 | 2 +- question/type/essay/tests/question_test.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/question/type/essay/question.php b/question/type/essay/question.php index 2979e01ec5b..aee24fa746c 100644 --- a/question/type/essay/question.php +++ b/question/type/essay/question.php @@ -84,7 +84,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) { diff --git a/question/type/essay/tests/question_test.php b/question/type/essay/tests/question_test.php index d137419db8e..2420162e62f 100644 --- a/question/type/essay/tests/question_test.php +++ b/question/type/essay/tests/question_test.php @@ -137,4 +137,19 @@ class qtype_essay_question_test extends advanced_testcase { array('answer' => ''), array('answer' => '0'))); } + + 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'))); + } }