aboutsummaryrefslogtreecommitdiffstats
path: root/test/models/blob_test.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/models/blob_test.rb')
-rw-r--r--test/models/blob_test.rb41
1 files changed, 41 insertions, 0 deletions
diff --git a/test/models/blob_test.rb b/test/models/blob_test.rb
new file mode 100644
index 0000000000..ddc000ed51
--- /dev/null
+++ b/test/models/blob_test.rb
@@ -0,0 +1,41 @@
+require "test_helper"
+require "database/setup"
+require "active_storage/blob"
+
+class ActiveStorage::BlobTest < ActiveSupport::TestCase
+ test "create after upload sets byte size and checksum" do
+ data = "Hello world!"
+ blob = create_blob data: data
+
+ assert_equal data, blob.download
+ assert_equal data.length, blob.byte_size
+ assert_equal Digest::MD5.base64digest(data), blob.checksum
+ end
+
+ test "download yields chunks" do
+ blob = create_blob data: "a" * 75.kilobytes
+ chunks = []
+
+ blob.download do |chunk|
+ chunks << chunk
+ end
+
+ assert_equal 2, chunks.size
+ assert_equal "a" * 64.kilobytes, chunks.first
+ assert_equal "a" * 11.kilobytes, chunks.second
+ end
+
+ test "urls expiring in 5 minutes" do
+ blob = create_blob
+
+ freeze_time do
+ assert_equal expected_url_for(blob), blob.url
+ assert_equal expected_url_for(blob, disposition: :attachment), blob.url(disposition: :attachment)
+ end
+ end
+
+ private
+ def expected_url_for(blob, disposition: :inline)
+ "/rails/active_storage/disk/#{ActiveStorage::VerifiedKeyWithExpiration.encode(blob.key, expires_in: 5.minutes)}/#{blob.filename}?disposition=#{disposition}"
+ end
+end