discourse/spec/components/file_helper_spec.rb

133 lines
3.2 KiB
Ruby
Raw Normal View History

2017-05-16 04:56:29 +08:00
require 'rails_helper'
require 'file_helper'
describe FileHelper do
let(:url) { "https://eviltrout.com/trout.png" }
let(:png) { File.read("#{Rails.root}/spec/fixtures/images/cropped.png") }
2017-05-16 04:56:29 +08:00
before do
stub_request(:any, /https:\/\/eviltrout.com/)
2017-05-16 04:56:29 +08:00
stub_request(:get, url).to_return(body: png)
end
describe "download" do
it "correctly raises an OpenURI HTTP error if it gets a 404 even with redirect" do
url = "http://fourohfour.com/404"
stub_request(:get, url).to_return(status: 404, body: "404")
expect do
begin
FileHelper.download(
url,
max_file_size: 10000,
tmp_file_name: 'trouttmp',
follow_redirect: true
)
rescue => e
expect(e.io.status[0]).to eq("404")
raise
end
end.to raise_error(OpenURI::HTTPError)
end
it "correctly raises an OpenURI HTTP error if it gets a 404" do
url = "http://fourohfour.com/404"
stub_request(:get, url).to_return(status: 404, body: "404")
expect do
begin
FileHelper.download(
url,
max_file_size: 10000,
tmp_file_name: 'trouttmp',
follow_redirect: false
)
rescue => e
expect(e.io.status[0]).to eq("404")
raise
end
end.to raise_error(OpenURI::HTTPError)
end
2017-05-16 04:56:29 +08:00
it "returns a file with the image" do
2018-08-17 17:34:25 +08:00
begin
tmpfile = FileHelper.download(
url,
max_file_size: 10000,
tmp_file_name: 'trouttmp'
)
expect(Base64.encode64(tmpfile.read)).to eq(Base64.encode64(png))
ensure
tmpfile&.close
end
2017-05-16 04:56:29 +08:00
end
it "works with a protocol relative url" do
2018-08-17 17:34:25 +08:00
begin
tmpfile = FileHelper.download(
"//eviltrout.com/trout.png",
max_file_size: 10000,
tmp_file_name: 'trouttmp'
)
expect(Base64.encode64(tmpfile.read)).to eq(Base64.encode64(png))
ensure
tmpfile&.close
end
2017-05-16 04:56:29 +08:00
end
describe 'when max_file_size is exceeded' do
it 'should return nil' do
tmpfile = FileHelper.download(
"//eviltrout.com/trout.png",
max_file_size: 1,
tmp_file_name: 'trouttmp'
)
expect(tmpfile).to eq(nil)
end
2018-08-17 16:52:55 +08:00
it 'is able to retain the tmpfile' do
2018-08-17 17:34:25 +08:00
begin
tmpfile = FileHelper.download(
"//eviltrout.com/trout.png",
max_file_size: 1,
tmp_file_name: 'trouttmp',
retain_on_max_file_size_exceeded: true
)
2018-08-17 16:52:55 +08:00
2018-08-17 17:34:25 +08:00
expect(tmpfile.closed?).to eq(false)
ensure
tmpfile&.close
end
2018-08-17 16:52:55 +08:00
end
end
describe 'when url is a jpeg' do
let(:url) { "https://eviltrout.com/trout.jpg" }
it "should prioritize the content type returned by the response" do
2018-08-17 17:34:25 +08:00
begin
stub_request(:get, url).to_return(body: png, headers: {
"content-type": "image/png"
})
2018-08-17 17:34:25 +08:00
tmpfile = FileHelper.download(
url,
max_file_size: 10000,
tmp_file_name: 'trouttmp'
)
2018-08-17 17:34:25 +08:00
expect(File.extname(tmpfile)).to eq('.png')
ensure
tmpfile&.close
end
end
end
2017-05-16 04:56:29 +08:00
end
end