1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activestorage/test/controllers/disk_controller_test.rb

95 lines
3.6 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require "test_helper"
require "database/setup"
2017-07-27 16:15:38 -04:00
class ActiveStorage::DiskControllerTest < ActionDispatch::IntegrationTest
test "showing blob inline" do
blob = create_blob
2017-07-27 17:05:38 -04:00
get blob.service_url
assert_response :ok
2018-05-03 09:03:48 -04:00
assert_equal "inline; filename=\"hello.txt\"; filename*=UTF-8''hello.txt", response.headers["Content-Disposition"]
assert_equal "text/plain", response.headers["Content-Type"]
assert_equal "Hello world!", response.body
end
2017-07-27 16:52:57 -04:00
test "showing blob as attachment" do
blob = create_blob
2017-07-27 17:05:38 -04:00
get blob.service_url(disposition: :attachment)
assert_response :ok
2018-05-03 09:03:48 -04:00
assert_equal "attachment; filename=\"hello.txt\"; filename*=UTF-8''hello.txt", response.headers["Content-Disposition"]
assert_equal "text/plain", response.headers["Content-Type"]
assert_equal "Hello world!", response.body
end
test "showing blob range inline" do
blob = create_blob
get blob.service_url, headers: { "Range" => "bytes=5-9" }
assert_response :partial_content
assert_equal "inline; filename=\"hello.txt\"; filename*=UTF-8''hello.txt", response.headers["Content-Disposition"]
assert_equal "text/plain", response.headers["Content-Type"]
assert_equal " worl", response.body
end
test "showing blob that does not exist" do
blob = create_blob
blob.delete
get blob.service_url
assert_response :not_found
end
2017-07-27 17:07:52 -04:00
test "directly uploading blob with integrity" do
2017-07-27 17:05:38 -04:00
data = "Something else entirely!"
blob = create_blob_before_direct_upload byte_size: data.size, checksum: Digest::MD5.base64digest(data)
2017-07-27 17:05:38 -04:00
put blob.service_url_for_direct_upload, params: data, headers: { "Content-Type" => "text/plain" }
assert_response :no_content
assert_equal data, blob.download
end
test "directly uploading blob without integrity" do
2017-07-27 17:05:38 -04:00
data = "Something else entirely!"
blob = create_blob_before_direct_upload byte_size: data.size, checksum: Digest::MD5.base64digest("bad data")
2017-07-27 16:52:57 -04:00
2017-07-27 17:05:38 -04:00
put blob.service_url_for_direct_upload, params: data
2017-07-27 16:52:57 -04:00
assert_response :unprocessable_entity
assert_not blob.service.exist?(blob.key)
end
test "directly uploading blob with mismatched content type" do
2017-07-27 17:05:38 -04:00
data = "Something else entirely!"
blob = create_blob_before_direct_upload byte_size: data.size, checksum: Digest::MD5.base64digest(data)
2017-07-27 17:05:38 -04:00
put blob.service_url_for_direct_upload, params: data, headers: { "Content-Type" => "application/octet-stream" }
2017-07-27 16:52:57 -04:00
assert_response :unprocessable_entity
assert_not blob.service.exist?(blob.key)
end
test "directly uploading blob with different but equivalent content type" do
data = "Something else entirely!"
blob = create_blob_before_direct_upload(
byte_size: data.size, checksum: Digest::MD5.base64digest(data), content_type: "application/x-gzip")
put blob.service_url_for_direct_upload, params: data, headers: { "Content-Type" => "application/x-gzip" }
assert_response :no_content
assert_equal data, blob.download
end
2017-07-27 16:52:57 -04:00
test "directly uploading blob with mismatched content length" do
2017-07-27 17:05:38 -04:00
data = "Something else entirely!"
blob = create_blob_before_direct_upload byte_size: data.size - 1, checksum: Digest::MD5.base64digest(data)
2017-07-27 17:05:38 -04:00
put blob.service_url_for_direct_upload, params: data, headers: { "Content-Type" => "text/plain" }
assert_response :unprocessable_entity
assert_not blob.service.exist?(blob.key)
end
2018-07-15 20:12:53 -04:00
test "directly uploading blob with invalid token" do
put update_rails_disk_service_url(encoded_token: "invalid"),
params: "Something else entirely!", headers: { "Content-Type" => "text/plain" }
assert_response :not_found
end
end