fixes applying statuses to group submissions

closes TALLY-324
flag=none

Test Plan
- Create a group assignment and assign it to a group with at least
  two students.
- In the New Gradebook, apply one of (Late/Missing) to
  one of the students' submissions.
- Verify that the other student received the same status.

Change-Id: Ia692488b8e420dd12e08b82f93d2a627121a66d6
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/223520
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jeremy Neander <jneander@instructure.com>
Reviewed-by: Adrian Packel <apackel@instructure.com>
QA-Review: Adrian Packel <apackel@instructure.com>
Product-Review: Spencer Olson <solson@instructure.com>
This commit is contained in:
Gary Mei 2020-01-16 14:36:47 -06:00
parent 93110b44d3
commit e87a32d0e3
2 changed files with 116 additions and 4 deletions

View File

@ -820,11 +820,21 @@ class SubmissionsApiController < ApplicationController
@submissions ||= [@submission]
end
if submission.key?(:late_policy_status) || submission.key?(:seconds_late_override)
@submission.late_policy_status = submission[:late_policy_status] if submission.key?(:late_policy_status)
if @submission.late_policy_status == 'late' && submission[:seconds_late_override].present?
@submission.seconds_late_override = submission[:seconds_late_override]
excused = Canvas::Plugin.value_to_boolean(submission[:excuse])
grade_group_students = !(@assignment.grade_group_students_individually || excused)
if grade_group_students
_, students = @assignment.group_students(@user)
@submissions = @assignment.find_or_create_submissions(students, Submission.preload(:grading_period, :stream_item))
end
@submissions.each do |sub|
sub.late_policy_status = submission[:late_policy_status] if submission.key?(:late_policy_status)
if sub.late_policy_status == "late" && submission[:seconds_late_override].present?
sub.seconds_late_override = submission[:seconds_late_override]
end
sub.save!
end
@submission.save!
end
assessment = params[:rubric_assessment]

View File

@ -2887,6 +2887,108 @@ describe 'Submissions API', type: :request do
expect(json['excused']).to eq false
end
context "group assignments" do
before do
@student2 = @course.enroll_student(User.create!, enrollment_state: :active).user
group_category = @course.group_categories.create!(name: "Category")
group = @course.groups.create!(name: "Group", group_category: group_category)
group.users = [@student, @student2]
@assignment.update!(group_category: group_category, grade_group_students_individually: false)
end
it "can set late policy status on a group member's submission" do
api_call(
:put,
"/api/v1/courses/#{@course.id}/assignments/#{@assignment.id}/submissions/#{@student.id}.json",
{
controller: "submissions_api",
action: "update",
format: "json",
course_id: @course.id.to_s,
assignment_id: @assignment.id.to_s,
user_id: @student.id.to_s
}, {
submission: {
late_policy_status: 'missing'
}
}
)
submission = @assignment.submission_for_student(@student2)
expect(submission.late_policy_status).to eq 'missing'
end
it "can set seconds_late_override on a group member's submission" do
seconds_late_override = 3.days
api_call(
:put,
"/api/v1/courses/#{@course.id}/assignments/#{@assignment.id}/submissions/#{@student.id}.json",
{
controller: 'submissions_api',
action: 'update',
format: 'json',
course_id: @course.id.to_s,
assignment_id: @assignment.id.to_s,
user_id: @student.id.to_s
}, {
submission: {
late_policy_status: 'late',
seconds_late_override: seconds_late_override
}
}
)
submission = @assignment.submission_for_student(@student2)
expect(submission.seconds_late).to eq seconds_late_override.to_i
end
it "does not excuse the whole group when excusing one group member" do
api_call(
:put,
"/api/v1/courses/#{@course.id}/assignments/#{@assignment.id}/submissions/#{@student.id}.json",
{
controller: "submissions_api",
action: "update",
format: "json",
course_id: @course.id.to_s,
assignment_id: @assignment.id.to_s,
user_id: @student.id.to_s
}, {
submission: {
excuse: "1",
late_policy_status: 'missing'
}
}
)
submission = @assignment.submission_for_student(@student2)
expect(submission).not_to be_excused
end
it "does not set late policy status for the whole group when assignment grades individually" do
@assignment.update!(grade_group_students_individually: true)
api_call(
:put,
"/api/v1/courses/#{@course.id}/assignments/#{@assignment.id}/submissions/#{@student.id}.json",
{
controller: "submissions_api",
action: "update",
format: "json",
course_id: @course.id.to_s,
assignment_id: @assignment.id.to_s,
user_id: @student.id.to_s
}, {
submission: {
late_policy_status: 'missing'
}
}
)
submission = @assignment.submission_for_student(@student2)
expect(submission.late_policy_status).not_to eq "missing"
end
end
it "can set late policy status on a submission" do
json = api_call(
:put,