196 lines
7.1 KiB
Ruby
196 lines
7.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
#
|
|
# Copyright (C) 2018 - 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 FileAuthenticator do
|
|
before :each do
|
|
@oauth_host = 'http://oauth.host/'
|
|
@user = user_model
|
|
@access_token = @user.access_tokens.create!
|
|
@acting_as = user_model
|
|
@attachment = attachment_with_context(@user)
|
|
@attachment.filename = "test.txt"
|
|
@authenticator = FileAuthenticator.new(
|
|
user: @user,
|
|
acting_as: @acting_as,
|
|
access_token: @access_token,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
)
|
|
end
|
|
|
|
describe "fingerprint" do
|
|
it "is a hexdigest string" do
|
|
expect(@authenticator.fingerprint).to match(/^\h{32}$/)
|
|
end
|
|
|
|
it "is stable across instances with the same parameters" do
|
|
User.where(id: @user).update_all(updated_at: Time.now.utc)
|
|
reloaded = User.where(id: @user).first
|
|
new_authenticator = FileAuthenticator.new(
|
|
user: reloaded,
|
|
acting_as: @acting_as,
|
|
access_token: nil,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
)
|
|
expect(new_authenticator.fingerprint).to eql(@authenticator.fingerprint)
|
|
end
|
|
|
|
it "is unique across instances with different parameters" do
|
|
new_authenticator = FileAuthenticator.new(
|
|
user: user_model,
|
|
acting_as: @acting_as,
|
|
access_token: nil,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
)
|
|
expect(new_authenticator.fingerprint).not_to eql(@authenticator.fingerprint)
|
|
end
|
|
end
|
|
|
|
context "with an inst-fs attachment" do
|
|
before do
|
|
@attachment.instfs_uuid = 1
|
|
end
|
|
|
|
describe "download_url" do
|
|
it "constructs an instfs download url" do
|
|
download_url = 'http://downloadUrl'
|
|
expect(InstFS).to receive(:authenticated_url)
|
|
.with(@attachment, include(download: true))
|
|
.and_return(download_url)
|
|
expect(@authenticator.download_url(@attachment)).to eql(download_url)
|
|
end
|
|
|
|
it "constructs a url specific to the authenticator params" do
|
|
expect(InstFS).to receive(:authenticated_url)
|
|
.with(@attachment, include(
|
|
user: @user,
|
|
acting_as: @acting_as,
|
|
access_token: @access_token,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
))
|
|
@authenticator.download_url(@attachment)
|
|
end
|
|
end
|
|
|
|
describe "inline_url" do
|
|
it "constructs an instfs inline url" do
|
|
inline_url = 'http://inlineUrl'
|
|
expect(InstFS).to receive(:authenticated_url)
|
|
.with(@attachment, include(download: false))
|
|
.and_return(inline_url)
|
|
expect(@authenticator.inline_url(@attachment)).to eql(inline_url)
|
|
end
|
|
|
|
it "constructs a url specific to the authenticator params" do
|
|
expect(InstFS).to receive(:authenticated_url)
|
|
.with(@attachment, include(
|
|
user: @user,
|
|
acting_as: @acting_as,
|
|
access_token: @access_token,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
))
|
|
@authenticator.inline_url(@attachment)
|
|
end
|
|
end
|
|
|
|
describe "thumbnail_url" do
|
|
it "returns nil if Attachment.skip_thumbnails" do
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(false)
|
|
allow(Attachment).to receive(:skip_thumbnails).and_return(true)
|
|
expect(@authenticator.thumbnail_url(@attachment)).to be_nil
|
|
end
|
|
|
|
it "returns nil if attachment is not thumbnailable" do
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(false)
|
|
expect(@authenticator.thumbnail_url(@attachment)).to be_nil
|
|
end
|
|
|
|
it "constructs an instfs thumbnail url" do
|
|
thumbnail_url = 'http://thumbnailUrl'
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(true)
|
|
expect(InstFS).to receive(:authenticated_thumbnail_url)
|
|
.with(@attachment, anything)
|
|
.and_return(thumbnail_url)
|
|
expect(@authenticator.thumbnail_url(@attachment)).to eql(thumbnail_url)
|
|
end
|
|
|
|
it "passes along the thumbnail geometry" do
|
|
geometry = "640>"
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(true)
|
|
expect(InstFS).to receive(:authenticated_thumbnail_url)
|
|
.with(@attachment, include(geometry: geometry))
|
|
@authenticator.thumbnail_url(@attachment, size: geometry)
|
|
end
|
|
|
|
it "passes along the original_url" do
|
|
original_url = "http://example.com/preview/1234"
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(true)
|
|
expect(InstFS).to receive(:authenticated_thumbnail_url)
|
|
.with(@attachment, include(original_url: original_url))
|
|
@authenticator.thumbnail_url(@attachment, original_url: original_url)
|
|
end
|
|
|
|
it "constructs a url specific to the authenticator params" do
|
|
allow(@attachment).to receive(:thumbnailable?).and_return(true)
|
|
expect(InstFS).to receive(:authenticated_thumbnail_url)
|
|
.with(@attachment, include(
|
|
user: @user,
|
|
acting_as: @acting_as,
|
|
access_token: @access_token,
|
|
root_account: Account.default,
|
|
oauth_host: @oauth_host
|
|
))
|
|
@authenticator.thumbnail_url(@attachment)
|
|
end
|
|
end
|
|
end
|
|
|
|
context "with a non-inst-fs attachment" do
|
|
before :each do
|
|
@attachment.instfs_uuid = nil
|
|
end
|
|
|
|
it "delegates to attachment.thumbnail_url" do
|
|
geometry = "640>"
|
|
thumbnail = double()
|
|
expect(@attachment).to receive(:thumbnail_url)
|
|
.with(include(size: geometry))
|
|
.and_return(thumbnail)
|
|
expect(@authenticator.thumbnail_url(@attachment, size: geometry)).to be(thumbnail)
|
|
end
|
|
|
|
it "delegates to attachment.public_download_url" do
|
|
download_url = 'http://downloadUrl'
|
|
expect(@attachment).to receive(:public_download_url).and_return(download_url)
|
|
expect(@authenticator.download_url(@attachment)).to be(download_url)
|
|
end
|
|
|
|
it "delegates to attachment.public_inline_url" do
|
|
inline_url = 'http://inlineUrl'
|
|
expect(@attachment).to receive(:public_inline_url).and_return(inline_url)
|
|
expect(@authenticator.inline_url(@attachment)).to be(inline_url)
|
|
end
|
|
end
|
|
end
|