Files
danbooru/test/test_helpers/upload_test_helper.rb
evazion ac12efb636 tests: fix test failures when running without API keys.
Fix the test suite failing when trying to run it in the default state
with no config file or API keys configured. Most source sites require
API keys or login credentials to be set in order to work. Skip these
tests when credentials aren't configured.
2021-09-22 04:33:36 -05:00

49 lines
1.6 KiB
Ruby

module UploadTestHelper
extend ActiveSupport::Concern
def upload_from_file(filepath)
UploadService.new(file: upload_file(filepath)).start!
end
def upload_file(path)
file = Tempfile.new(binmode: true)
IO.copy_stream("#{Rails.root}/#{path}", file.path)
uploaded_file = ActionDispatch::Http::UploadedFile.new(tempfile: file, filename: File.basename(path))
yield uploaded_file if block_given?
uploaded_file
end
def assert_successful_upload(source_or_file_path, user: @user, **params)
if source_or_file_path =~ %r{\Ahttps?://}i
return "Login credentials not configured for #{source_or_file_path}" unless Sources::Strategies.find(source_or_file_path).class.enabled?
source = { source: source_or_file_path }
else
file = Rack::Test::UploadedFile.new(Rails.root.join(source_or_file_path))
source = { file: file }
end
assert_difference(["Upload.count"]) do
post_auth uploads_path, user, params: { upload: { tag_string: "abc", rating: "e", **source, **params }}
end
upload = Upload.last
assert_response :redirect
assert_redirected_to upload
assert_equal("completed", upload.status)
assert_equal(Post.last, upload.post)
assert_equal(upload.post.md5, upload.md5)
assert_not_nil(upload.media_asset)
assert_operator(upload.media_asset.media_metadata.metadata.count, :>=, 1)
upload
end
class_methods do
def should_upload_successfully(source)
should "upload successfully from #{source}" do
assert_successful_upload(source, user: create(:user, created_at: 1.month.ago))
end
end
end
end