Add arguments for assignment input object

closes VICE-3798
flag=discussion_create

Test Plan:
- create an assignment via graphiql
 - with gradingStandardId

- create a discussion topic
 - with assignment

NOTE:
the assignment field will always return null
because the actual assignment creation will
be done in VICE-3799

Sample for discussion topic with assignment:
mutation MyMutation {
  __typename
  createDiscussionTopic(input: {contextId: "1",
    contextType: "Course",
    assignment: {
      name: "GQL Test Assignment Create 1",
      courseId: "1",
      pointsPossible: 15
    },
    title: "GQL Test Assignment Create 1"
  }) {
    discussionTopic {
      _id
      title
      assignment {
        _id
      }
    }
  }
}

Change-Id: Ib86f69307d6d2c91888cc88aab6d48d1fc163c44
Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/330480
Reviewed-by: Jason Gillett <jason.gillett@instructure.com>
Product-Review: Jason Gillett <jason.gillett@instructure.com>
QA-Review: Caleb Guanzon <cguanzon@instructure.com>
Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com>
This commit is contained in:
Drake Harper 2023-10-16 11:43:00 -06:00
parent 63b356d41c
commit b522d8ae04
4 changed files with 54 additions and 1 deletions

View File

@ -47,6 +47,20 @@ class Mutations::AssignmentPeerReviewsUpdate < GraphQL::Schema::InputObject
argument :automatic_reviews, Boolean, required: false
end
class Mutations::AssignmentCreateOrUpdate < GraphQL::Schema::InputObject
argument :assignment_group_id, ID, required: false
argument :assignment_overrides, [Mutations::AssignmentOverrideCreateOrUpdate], required: false
argument :course_id, ID, required: true
argument :due_at, Types::DateTimeType, required: false
argument :grading_type, Types::AssignmentType::AssignmentGradingType, required: false
argument :grading_standard_id, ID, required: false
argument :lock_at, Types::DateTimeType, required: false
argument :name, String, required: true
argument :peer_reviews, Mutations::AssignmentPeerReviewsUpdate, required: false
argument :points_possible, Float, required: false
argument :unlock_at, Types::DateTimeType, required: false
end
class Mutations::AssignmentBase < Mutations::BaseMutation
# we are required to wrap the update method with a proxy class because
# we are required to include `Api` for instance methods within the module.
@ -109,6 +123,7 @@ class Mutations::AssignmentBase < Mutations::BaseMutation
argument :allowed_attempts, Int, required: false
argument :only_visible_to_overrides, Boolean, required: false
argument :submission_types, [Types::AssignmentSubmissionType], required: false
argument :grading_standard_id, ID, required: false
argument :peer_reviews, Mutations::AssignmentPeerReviewsUpdate, required: false
argument :moderated_grading, Mutations::AssignmentModeratedGradingUpdate, required: false
argument :grade_group_students_individually, Boolean, required: false

View File

@ -20,6 +20,7 @@
class Mutations::DiscussionBase < Mutations::BaseMutation
argument :allow_rating, Boolean, required: false
argument :assignment, Mutations::AssignmentCreateOrUpdate, required: false
argument :delayed_post_at, Types::DateTimeType, required: false
argument :group_category_id, ID, required: false
argument :lock_at, Types::DateTimeType, required: false

View File

@ -609,7 +609,6 @@ describe DiscussionTopicsController, type: :request do
exclude_small_matches_value: 0,
submit_papers_to: true
},
publishable: true,
hidden: false,
unpublishable: true,
only_visible_to_overrides: false,

View File

@ -304,6 +304,44 @@ describe Mutations::CreateAssignment do
expect(section_override.due_at).to eq due3
end
it "sets lock_at_overridden" do
due1 = 1.day.from_now.round.change(min: 1)
result = execute_with_input <<~GQL
name: "assignment with overrides"
courseId: "#{@course.to_param}"
onlyVisibleToOverrides: true
assignmentOverrides: [
{
studentIds: [#{@student.to_param}]
dueAt: "#{due1.iso8601}"
lockAt: "#{due1.iso8601}"
unlockAt: "#{due1.iso8601}"
}
]
GQL
assignment = Assignment.find(result.dig("data", "createAssignment", "assignment", "_id"))
expect(assignment).to be_only_visible_to_overrides
student_override = assignment.assignment_overrides.where(set_type: "ADHOC").first
expect(student_override.due_at_overridden).to be true
expect(student_override.lock_at_overridden).to be true
expect(student_override.unlock_at_overridden).to be true
end
it "sets grade_standard_id" do
@standard = @course.account.grading_standards.create!(title: "account standard", standard_data: { a: { name: "A", value: "95" }, b: { name: "B", value: "80" }, f: { name: "F", value: "" } })
result = execute_with_input <<~GQL
name: "assignment with overrides"
courseId: "#{@course.to_param}"
gradingStandardId: "#{@standard.id}"
GQL
assignment = Assignment.find(result.dig("data", "createAssignment", "assignment", "_id"))
expect(assignment.grading_standard_id).to eq @standard.id
end
it "requires a name" do
result = execute_with_input <<~GQL
courseId: "#{@course.to_param}"