preserve excused status when grading groups

This change prevents accidentally grading students who were excused on
a group assignment

Test plan:
  * make a group assignment
  * excuse one student
  * grade a different student
  * all students should be graded, except the excused student (who
    should still be excused)

Change-Id: I2f6fa33f839fcda220df3502dd9f271c762f8bbf
Reviewed-on: https://gerrit.instructure.com/56154
Tested-by: Jenkins
Reviewed-by: Josh Simpson <jsimpson@instructure.com>
QA-Review: Adrian Foong <afoong@instructure.com>
Product-Review: Cameron Matheson <cameron@instructure.com>
This commit is contained in:
Cameron Matheson 2015-06-10 14:53:26 -06:00
parent 2ac2affe34
commit d9001e963c
2 changed files with 29 additions and 16 deletions

View File

@ -1001,6 +1001,7 @@ class Assignment < ActiveRecord::Base
if student == original_student || grade_group_students
previously_graded = submission.grade.present?
next if previously_graded && dont_overwrite_grade
next if student != original_student && submission.excused?
did_grade = false
submission.attributes = opts

View File

@ -524,22 +524,34 @@ describe Assignment do
expect(submission).to be_excused
end
it "doesn't mark everyone in the group excused" do
student1, student2 = n_students_in_course(2)
gc = @course.group_categories.create! name: "asdf"
group = gc.groups.create! name: "zxcv", context: @course
[student1, student2].each { |u|
group.group_memberships.create! user: u, workflow_state: "accepted"
}
@assignment.update_attribute :group_category, gc
student_in_course active_all: true
sub1, sub2 = @assignment.grade_student(student1,
excuse: true,
comment: "...",
group_comment: true)
expect(sub1).to be_excused
expect(sub1.user).to eq student1
expect(sub2).to_not be_excused
context "group assignments" do
before :once do
@student1, @student2 = n_students_in_course(2)
gc = @course.group_categories.create! name: "asdf"
group = gc.groups.create! name: "zxcv", context: @course
[@student1, @student2].each { |u|
group.group_memberships.create! user: u, workflow_state: "accepted"
}
@assignment.update_attribute :group_category, gc
end
it "doesn't mark everyone in the group excused" do
sub1, sub2 = @assignment.grade_student(@student1,
excuse: true,
comment: "...",
group_comment: true)
expect(sub1).to be_excused
expect(sub1.user).to eq @student1
expect(sub2).to_not be_excused
end
it "doesn't overwrite excused assignments" do
sub1 = @assignment.grade_student(@student1, excuse: true).first
expect(sub1).to be_excused
sub2 = @assignment.grade_student(@student2, grade: 10).first
expect(sub1.reload).to be_excused
end
end
end
end