Website : rimsha.abasa.com
backdoor
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
var
/
canvas
/
spec
/
graphql
/
mutations
/
Filename :
update_learning_outcome_group_spec.rb
back
Copy
# frozen_string_literal: true # # Copyright (C) 2021 - present Instructure, Inc. # # This file is part of Canvas. # # Canvas is free software: you can redistribute it and/or modify it under # the terms of the GNU Affero General Public License as published by the Free # Software Foundation, version 3 of the License. # # Canvas is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU Affero General Public License for more # details. # # You should have received a copy of the GNU Affero General Public License along # with this program. If not, see <http://www.gnu.org/licenses/>. # require "spec_helper" require_relative "../graphql_spec_helper" describe Mutations::UpdateLearningOutcomeGroup do include GraphQLSpecHelper before :once do @admin = account_admin_user(account: @account) course_with_student @old_parent_group = @course.learning_outcome_groups.create!(title: "Old Parent Outcome Group") @new_parent_group = @course.learning_outcome_groups.create!(title: "New Parent Outcome Group") @group = @course.learning_outcome_groups.create!(title: "Outcome Group", description: "Description", vendor_guid: "vg--0") @global_group = LearningOutcomeGroup.create(title: "Global Group") @new_parent_global_group = LearningOutcomeGroup.create(title: "New Parent Global Group") end let(:context) { { current_user: @admin } } def mutation_str(**attrs) <<~GQL mutation { updateLearningOutcomeGroup( input: { #{gql_arguments("", **attrs)} } ) { learningOutcomeGroup { _id title description vendorGuid parentOutcomeGroup { _id title } } errors { attribute message } } } GQL end def execute_query(mutation_str, context) CanvasSchema.execute(mutation_str, context:) end context "Mutation" do context "As user with manage_outcomes permisssion" do it "updates learning outcome group" do result = execute_query( mutation_str( id: @group.id, title: "Updated Outcome Group", description: "Updated Description", vendorGuid: "vg--1", parentOutcomeGroupId: @new_parent_group.id ), context ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Updated Outcome Group" expect(data["description"]).to eq "Updated Description" expect(data["vendorGuid"]).to eq "vg--1" expect(data["parentOutcomeGroup"]["_id"]).to eq @new_parent_group.id.to_s end it "updates title of learning outcome group if only title provided" do result = execute_query( mutation_str( id: @group.id, title: "Updated Outcome Group" ), context ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Updated Outcome Group" expect(data["description"]).to eq "Description" expect(data["vendorGuid"]).to eq "vg--0" expect(data["parentOutcomeGroup"]["_id"]).to eq @old_parent_group.id.to_s end it "updates description of learning outcome group if only description provided" do result = execute_query( mutation_str( id: @group.id, description: "Updated Description" ), context ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Outcome Group" expect(data["description"]).to eq "Updated Description" expect(data["vendorGuid"]).to eq "vg--0" expect(data["parentOutcomeGroup"]["_id"]).to eq @old_parent_group.id.to_s end it "updates vendor_guid of learning outcome group if only vendor_guid provided" do result = execute_query( mutation_str( id: @group.id, vendor_guid: "vg--1" ), context ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Outcome Group" expect(data["description"]).to eq "Description" expect(data["vendorGuid"]).to eq "vg--1" expect(data["parentOutcomeGroup"]["_id"]).to eq @old_parent_group.id.to_s end it "updates parent group of learning outcome group if only new_parent_group_id provided" do result = execute_query( mutation_str( id: @group.id, parent_outcome_group_id: @new_parent_group.id ), context ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Outcome Group" expect(data["description"]).to eq "Description" expect(data["vendorGuid"]).to eq "vg--0" expect(data["parentOutcomeGroup"]["_id"]).to eq @new_parent_group.id.to_s end end context "As user with manage_global_outcomes permission" do it "updates global learning outcome group" do result = execute_query( mutation_str( id: @global_group.id, title: "Updated Global Outcome Group", description: "Updated Description", vendorGuid: "vg--1", parentOutcomeGroupId: @new_parent_global_group.id ), { current_user: site_admin_user } ) expect(result["errors"]).to be_nil expect(result.dig("data", "updateLearningOutcomeGroup", "errors")).to be_nil data = result.dig("data", "updateLearningOutcomeGroup", "learningOutcomeGroup") expect(data["title"]).to eq "Updated Global Outcome Group" expect(data["description"]).to eq "Updated Description" expect(data["vendorGuid"]).to eq "vg--1" expect(data["parentOutcomeGroup"]["_id"]).to eq @new_parent_global_group.id.to_s end end end context "Errors" do def expect_error(result, message) errors = result["errors"] || result.dig("data", "updateLearningOutcomeGroup", "errors") expect(errors).not_to be_nil expect(errors[0]["message"]).to match(message) end it "requires outcome group to exist" do result = execute_query(mutation_str(id: 99_999), context) expect_error(result, "Group not found") end it "requires parent outcome group to exist if provided" do result = execute_query( mutation_str( id: @group.id, parent_outcome_group_id: 99_999 ), context ) expect_error(result, "Parent group not found in this context") end it "requires parent outcome group to be in the same context as the outcome group" do result = execute_query( mutation_str( id: @group.id, parent_outcome_group_id: @global_group.id ), context ) expect_error(result, "Parent group not found in this context") end it "requires user to have manage_outcomes permission to update learning outcome group" do result = execute_query( mutation_str(id: @group.id), { current_user: @teacher } ) expect_error(result, "Insufficient permissions") end it "requires user to have manage_global_outcomes permission to update global learning outcome group" do result = execute_query( mutation_str(id: @global_group.id), context ) expect_error(result, "Insufficient permissions") end end end