Fixed: MailHandler does not include JournalDetail for attached files (#7966).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@6312 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
parent
9957883c4d
commit
49900051ea
|
@ -149,7 +149,8 @@ class Attachment < ActiveRecord::Base
|
||||||
:file => file,
|
:file => file,
|
||||||
:description => attachment['description'].to_s.strip,
|
:description => attachment['description'].to_s.strip,
|
||||||
:author => User.current)
|
:author => User.current)
|
||||||
|
obj.attachments << a
|
||||||
|
|
||||||
if a.new_record?
|
if a.new_record?
|
||||||
obj.unsaved_attachments ||= []
|
obj.unsaved_attachments ||= []
|
||||||
obj.unsaved_attachments << a
|
obj.unsaved_attachments << a
|
||||||
|
|
|
@ -35,7 +35,7 @@ class Issue < ActiveRecord::Base
|
||||||
has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
|
has_many :relations_to, :class_name => 'IssueRelation', :foreign_key => 'issue_to_id', :dependent => :delete_all
|
||||||
|
|
||||||
acts_as_nested_set :scope => 'root_id', :dependent => :destroy
|
acts_as_nested_set :scope => 'root_id', :dependent => :destroy
|
||||||
acts_as_attachable :after_remove => :attachment_removed
|
acts_as_attachable :after_add => :attachment_added, :after_remove => :attachment_removed
|
||||||
acts_as_customizable
|
acts_as_customizable
|
||||||
acts_as_watchable
|
acts_as_watchable
|
||||||
acts_as_searchable :columns => ['subject', "#{table_name}.description", "#{Journal.table_name}.notes"],
|
acts_as_searchable :columns => ['subject', "#{table_name}.description", "#{Journal.table_name}.notes"],
|
||||||
|
@ -612,8 +612,6 @@ class Issue < ActiveRecord::Base
|
||||||
|
|
||||||
if valid?
|
if valid?
|
||||||
attachments = Attachment.attach_files(self, params[:attachments])
|
attachments = Attachment.attach_files(self, params[:attachments])
|
||||||
|
|
||||||
attachments[:files].each {|a| @current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => a.id, :value => a.filename)}
|
|
||||||
# TODO: Rename hook
|
# TODO: Rename hook
|
||||||
Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})
|
Redmine::Hook.call_hook(:controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})
|
||||||
begin
|
begin
|
||||||
|
@ -842,6 +840,13 @@ class Issue < ActiveRecord::Base
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Callback on attachment deletion
|
||||||
|
def attachment_added(obj)
|
||||||
|
if @current_journal && !obj.new_record?
|
||||||
|
@current_journal.details << JournalDetail.new(:property => 'attachment', :prop_key => obj.id, :value => obj.filename)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Callback on attachment deletion
|
# Callback on attachment deletion
|
||||||
def attachment_removed(obj)
|
def attachment_removed(obj)
|
||||||
|
|
|
@ -200,7 +200,7 @@ class MailHandler < ActionMailer::Base
|
||||||
def add_attachments(obj)
|
def add_attachments(obj)
|
||||||
if email.has_attachments?
|
if email.has_attachments?
|
||||||
email.attachments.each do |attachment|
|
email.attachments.each do |attachment|
|
||||||
Attachment.create(:container => obj,
|
obj.attachments << Attachment.create(:container => obj,
|
||||||
:file => attachment,
|
:file => attachment,
|
||||||
:author => user,
|
:author => user,
|
||||||
:content_type => attachment.content_type)
|
:content_type => attachment.content_type)
|
||||||
|
|
|
@ -307,7 +307,7 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_issue_note
|
def test_update_issue
|
||||||
journal = submit_email('ticket_reply.eml')
|
journal = submit_email('ticket_reply.eml')
|
||||||
assert journal.is_a?(Journal)
|
assert journal.is_a?(Journal)
|
||||||
assert_equal User.find_by_login('jsmith'), journal.user
|
assert_equal User.find_by_login('jsmith'), journal.user
|
||||||
|
@ -316,7 +316,7 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||||
assert_equal 'Feature request', journal.issue.tracker.name
|
assert_equal 'Feature request', journal.issue.tracker.name
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_issue_note_with_attribute_changes
|
def test_update_issue_with_attribute_changes
|
||||||
# This email contains: 'Status: Resolved'
|
# This email contains: 'Status: Resolved'
|
||||||
journal = submit_email('ticket_reply_with_status.eml')
|
journal = submit_email('ticket_reply_with_status.eml')
|
||||||
assert journal.is_a?(Journal)
|
assert journal.is_a?(Journal)
|
||||||
|
@ -334,15 +334,36 @@ class MailHandlerTest < ActiveSupport::TestCase
|
||||||
assert !journal.notes.match(/^Status:/i)
|
assert !journal.notes.match(/^Status:/i)
|
||||||
assert !journal.notes.match(/^Start Date:/i)
|
assert !journal.notes.match(/^Start Date:/i)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_update_issue_with_attachment
|
||||||
|
assert_difference 'Journal.count' do
|
||||||
|
assert_difference 'JournalDetail.count' do
|
||||||
|
assert_difference 'Attachment.count' do
|
||||||
|
assert_no_difference 'Issue.count' do
|
||||||
|
journal = submit_email('ticket_with_attachment.eml') do |raw|
|
||||||
|
raw.gsub! /^Subject: .*$/, 'Subject: Re: [Cookbook - Feature #2] (New) Add ingredients categories'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
journal = Journal.first(:order => 'id DESC')
|
||||||
|
assert_equal Issue.find(2), journal.journalized
|
||||||
|
assert_equal 1, journal.details.size
|
||||||
|
|
||||||
|
detail = journal.details.first
|
||||||
|
assert_equal 'attachment', detail.property
|
||||||
|
assert_equal 'Paella.jpg', detail.value
|
||||||
|
end
|
||||||
|
|
||||||
def test_add_issue_note_should_send_email_notification
|
def test_update_issue_should_send_email_notification
|
||||||
ActionMailer::Base.deliveries.clear
|
ActionMailer::Base.deliveries.clear
|
||||||
journal = submit_email('ticket_reply.eml')
|
journal = submit_email('ticket_reply.eml')
|
||||||
assert journal.is_a?(Journal)
|
assert journal.is_a?(Journal)
|
||||||
assert_equal 1, ActionMailer::Base.deliveries.size
|
assert_equal 1, ActionMailer::Base.deliveries.size
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_add_issue_note_should_not_set_defaults
|
def test_update_issue_should_not_set_defaults
|
||||||
journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
|
journal = submit_email('ticket_reply.eml', :issue => {:tracker => 'Support request', :priority => 'High'})
|
||||||
assert journal.is_a?(Journal)
|
assert journal.is_a?(Journal)
|
||||||
assert_match /This is reply/, journal.notes
|
assert_match /This is reply/, journal.notes
|
||||||
|
|
Loading…
Reference in New Issue