diff --git a/app/graphql/types/grades_type.rb b/app/graphql/types/grades_type.rb index 4505631caea..42454e5c32c 100644 --- a/app/graphql/types/grades_type.rb +++ b/app/graphql/types/grades_type.rb @@ -46,6 +46,14 @@ module Types The override score. Supersedes the computed final score if set. DESC + field :override_grade, String, <<~DESC, null: true + The override grade. Supersedes the computed final grade if set. + DESC + def override_grade + return nil if override_score.blank? + object.effective_final_grade + end + field :grading_period, GradingPeriodType, null: true def grading_period load_association :grading_period diff --git a/schema.graphql b/schema.graphql index 4ec462c3b06..1f7f34cd828 100644 --- a/schema.graphql +++ b/schema.graphql @@ -836,6 +836,11 @@ type Grades { finalScore: Float gradingPeriod: GradingPeriod + """ + The override grade. Supersedes the computed final grade if set. + """ + overrideGrade: String + """ The override score. Supersedes the computed final score if set. """ diff --git a/spec/graphql/types/grades_type_spec.rb b/spec/graphql/types/grades_type_spec.rb index ec801a9d82f..96f2e93fe03 100644 --- a/spec/graphql/types/grades_type_spec.rb +++ b/spec/graphql/types/grades_type_spec.rb @@ -23,6 +23,7 @@ describe Types::GradesType do let!(:account) { Account.create! } let!(:course) { account.courses.create!(grading_standard_enabled: true) } let!(:student_enrollment) { course.enroll_student(User.create!, enrollment_state: 'active') } + let!(:score) { student_enrollment.find_score(grading_period_id: grading_period.id) } let!(:grading_period) do group = account.grading_period_groups.create!(title: "a test group") group.enrollment_terms << course.enrollment_term @@ -39,7 +40,6 @@ describe Types::GradesType do let(:enrollment_type) { GraphQLTypeTester.new(student_enrollment, current_user: teacher) } before(:each) do - score = student_enrollment.find_score(grading_period_id: grading_period.id) score.update!( current_score: 68.0, final_score: 78.1, @@ -66,6 +66,20 @@ describe Types::GradesType do expect(resolve_grades_field("overrideScore")).to eq 88.2 end + it "resolves the overrideGrade field to the corresponding Score's override grade" do + expect(resolve_grades_field("overrideGrade")).to eq "B+" + end + + it "resolves the overrideGrade field to nil when grading standards are not enabled" do + course.update!(grading_standard_id: nil) + expect(resolve_grades_field("overrideGrade")).to be nil + end + + it "resolves the overrideGrade field to nil when an override score is not present" do + score.update!(override_score: nil) + expect(resolve_grades_field("overrideGrade")).to be nil + end + it "resolves the unpostedCurrentScore field to the corresponding Score's unposted_current_score" do expect(resolve_grades_field("unpostedCurrentScore")).to eq 71.3 end