aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/controllers/direct_uploads_controller_test.rb18
-rw-r--r--test/controllers/disk_controller_test.rb59
-rw-r--r--test/service/shared_service_tests.rb4
-rw-r--r--test/test_helper.rb4
4 files changed, 78 insertions, 7 deletions
diff --git a/test/controllers/direct_uploads_controller_test.rb b/test/controllers/direct_uploads_controller_test.rb
index 8f309d0b28..76741d277e 100644
--- a/test/controllers/direct_uploads_controller_test.rb
+++ b/test/controllers/direct_uploads_controller_test.rb
@@ -61,3 +61,21 @@ if SERVICE_CONFIGURATIONS[:gcs]
else
puts "Skipping GCS Direct Upload tests because no GCS configuration was supplied"
end
+
+class ActiveStorage::DiskDirectUploadsControllerTest < ActionController::TestCase
+ setup do
+ @blob = create_blob
+ @routes = Routes
+ @controller = ActiveStorage::DirectUploadsController.new
+ end
+
+ test "creating new direct upload" do
+ post :create, params: { blob: {
+ filename: "hello.txt", byte_size: 6, checksum: Digest::MD5.base64digest("Hello"), content_type: "text/plain" } }
+
+ JSON.parse(@response.body).tap do |details|
+ assert_match /rails\/active_storage\/disk/, details["upload_to_url"]
+ assert_equal "hello.txt", ActiveStorage::Blob.find_signed(details["signed_blob_id"]).filename.to_s
+ end
+ end
+end
diff --git a/test/controllers/disk_controller_test.rb b/test/controllers/disk_controller_test.rb
index 58c56d2d0b..a1542b0784 100644
--- a/test/controllers/disk_controller_test.rb
+++ b/test/controllers/disk_controller_test.rb
@@ -5,20 +5,67 @@ require "active_storage/disk_controller"
class ActiveStorage::DiskControllerTest < ActionController::TestCase
setup do
- @blob = create_blob
@routes = Routes
@controller = ActiveStorage::DiskController.new
end
test "showing blob inline" do
- get :show, params: { filename: @blob.filename, encoded_key: ActiveStorage.verifier.generate(@blob.key, expires_in: 5.minutes, purpose: :blob_key) }
- assert_equal "inline; filename=\"#{@blob.filename}\"", @response.headers["Content-Disposition"]
+ blob = create_blob
+
+ get :show, params: { filename: blob.filename, encoded_key: ActiveStorage.verifier.generate(blob.key, expires_in: 5.minutes, purpose: :blob_key) }
+ assert_equal "inline; filename=\"#{blob.filename}\"", @response.headers["Content-Disposition"]
assert_equal "text/plain", @response.headers["Content-Type"]
end
- test "sending blob as attachment" do
- get :show, params: { filename: @blob.filename, encoded_key: ActiveStorage.verifier.generate(@blob.key, expires_in: 5.minutes, purpose: :blob_key), disposition: :attachment }
- assert_equal "attachment; filename=\"#{@blob.filename}\"", @response.headers["Content-Disposition"]
+ test "showing blob as attachment" do
+ blob = create_blob
+
+ get :show, params: { filename: blob.filename, encoded_key: ActiveStorage.verifier.generate(blob.key, expires_in: 5.minutes, purpose: :blob_key), disposition: :attachment }
+ assert_equal "attachment; filename=\"#{blob.filename}\"", @response.headers["Content-Disposition"]
assert_equal "text/plain", @response.headers["Content-Type"]
end
+
+ test "directly uploading blob with integrity" do
+ data = "Something else entirely!"
+ blob = create_blob_before_direct_upload byte_size: data.size, checksum: Digest::MD5.base64digest(data)
+
+ token = ActiveStorage.verifier.generate(
+ {
+ key: blob.key,
+ content_length: data.size,
+ content_type: "text/plain",
+ checksum: Digest::MD5.base64digest(data)
+ },
+ expires_in: 5.minutes,
+ purpose: :blob_token
+ )
+
+ @request.content_type = "text/plain"
+
+ put :update, body: data, params: { encoded_token: token }
+ assert_response :no_content
+ assert_equal data, blob.download
+ end
+
+ test "directly uploading blob without integrity" do
+ data = "Something else entirely!"
+ blob = create_blob_before_direct_upload byte_size: data.size, checksum: Digest::MD5.base64digest(data)
+
+ token = ActiveStorage.verifier.generate(
+ {
+ key: blob.key,
+ content_length: data.size,
+ content_type: "text/plain",
+ checksum: Digest::MD5.base64digest("bad data")
+ },
+ expires_in: 5.minutes,
+ purpose: :blob_token
+ )
+
+ @request.content_type = "text/plain"
+
+ put :update, body: data, params: { encoded_token: token }
+ assert_response :unprocessable_entity
+ assert_not blob.service.exist?(blob.key)
+ end
end
diff --git a/test/service/shared_service_tests.rb b/test/service/shared_service_tests.rb
index ad6a9dea7f..07620d91e4 100644
--- a/test/service/shared_service_tests.rb
+++ b/test/service/shared_service_tests.rb
@@ -29,7 +29,7 @@ module ActiveStorage::Service::SharedServiceTests
end
end
- test "upload without integrity" do
+ test "uploading without integrity" do
begin
key = SecureRandom.base58(24)
data = "Something else entirely!"
@@ -37,6 +37,8 @@ module ActiveStorage::Service::SharedServiceTests
assert_raises(ActiveStorage::IntegrityError) do
@service.upload(key, StringIO.new(data), checksum: Digest::MD5.base64digest("bad data"))
end
+
+ assert_not @service.exist?(key)
ensure
@service.delete key
end
diff --git a/test/test_helper.rb b/test/test_helper.rb
index d3a55e2cf0..154a2f0835 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -43,6 +43,10 @@ class ActiveSupport::TestCase
filename: filename, content_type: content_type
end
+ def create_blob_before_direct_upload(filename: "hello.txt", byte_size:, checksum:, content_type: "text/plain")
+ ActiveStorage::Blob.create_before_direct_upload! filename: filename, byte_size: byte_size, checksum: checksum, content_type: content_type
+ end
+
def assert_same_image(fixture_filename, variant)
assert_equal \
File.binread(File.expand_path("../fixtures/files/#{fixture_filename}", __FILE__)),