diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/controllers/direct_uploads_controller_test.rb | 18 | ||||
-rw-r--r-- | test/controllers/disk_controller_test.rb | 59 | ||||
-rw-r--r-- | test/service/shared_service_tests.rb | 4 | ||||
-rw-r--r-- | test/test_helper.rb | 4 |
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__)), |