From b522d8ae04431e7ae4e0102ebad8a0c4cda1cc48 Mon Sep 17 00:00:00 2001 From: Drake Harper Date: Mon, 16 Oct 2023 11:43:00 -0600 Subject: [PATCH] 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 Product-Review: Jason Gillett QA-Review: Caleb Guanzon Tested-by: Service Cloud Jenkins --- app/graphql/mutations/assignment_base.rb | 15 ++++++++ app/graphql/mutations/discussion_base.rb | 1 + spec/apis/v1/discussion_topics_api_spec.rb | 1 - .../mutations/create_assignment_spec.rb | 38 +++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/graphql/mutations/assignment_base.rb b/app/graphql/mutations/assignment_base.rb index 6db8e713270..e8ee47d42f4 100644 --- a/app/graphql/mutations/assignment_base.rb +++ b/app/graphql/mutations/assignment_base.rb @@ -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 diff --git a/app/graphql/mutations/discussion_base.rb b/app/graphql/mutations/discussion_base.rb index 81acf052cda..23bcf740852 100644 --- a/app/graphql/mutations/discussion_base.rb +++ b/app/graphql/mutations/discussion_base.rb @@ -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 diff --git a/spec/apis/v1/discussion_topics_api_spec.rb b/spec/apis/v1/discussion_topics_api_spec.rb index d6b06b1eaf2..da2daac35ce 100644 --- a/spec/apis/v1/discussion_topics_api_spec.rb +++ b/spec/apis/v1/discussion_topics_api_spec.rb @@ -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, diff --git a/spec/graphql/mutations/create_assignment_spec.rb b/spec/graphql/mutations/create_assignment_spec.rb index 9a04c1b0da8..5a327856fe2 100644 --- a/spec/graphql/mutations/create_assignment_spec.rb +++ b/spec/graphql/mutations/create_assignment_spec.rb @@ -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}"