canvas-lms/spec/helpers/collaborations_helper_spec.rb

100 lines
4.5 KiB
Ruby

# frozen_string_literal: true
#
# Copyright (C) 2016 - 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/>.
#
describe CollaborationsHelper do
let(:user) { double("user") }
let(:course) { Course.new(name: "my course").tap { |t| allow(t).to receive_messages(id: 1) } }
let(:collab) { double("single collaboration").tap { |t| allow(t).to receive_messages(id: 1) } }
describe "collaboration" do
it "renders the collaborations" do
expect(helper).to receive(:render).with("collaborations/collaboration", include(collaboration: collab, user: user))
helper.collaboration(collab, user, false)
end
it "renders the google auth for google drive collaborations if the user does not have google docs authorized" do
allow(collab).to receive(:is_a?).with(GoogleDocsCollaboration).and_return(true)
expect(helper).to receive(:render).with("collaborations/auth_google_drive", collaboration: collab)
helper.collaboration(collab, user, false)
end
it "constructs the data attributes" do
expect(helper).to receive(:render).with("collaborations/collaboration", include(
data_attributes: include({ id: 1 })
))
helper.collaboration(collab, user, false)
end
it "has the data-update-launch-url attribute if it is a ExternalToolCollaboration" do
assign(:context, course)
launch_url = "http://example.com/test"
allow(collab).to receive(:is_a?).and_return false
allow(collab).to receive(:is_a?).with(ExternalToolCollaboration).and_return true
allow(collab).to receive(:update_url).and_return(launch_url)
expect(helper).to receive(:render).with("collaborations/collaboration",
include(
data_attributes: include(
update_launch_url: include(CGI.escape(launch_url)),
id: collab.id
)
))
helper.collaboration(collab, user, false)
end
end
describe "#edit_button" do
it "returns the edit button if the user has permissions" do
allow(collab).to receive(:grants_any_right?).and_return(true)
expect(helper).to receive(:render).with("collaborations/edit_button", collaboration: collab)
helper.edit_button(collab, user)
end
it "doesn't return the edit button for an ExternalToolCollaboration that don't have an edit url" do
allow(collab).to receive(:is_a?).with(ExternalToolCollaboration).and_return(true)
allow(collab).to receive(:update_url).and_return(nil)
allow(collab).to receive(:grants_any_right?).and_return(true)
expect(helper).not_to receive(:render)
helper.edit_button(collab, user)
end
end
describe "#delete_button" do
it "returns the delete button if the user has permissions" do
allow(collab).to receive(:grants_any_right?).and_return(true)
expect(helper).to receive(:render).with("collaborations/delete_button", collaboration: collab)
helper.delete_button(collab, user)
end
end
describe "#collaboration_links" do
it "returns collaboration links if the user has permissions" do
allow(collab).to receive(:grants_any_right?).and_return(true)
expect(helper).to receive(:render).with("collaborations/collaboration_links", collaboration: collab, user: user)
helper.collaboration_links(collab, user)
end
it "doesn't return collaboration links if the user doesn't have permission" do
allow(collab).to receive(:grants_any_right?).and_return(false)
expect(helper).not_to receive(:render).with("collaborations/collaboration_links", collaboration: collab, user: user)
helper.collaboration_links(collab, user)
end
end
end