aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/blob_test.rb2
-rw-r--r--test/direct_uploads_controller_test.rb36
-rw-r--r--test/disk_controller_test.rb9
-rw-r--r--test/service/disk_service_test.rb2
-rw-r--r--test/service/s3_service_test.rb31
-rw-r--r--test/service/shared_service_tests.rb8
-rw-r--r--test/test_helper.rb22
7 files changed, 91 insertions, 19 deletions
diff --git a/test/blob_test.rb b/test/blob_test.rb
index ac9ca37487..60cf5426a8 100644
--- a/test/blob_test.rb
+++ b/test/blob_test.rb
@@ -23,6 +23,6 @@ class ActiveStorage::BlobTest < ActiveSupport::TestCase
private
def expected_url_for(blob, disposition: :inline)
- "/rails/blobs/#{ActiveStorage::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}/#{blob.filename}?disposition=#{disposition}"
+ "/rails/active_storage/disk/#{ActiveStorage::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}/#{blob.filename}?disposition=#{disposition}"
end
end
diff --git a/test/direct_uploads_controller_test.rb b/test/direct_uploads_controller_test.rb
new file mode 100644
index 0000000000..bed985148e
--- /dev/null
+++ b/test/direct_uploads_controller_test.rb
@@ -0,0 +1,36 @@
+require "test_helper"
+require "database/setup"
+
+require "action_controller"
+require "action_controller/test_case"
+
+require "active_storage/direct_uploads_controller"
+
+if SERVICE_CONFIGURATIONS[:s3]
+ class ActiveStorage::DirectUploadsControllerTest < ActionController::TestCase
+ setup do
+ @blob = create_blob
+ @routes = Routes
+ @controller = ActiveStorage::DirectUploadsController.new
+
+ @old_service = ActiveStorage::Blob.service
+ ActiveStorage::Blob.service = ActiveStorage::Service.configure(:s3, SERVICE_CONFIGURATIONS)
+ end
+
+ teardown do
+ ActiveStorage::Blob.service = @old_service
+ 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" } }
+
+ details = JSON.parse(@response.body)
+
+ assert_match /rails-activestorage\.s3.amazonaws\.com/, details["url"]
+ assert_equal "hello.txt", GlobalID::Locator.locate_signed(details["sgid"]).filename.to_s
+ end
+ end
+else
+ puts "Skipping Direct Upload tests because no S3 configuration was supplied"
+end
diff --git a/test/disk_controller_test.rb b/test/disk_controller_test.rb
index 119ee5828f..834ad1bfd9 100644
--- a/test/disk_controller_test.rb
+++ b/test/disk_controller_test.rb
@@ -1,19 +1,10 @@
require "test_helper"
require "database/setup"
-require "action_controller"
-require "action_controller/test_case"
-
require "active_storage/disk_controller"
require "active_storage/verified_key_with_expiration"
class ActiveStorage::DiskControllerTest < ActionController::TestCase
- Routes = ActionDispatch::Routing::RouteSet.new.tap do |routes|
- routes.draw do
- get "/rails/blobs/:encoded_key/*filename" => "active_storage/disk#show", as: :rails_disk_blob
- end
- end
-
setup do
@blob = create_blob
@routes = Routes
diff --git a/test/service/disk_service_test.rb b/test/service/disk_service_test.rb
index c5404f55e6..565acbf516 100644
--- a/test/service/disk_service_test.rb
+++ b/test/service/disk_service_test.rb
@@ -7,7 +7,7 @@ class ActiveStorage::Service::DiskServiceTest < ActiveSupport::TestCase
include ActiveStorage::Service::SharedServiceTests
test "url generation" do
- assert_match /rails\/blobs\/.*\/avatar\.png\?disposition=inline/,
+ assert_match /rails\/active_storage\/disk\/.*\/avatar\.png\?disposition=inline/,
@service.url(FIXTURE_KEY, expires_in: 5.minutes, disposition: :inline, filename: "avatar.png")
end
end
diff --git a/test/service/s3_service_test.rb b/test/service/s3_service_test.rb
index 3e1838e393..167aa78a17 100644
--- a/test/service/s3_service_test.rb
+++ b/test/service/s3_service_test.rb
@@ -1,4 +1,6 @@
require "service/shared_service_tests"
+require "httparty"
+require "uri"
if SERVICE_CONFIGURATIONS[:s3]
class ActiveStorage::Service::S3ServiceTest < ActiveSupport::TestCase
@@ -6,6 +8,35 @@ if SERVICE_CONFIGURATIONS[:s3]
include ActiveStorage::Service::SharedServiceTests
+ test "direct upload" do
+ # FIXME: This test is failing because of a mismatched request signature, but it works in the browser.
+ skip
+
+ begin
+ key = SecureRandom.base58(24)
+ data = "Something else entirely!"
+ direct_upload_url = @service.url_for_direct_upload(key, expires_in: 5.minutes, content_type: "text/plain", content_length: data.size)
+
+ url = URI.parse(direct_upload_url).to_s.split("?").first
+ query = CGI::parse(URI.parse(direct_upload_url).query).collect { |(k, v)| [ k, v.first ] }.to_h
+
+ HTTParty.post(
+ url,
+ query: query,
+ body: data,
+ headers: {
+ "Content-Type": "text/plain",
+ "Origin": "http://localhost:3000"
+ },
+ debug_output: STDOUT
+ )
+
+ assert_equal data, @service.download(key)
+ ensure
+ @service.delete key
+ end
+ end
+
test "signed URL generation" do
assert_match /rails-activestorage\.s3\.amazonaws\.com.*response-content-disposition=inline.*avatar\.png/,
@service.url(FIXTURE_KEY, expires_in: 5.minutes, disposition: :inline, filename: "avatar.png")
diff --git a/test/service/shared_service_tests.rb b/test/service/shared_service_tests.rb
index e799c24c35..ad6a9dea7f 100644
--- a/test/service/shared_service_tests.rb
+++ b/test/service/shared_service_tests.rb
@@ -1,13 +1,5 @@
require "test_helper"
require "active_support/core_ext/securerandom"
-require "yaml"
-
-SERVICE_CONFIGURATIONS = begin
- YAML.load_file(File.expand_path("../configurations.yml", __FILE__)).deep_symbolize_keys
-rescue Errno::ENOENT
- puts "Missing service configuration file in test/service/configurations.yml"
- {}
-end
module ActiveStorage::Service::SharedServiceTests
extend ActiveSupport::Concern
diff --git a/test/test_helper.rb b/test/test_helper.rb
index b67296a659..ca1e0cad7e 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -5,6 +5,17 @@ require "active_support/testing/autorun"
require "byebug"
require "active_storage"
+
+require "active_storage/service"
+require "yaml"
+SERVICE_CONFIGURATIONS = begin
+ YAML.load_file(File.expand_path("../service/configurations.yml", __FILE__)).deep_symbolize_keys
+rescue Errno::ENOENT
+ puts "Missing service configuration file in test/service/configurations.yml"
+ {}
+end
+
+
require "active_storage/service/disk_service"
ActiveStorage::Blob.service = ActiveStorage::Service::DiskService.new(root: File.join(Dir.tmpdir, "active_storage"))
ActiveStorage::Service.logger = ActiveSupport::Logger.new(STDOUT)
@@ -19,6 +30,16 @@ class ActiveSupport::TestCase
end
end
+require "action_controller"
+require "action_controller/test_case"
+
+class ActionController::TestCase
+ Routes = ActionDispatch::Routing::RouteSet.new.tap do |routes|
+ routes.draw do
+ eval(File.read(File.expand_path("../../lib/active_storage/routes.rb", __FILE__)))
+ end
+ end
+end
require "active_storage/attached"
ActiveRecord::Base.send :extend, ActiveStorage::Attached::Macros
@@ -26,3 +47,4 @@ ActiveRecord::Base.send :extend, ActiveStorage::Attached::Macros
require "global_id"
GlobalID.app = "ActiveStorageExampleApp"
ActiveRecord::Base.send :include, GlobalID::Identification
+SignedGlobalID.verifier = ActiveStorage::VerifiedKeyWithExpiration.verifier \ No newline at end of file