46 lines
1.3 KiB
Ruby
46 lines
1.3 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
|
|
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)
|
|
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
|