From 4fae2c3001753bf83f731a141c5fc06c356bfeee Mon Sep 17 00:00:00 2001 From: Tim Hunt Date: Mon, 18 May 2020 22:55:50 +0100 Subject: [PATCH] MDL-68733 quiz editing: behat test for altering random question tags --- mod/quiz/editrandom.php | 3 +- mod/quiz/locallib.php | 8 +-- .../tests/behat/editing_edit_random.feature | 55 +++++++++++++++++++ question/type/random/questiontype.php | 2 +- 4 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 mod/quiz/tests/behat/editing_edit_random.feature diff --git a/mod/quiz/editrandom.php b/mod/quiz/editrandom.php index c6c39943bf7..f1e94554bec 100644 --- a/mod/quiz/editrandom.php +++ b/mod/quiz/editrandom.php @@ -149,7 +149,8 @@ if ($mform->is_cancelled()) { // Now, delete the remaining records. if (!empty($recordstokeep)) { list($select, $params) = $DB->get_in_or_equal($recordstokeep, SQL_PARAMS_QM, 'param', false); - $DB->delete_records_select('quiz_slot_tags', "slotid = {$slot->id} AND id $select", $params); + array_unshift($params, $slot->id); + $DB->delete_records_select('quiz_slot_tags', "slotid = ? AND id $select", $params); } else { $DB->delete_records('quiz_slot_tags', array('slotid' => $slot->id)); } diff --git a/mod/quiz/locallib.php b/mod/quiz/locallib.php index 06dc74be819..a90a3575c42 100644 --- a/mod/quiz/locallib.php +++ b/mod/quiz/locallib.php @@ -2522,13 +2522,13 @@ function quiz_is_overriden_calendar_event(\calendar_event $event) { * has one tag, and the third has zero tags. The return structure will look like: * [ * 1 => [ - * { ...tag data... }, - * { ...tag data... }, + * quiz_slot_tags.id => { ...tag data... }, + * quiz_slot_tags.id => { ...tag data... }, * ], * 2 => [ - * { ...tag data... } + * quiz_slot_tags.id => { ...tag data... }, * ], - * 3 => [] + * 3 => [], * ] * * @param int[] $slotids The list of id for the quiz slots. diff --git a/mod/quiz/tests/behat/editing_edit_random.feature b/mod/quiz/tests/behat/editing_edit_random.feature new file mode 100644 index 00000000000..d853b4ee0de --- /dev/null +++ b/mod/quiz/tests/behat/editing_edit_random.feature @@ -0,0 +1,55 @@ +@mod @mod_quiz @javascript +Feature: Editing random questions already in a quiz based on category and tags + In order to have better assessment + As a teacher + I want to be able to update how questions are randomly picked from the question bank + + Background: + Given the following "users" exist: + | username | firstname | lastname | email | + | teacher1 | Teacher | 1 | t1@example.com | + And the following "courses" exist: + | fullname | shortname | + | Course 1 | C1 | + And the following "course enrolments" exist: + | user | course | role | + | teacher1 | C1 | editingteacher | + And the following "activities" exist: + | activity | name | intro | course | idnumber | + | quiz | Quiz 1 | Quiz 1 for testing the Add random question form | C1 | quiz1 | + And the following "question categories" exist: + | contextlevel | reference | name | + | Course | C1 | Questions Category 1| + | Course | C1 | Questions Category 2| + And the following "questions" exist: + | questioncategory | qtype | name | user | questiontext | + | Questions Category 1 | essay | question 1 name | admin | Question 1 text | + | Questions Category 1 | essay | question 2 name | teacher1 | Question 2 text | + And the following "core_question > Tags" exist: + | question | tag | + | question 1 name | easy | + | question 1 name | essay | + | question 2 name | hard | + | question 2 name | essay | + + Scenario: Editing tags on one slot does not delete the rest + Given I am on the "Quiz 1" "mod_quiz > Edit" page logged in as "teacher1" + And I open the "last" add to quiz menu + And I follow "a random question" + # To actually reproduce MDL-68733 it would be better to set tags easy,essay here, and then below just delete one tag. + # However, the state of Behat for autocomplete fields does not let us actually do that. + And I set the field "Tags" to "easy" + And I press "Add random question" + And I open the "Page 1" add to quiz menu + And I follow "a random question" + And I set the field "Tags" to "hard" + And I press "Add random question" + And I follow "Add page break" + When I click on "Configure question" "link" in the "Random (Questions Category 1, tags: easy)" "list_item" + And I click on "easy" "autocomplete_selection" + And I set the field "Tags" to "essay" + And I press "Save changes" + Then I should see "Random (Questions Category 1, tags: essay)" on quiz page "1" + And I should see "Random (Questions Category 1, tags: hard)" on quiz page "2" + And I click on "Configure question" "link" in the "Questions Category 1, tags: hard" "list_item" + And "hard" "autocomplete_selection" should be visible diff --git a/question/type/random/questiontype.php b/question/type/random/questiontype.php index b3999863088..c4305d554bd 100644 --- a/question/type/random/questiontype.php +++ b/question/type/random/questiontype.php @@ -166,7 +166,7 @@ class qtype_random extends question_type { if ($categoryname) { $a->category = $categoryname; } - $a->tags = implode(',', array_map(function($tagname) { + $a->tags = implode(', ', array_map(function($tagname) { return explode(',', $tagname)[1]; }, $tagnames)); } else {