mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
d6197d4c86
If a preview cannot be generated, the IO stream that is captured is empty, resulting in a 0-byte preview file being generated and stored in the Active Storage service. We came across this because Poppler was failing to generate previews of some PDFs, resulting in 0-byte files. Resizing those "previews" then resulted in a MiniMagick error. The MiniMagick error feels like the right end result if it's attempted on a 0-byte file, what doesn't feel right is `Previewer` proceeding normally if the child process that attempted to capture a preview exited unsuccessfully. Now, if the previewer child process exits with a non-0 status code, we raise an exception.
30 lines
974 B
Ruby
30 lines
974 B
Ruby
# frozen_string_literal: true
|
|
|
|
require "test_helper"
|
|
require "database/setup"
|
|
|
|
require "active_storage/previewer/video_previewer"
|
|
|
|
class ActiveStorage::Previewer::VideoPreviewerTest < ActiveSupport::TestCase
|
|
test "previewing an MP4 video" do
|
|
blob = create_file_blob(filename: "video.mp4", content_type: "video/mp4")
|
|
|
|
ActiveStorage::Previewer::VideoPreviewer.new(blob).preview do |attachable|
|
|
assert_equal "image/jpeg", attachable[:content_type]
|
|
assert_equal "video.jpg", attachable[:filename]
|
|
|
|
image = MiniMagick::Image.read(attachable[:io])
|
|
assert_equal 640, image.width
|
|
assert_equal 480, image.height
|
|
assert_equal "image/jpeg", image.mime_type
|
|
end
|
|
end
|
|
|
|
test "previewing a video that can't be previewed" do
|
|
blob = create_file_blob(filename: "report.pdf", content_type: "video/mp4")
|
|
|
|
assert_raises ActiveStorage::PreviewError do
|
|
ActiveStorage::Previewer::VideoPreviewer.new(blob).preview
|
|
end
|
|
end
|
|
end
|