Update Grading Period to support parent assignment

flag=discussion_checkpoints
fixes VICE-3829

test plan:
- new spec passes
- whatever else you can think of

Change-Id: Ic5a558b20e1bcf67b44929f915d83bbd321a48ef
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/351785
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Omar Soto-Fortuño <omar.soto@instructure.com>
Product-Review: Caleb Guanzon <cguanzon@instructure.com>
This commit is contained in:
Caleb Guanzon 2024-07-02 09:30:13 -06:00
parent c28350cf53
commit f3b9f72ea1
2 changed files with 40 additions and 0 deletions

View File

@ -25,6 +25,7 @@ class Checkpoints::SubmissionAggregatorService < Checkpoints::AggregatorService
:graded_anonymously,
:grader_id,
:grade_matches_current_submission,
:grading_period_id,
:late_policy_status,
:published_grade,
:published_score,
@ -71,6 +72,7 @@ class Checkpoints::SubmissionAggregatorService < Checkpoints::AggregatorService
submission.excused = submissions.any?(&:excused)
submission.grade = grade(submissions, submission.score)
submission.grading_period_id = shared_attribute(submissions, :grading_period_id, nil)
submission.late_policy_status = calculate_late_policy_status(submissions)
submission.published_grade = grade(submissions, submission.published_score)
submission.grade_matches_current_submission = calculate_grade_matches_current_submission(submissions)

View File

@ -715,6 +715,44 @@ describe Checkpoints::SubmissionAggregatorService do
end
end
describe "grading_period_id" do
before :once do
gpg = GradingPeriodGroup.create! title: "asdf",
root_account: @course.root_account
@course.enrollment_term.update grading_period_group: gpg
@term1 = gpg.grading_periods.create! title: "past grading period",
start_date: 2.weeks.ago,
end_date: 1.week.ago
@term2 = gpg.grading_periods.create! title: "current grading period",
start_date: 2.days.ago,
end_date: 2.days.from_now
end
it "sets the grading_period_id to the grading_period_id shared by both checkpoints" do
submission.grading_period_id = nil
submission.save!
# before running the service, make sure checkpoint submissions are still in @term2
expect(sub_assignment_submissions.first.grading_period_id).to eq @term2.id
expect(sub_assignment_submissions.last.grading_period_id).to eq @term2.id
success = service_call
expect(success).to be true
expect(submission.reload.grading_period_id).to eq @term2.id
end
it "sets the grading_period_id to nil when checkpoints are in different grading periods" do
Submission.suspend_callbacks(:aggregate_checkpoint_submissions) do
sub_assignment_submissions.first.update!(grading_period_id: @term1.id)
sub_assignment_submissions.last.update!(grading_period_id: @term2.id)
end
success = service_call
expect(success).to be true
expect(submission.reload.grading_period_id).to be_nil
end
end
describe "late_policy_status" do
it "computes late + late = late" do
Submission.suspend_callbacks(:aggregate_checkpoint_submissions) do