MDL-60897 qtype_multianswer: Invalid cloze-questions saved to db
authorJean-Michel Vedrine <vedrine@vedrine.org>
Sat, 20 Oct 2018 16:29:10 +0000 (18:29 +0200)
committerJun Pataleta <jun@moodle.com>
Wed, 31 Oct 2018 01:29:53 +0000 (09:29 +0800)
question/type/multianswer/edit_multianswer_form.php
question/type/multianswer/tests/behat/add.feature [new file with mode: 0644]

index 80e12ed..141d1f1 100644 (file)
@@ -512,14 +512,12 @@ class qtype_multianswer_edit_form extends question_edit_form {
                             }
                         }
                     }
-                    if ($answercount == 0) {
-                        if ($subquestion->qtype == 'multichoice') {
+                    if ($subquestion->qtype == 'multichoice' && $answercount < 2) {
                             $errors[$prefix.'answer[0]'] =
                                     get_string('notenoughanswers', 'qtype_multichoice', 2);
-                        } else {
+                    } else if ($answercount == 0) {
                             $errors[$prefix.'answer[0]'] =
                                     get_string('notenoughanswers', 'question', 1);
-                        }
                     }
                     if ($maxgrade == false) {
                         $errors[$prefix.'fraction[0]'] =
diff --git a/question/type/multianswer/tests/behat/add.feature b/question/type/multianswer/tests/behat/add.feature
new file mode 100644 (file)
index 0000000..5bcb71f
--- /dev/null
@@ -0,0 +1,40 @@
+@qtype @qtype_multianswer
+Feature: Test creating a Multianswer (Cloze) question
+  As a teacher
+  In order to test my students
+  I need to be able to create a Cloze question
+
+  Background:
+    Given the following "users" exist:
+      | username | firstname | lastname | email               |
+      | teacher1 | T1        | Teacher1 | teacher1@moodle.com |
+    And the following "courses" exist:
+      | fullname | shortname | category |
+      | Course 1 | C1        | 0        |
+    And the following "course enrolments" exist:
+      | user     | course | role           |
+      | teacher1 | C1     | editingteacher |
+    And I log in as "teacher1"
+    And I am on "Course 1" course homepage
+    And I navigate to "Question bank" in current page administration
+
+  Scenario: Create a Cloze question
+    When I add a "Embedded answers (Cloze)" question filling the form with:
+      | Question name        | multianswer-001                                     |
+      | Question text        | {1:SHORTANSWER:=Berlin} is the capital of Germany.  |
+      | General feedback     | The capital of Germany is Berlin.                   |
+    Then I should see "multianswer-001"
+
+  Scenario: Create a broken Cloze question and correct it
+    When I press "Create a new question ..."
+    And I set the field "Embedded answers (Cloze)" to "1"
+    And I press "Add"
+    And I set the field "Question name" to "multianswer-002"
+    And I set the field "Question text" to "Please select the fruits {1:MULTICHOICE:=Apple#Correct}"
+    And I set the field "General feedback" to "Apple are delicious."
+    And I press "id_submitbutton"
+    Then I should see "This type of question requires at least 2 choices"
+    When I set the following fields to these values:
+      | Question text | Please select the fruits {1:MULTICHOICE:=Apple#Correct~Banana#Wrong} |
+    And I press "id_submitbutton"
+    Then I should not see "This type of question requires at least 2 choices"