Skip to content

Commit

Permalink
MDL-53803 mod_choice: remove orphaned answers when removing options
Browse files Browse the repository at this point in the history
  • Loading branch information
sbourget committed Jul 6, 2016
1 parent 566f5a7 commit 9cf520a
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
7 changes: 5 additions & 2 deletions mod/choice/lib.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,8 +175,11 @@ function choice_update_instance($choice) {
$option->id=$choice->optionid[$key];
if (isset($value) && $value <> '') {
$DB->update_record("choice_options", $option);
} else { //empty old option - needs to be deleted.
$DB->delete_records("choice_options", array("id"=>$option->id));
} else {
// Remove the empty (unused) option.
$DB->delete_records("choice_options", array("id" => $option->id));
// Delete any answers associated with this option.
$DB->delete_records("choice_answers", array("choiceid" => $choice->id, "optionid" => $option->id));
}
} else {
if (isset($value) && $value <> '') {
Expand Down
50 changes: 50 additions & 0 deletions mod/choice/tests/behat/remove_choice_options.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
@mod @mod_choice
Feature: Update a choice activity removing options
In order to remove incorrect or unwanted options
As a teacher
I need to update the choice activity

Scenario: Update a choice activity that has student responses.
Given the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
| student1 | Student | 1 | student1@example.com |
| student2 | Student | 2 | student2@example.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 |
| student1 | C1 | student |
| student2 | C1 | student |
And I log in as "teacher1"
And I follow "Course 1"
And I turn editing mode on
And I add a "Choice" to section "1" and I fill the form with:
| Choice name | Choice name |
| Description | Choice Description |
| option[0] | Option 1 |
| option[1] | Option 2 |
| option[2] | Option 3 |
And I log out
And I log in as "student1"
And I follow "Course 1"
And I choose "Option 3" from "Choice name" choice activity
And I should see "Your selection: Option 3"
And I should see "Your choice has been saved"
And I log out
And I log in as "student2"
And I follow "Course 1"
And I choose "Option 2" from "Choice name" choice activity
And I should see "Your selection: Option 2"
And I should see "Your choice has been saved"
And I log out
When I log in as "teacher1"
And I follow "Course 1"
And I follow "Choice name"
And I should see "View 2 responses"
And I navigate to "Edit settings" node in "Choice administration"
And I set the field "option[2]" to ""
And I press "Save and display"
Then I should see "View 1 responses"

0 comments on commit 9cf520a

Please sign in to comment.