add override_grade field to GradesType

closes GRADE-2003

Test Plan
- Enable Final Grade Overrides feature.
- Enable a grading scheme.
- Assign an override grade to one student, and have another student
  on hand that does not have an override grade.
- Run a query for override scores/grades on both students:

query {
  legacyNode(_id: `enrollment_id`, type: Enrollment) {
    ... on Enrollment {
      user {
        name
      }
      grades {
        overrideScore
        overrideGrade
      }
    }
  }
}

- Verify that the student with an override grade has it here.
- Verify that the student without an override grade does not have it
  here.

- Disable the grading scheme and verify that the override grade is
  null.

Change-Id: I8b7e824095c044e24f08e59f21d25347a3f3b9b9
Reviewed-on: https://gerrit.instructure.com/181747
Reviewed-by: Cameron Matheson <cameron@instructure.com>
Reviewed-by: Keith Garner <kgarner@instructure.com>
Tested-by: Jenkins
QA-Review: Gary Mei <gmei@instructure.com>
Product-Review: Keith Garner <kgarner@instructure.com>
This commit is contained in:
Gary Mei 2019-02-14 12:05:15 -06:00
parent fa6254f21e
commit 68398f3e87
3 changed files with 28 additions and 1 deletions

View File

@ -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

View File

@ -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.
"""

View File

@ -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