tests: skip video file tests if ffmpeg isn't installed.

This commit is contained in:
evazion
2020-06-10 18:07:54 -05:00
parent 15423e0b7b
commit 8a2ae91ff2
5 changed files with 31 additions and 14 deletions

View File

@@ -45,6 +45,10 @@ class MediaFile
end
end
def self.videos_enabled?
system("ffmpeg -version > /dev/null") && system("mkvmerge --version > /dev/null")
end
def initialize(file, **options)
@file = file
end

View File

@@ -2,10 +2,6 @@ class MediaFile::Ugoira < MediaFile
class Error < StandardError; end
attr_reader :frame_data
def self.conversion_enabled?
system("ffmpeg -version > /dev/null") && system("mkvmerge --version > /dev/null")
end
def initialize(file, frame_data: {}, **options)
super(file, **options)
@frame_data = frame_data
@@ -31,7 +27,7 @@ class MediaFile::Ugoira < MediaFile
# XXX should take width and height and resize image
def convert
raise NotImplementedError, "can't convert ugoira to webm: ffmpeg or mkvmerge not installed" unless self.class.conversion_enabled?
raise NotImplementedError, "can't convert ugoira to webm: ffmpeg or mkvmerge not installed" unless self.class.videos_enabled?
Dir.mktmpdir("ugoira-#{md5}") do |tmpdir|
output_file = Tempfile.new(["ugoira-conversion", ".webm"], binmode: true)

View File

@@ -22,6 +22,8 @@ class MediaFile::Video < MediaFile
private
def video
raise NotImplementedError, "can't process videos: ffmpeg or mkvmerge not installed" unless self.class.videos_enabled?
FFMPEG::Movie.new(file.path)
end

View File

@@ -22,14 +22,17 @@ class MediaFileTest < ActiveSupport::TestCase
end
should "determine the correct dimensions for a webm file" do
skip unless MediaFile.videos_enabled?
assert_equal([512, 512], MediaFile.open("test/files/test-512x512.webm").dimensions)
end
should "determine the correct dimensions for a mp4 file" do
skip unless MediaFile.videos_enabled?
assert_equal([300, 300], MediaFile.open("test/files/test-300x300.mp4").dimensions)
end
should "determine the correct dimensions for a ugoira file" do
skip unless MediaFile.videos_enabled?
assert_equal([60, 60], MediaFile.open("test/files/valid_ugoira.zip").dimensions)
end
@@ -42,6 +45,14 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal([500, 335], mf.dimensions)
assert_equal([500, 335], mf.dimensions)
mf = MediaFile.open("test/files/compressed.swf")
assert_equal([607, 756], mf.dimensions)
assert_equal([607, 756], mf.dimensions)
end
should "work for a video if called twice" do
skip unless MediaFile.videos_enabled?
mf = MediaFile.open("test/files/test-512x512.webm")
assert_equal([512, 512], mf.dimensions)
assert_equal([512, 512], mf.dimensions)
@@ -49,10 +60,6 @@ class MediaFileTest < ActiveSupport::TestCase
mf = MediaFile.open("test/files/valid_ugoira.zip")
assert_equal([60, 60], mf.dimensions)
assert_equal([60, 60], mf.dimensions)
mf = MediaFile.open("test/files/compressed.swf")
assert_equal([607, 756], mf.dimensions)
assert_equal([607, 756], mf.dimensions)
end
end
@@ -106,6 +113,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal([150, 101], MediaFile.open("test/files/test.jpg").preview(150, 150).dimensions)
assert_equal([113, 150], MediaFile.open("test/files/test.png").preview(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test.gif").preview(150, 150).dimensions)
end
should "generate a preview image for a video" do
skip unless MediaFile.videos_enabled?
assert_equal([150, 150], MediaFile.open("test/files/test-512x512.webm").preview(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").preview(150, 150).dimensions)
end
@@ -120,6 +131,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal([150, 150], MediaFile.open("test/files/test.jpg").crop(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test.png").crop(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test.gif").crop(150, 150).dimensions)
end
should "generate a cropped preview image for a video" do
skip unless MediaFile.videos_enabled?
assert_equal([150, 150], MediaFile.open("test/files/test-512x512.webm").crop(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").crop(150, 150).dimensions)
end
@@ -127,7 +142,7 @@ class MediaFileTest < ActiveSupport::TestCase
context "for a ugoira" do
setup do
skip unless MediaFile::Ugoira.conversion_enabled?
skip unless MediaFile::Ugoira.videos_enabled?
frame_data = JSON.parse(File.read("test/files/ugoira.json"))
@ugoira = MediaFile.open("test/files/ugoira.zip", frame_data: frame_data)
end

View File

@@ -152,7 +152,7 @@ class UploadServiceTest < ActiveSupport::TestCase
end
should "download the file" do
skip unless MediaFile::Ugoira.conversion_enabled?
skip unless MediaFile::Ugoira.videos_enabled?
@service = UploadService::Preprocessor.new(source: @source)
begin
@@ -548,7 +548,7 @@ class UploadServiceTest < ActiveSupport::TestCase
context "a post that is replaced by a ugoira" do
should "save the frame data" do
skip unless MediaFile::Ugoira.conversion_enabled?
skip unless MediaFile::Ugoira.videos_enabled?
begin
as_user { @post.replace!(replacement_url: "http://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364") }
@post.reload
@@ -569,7 +569,7 @@ class UploadServiceTest < ActiveSupport::TestCase
context "a post that is replaced to another file then replaced back to the original file" do
should "not delete the original files" do
begin
skip unless MediaFile::Ugoira.conversion_enabled?
skip unless MediaFile::Ugoira.videos_enabled?
@post.unstub(:queue_delete_files)
# this is called thrice to delete the file for 62247364
@@ -611,7 +611,7 @@ class UploadServiceTest < ActiveSupport::TestCase
# swap the images between @post1 and @post2.
begin
as_user do
skip unless MediaFile::Ugoira.conversion_enabled?
skip unless MediaFile::Ugoira.videos_enabled?
@post1.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247350")
@post2.replace!(replacement_url: "https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62247364")