summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/attachment.rb4
-rw-r--r--lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb1
-rw-r--r--test/integration/api_test/attachments_test.rb19
3 files changed, 20 insertions, 4 deletions
diff --git a/app/models/attachment.rb b/app/models/attachment.rb
index 4bc674f8d..2b13118b1 100644
--- a/app/models/attachment.rb
+++ b/app/models/attachment.rb
@@ -82,7 +82,6 @@ class Attachment < ActiveRecord::Base
def file=(incoming_file)
unless incoming_file.nil?
@temp_file = incoming_file
- if @temp_file.size > 0
if @temp_file.respond_to?(:original_filename)
self.filename = @temp_file.original_filename
self.filename.force_encoding("UTF-8")
@@ -91,7 +90,6 @@ class Attachment < ActiveRecord::Base
self.content_type = @temp_file.content_type.to_s.chomp
end
self.filesize = @temp_file.size
- end
end
end
@@ -107,7 +105,7 @@ class Attachment < ActiveRecord::Base
# Copies the temporary file to its final location
# and computes its MD5 hash
def files_to_final_location
- if @temp_file && (@temp_file.size > 0)
+ if @temp_file
self.disk_directory = target_directory
self.disk_filename = Attachment.disk_filename(filename, disk_directory)
logger.info("Saving attachment '#{self.diskfile}' (#{@temp_file.size} bytes)") if logger
diff --git a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
index bc4242564..a6ca09170 100644
--- a/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
+++ b/lib/plugins/acts_as_attachable/lib/acts_as_attachable.rb
@@ -88,7 +88,6 @@ module Redmine
next unless attachment.is_a?(Hash)
a = nil
if file = attachment['file']
- next unless file.size > 0
a = Attachment.create(:file => file, :author => author)
elsif token = attachment['token']
a = Attachment.find_by_token(token)
diff --git a/test/integration/api_test/attachments_test.rb b/test/integration/api_test/attachments_test.rb
index 640a78290..8fa45cdbb 100644
--- a/test/integration/api_test/attachments_test.rb
+++ b/test/integration/api_test/attachments_test.rb
@@ -171,4 +171,23 @@ class Redmine::ApiTest::AttachmentsTest < Redmine::ApiTest::Base
end
end
end
+
+ test "POST /uploads.json should create an empty file and return a valid token" do
+ set_tmp_attachments_directory
+ assert_difference 'Attachment.count' do
+ post '/uploads.json', '', {"CONTENT_TYPE" => 'application/octet-stream'}.merge(credentials('jsmith'))
+ assert_response :created
+
+ end
+
+ json = ActiveSupport::JSON.decode(response.body)
+ assert_kind_of Hash, json['upload']
+ token = json['upload']['token']
+ assert token.present?
+
+ assert attachment = Attachment.find_by_token(token)
+ assert_equal 0, attachment.filesize
+ assert attachment.digest.present?
+ assert File.exist? attachment.diskfile
+ end
end