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
end end
def self.videos_enabled?
system("ffmpeg -version > /dev/null") && system("mkvmerge --version > /dev/null")
end
def initialize(file, **options) def initialize(file, **options)
@file = file @file = file
end end

View File

@@ -2,10 +2,6 @@ class MediaFile::Ugoira < MediaFile
class Error < StandardError; end class Error < StandardError; end
attr_reader :frame_data 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) def initialize(file, frame_data: {}, **options)
super(file, **options) super(file, **options)
@frame_data = frame_data @frame_data = frame_data
@@ -31,7 +27,7 @@ class MediaFile::Ugoira < MediaFile
# XXX should take width and height and resize image # XXX should take width and height and resize image
def convert 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| Dir.mktmpdir("ugoira-#{md5}") do |tmpdir|
output_file = Tempfile.new(["ugoira-conversion", ".webm"], binmode: true) output_file = Tempfile.new(["ugoira-conversion", ".webm"], binmode: true)

View File

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

View File

@@ -22,14 +22,17 @@ class MediaFileTest < ActiveSupport::TestCase
end end
should "determine the correct dimensions for a webm file" do 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) assert_equal([512, 512], MediaFile.open("test/files/test-512x512.webm").dimensions)
end end
should "determine the correct dimensions for a mp4 file" do 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) assert_equal([300, 300], MediaFile.open("test/files/test-300x300.mp4").dimensions)
end end
should "determine the correct dimensions for a ugoira file" do 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) assert_equal([60, 60], MediaFile.open("test/files/valid_ugoira.zip").dimensions)
end end
@@ -42,6 +45,14 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal([500, 335], mf.dimensions) assert_equal([500, 335], mf.dimensions)
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") mf = MediaFile.open("test/files/test-512x512.webm")
assert_equal([512, 512], mf.dimensions) assert_equal([512, 512], mf.dimensions)
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") mf = MediaFile.open("test/files/valid_ugoira.zip")
assert_equal([60, 60], mf.dimensions) assert_equal([60, 60], mf.dimensions)
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
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([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([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) 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-512x512.webm").preview(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").preview(150, 150).dimensions) assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").preview(150, 150).dimensions)
end 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.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.png").crop(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test.gif").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-512x512.webm").crop(150, 150).dimensions)
assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").crop(150, 150).dimensions) assert_equal([150, 150], MediaFile.open("test/files/test-300x300.mp4").crop(150, 150).dimensions)
end end
@@ -127,7 +142,7 @@ class MediaFileTest < ActiveSupport::TestCase
context "for a ugoira" do context "for a ugoira" do
setup 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")) frame_data = JSON.parse(File.read("test/files/ugoira.json"))
@ugoira = MediaFile.open("test/files/ugoira.zip", frame_data: frame_data) @ugoira = MediaFile.open("test/files/ugoira.zip", frame_data: frame_data)
end end

View File

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