]> source.dussan.org Git - redmine.git/commitdiff
Fixed: notes are lost when copying issue(s) (#6901, #8239).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 29 Apr 2011 13:27:50 +0000 (13:27 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 29 Apr 2011 13:27:50 +0000 (13:27 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5602 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/issue.rb
app/models/journal.rb
app/models/journal_observer.rb
test/functional/issue_moves_controller_test.rb
test/unit/issue_test.rb
test/unit/journal_observer_test.rb

index 47492da36c583e7562e1273e5267722eeb9fad8b..4f55a78029b98c716015f2a57684aef9da088556 100644 (file)
@@ -188,7 +188,13 @@ class Issue < ActiveRecord::Base
       issue.attributes = options[:attributes]
     end
     if issue.save
-      unless options[:copy]
+      if options[:copy]
+        if current_journal && current_journal.notes.present?
+          issue.init_journal(current_journal.user, current_journal.notes)
+          issue.current_journal.notify = false
+          issue.save
+        end
+      else
         # Manually update project_id on related time entries
         TimeEntry.update_all("project_id = #{new_project.id}", {:issue_id => id})
         
index 39eb338d8eb50bc0a0fad8d7dccee20ed8583041..cb5aad21ac5ea55629e2949c199b1895f693fa31 100644 (file)
@@ -78,4 +78,12 @@ class Journal < ActiveRecord::Base
     s << ' has-details' unless details.blank?
     s
   end
+  
+  def notify?
+    @notify != false
+  end
+  
+  def notify=(arg)
+    @notify = arg
+  end
 end
index db7115cdb116f206874385b90800b39d13d2b023..4ea3e5fa4b65b84b1c5368a0c53cc6806a0edf90 100644 (file)
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2007  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
 
 class JournalObserver < ActiveRecord::Observer
   def after_create(journal)
-    if Setting.notified_events.include?('issue_updated') ||
-        (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
-        (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
-        (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+    if journal.notify? &&
+        (Setting.notified_events.include?('issue_updated') ||
+          (Setting.notified_events.include?('issue_note_added') && journal.notes.present?) ||
+          (Setting.notified_events.include?('issue_status_updated') && journal.new_status.present?) ||
+          (Setting.notified_events.include?('issue_priority_updated') && journal.new_value_for('priority_id').present?)
+        )
       Mailer.deliver_issue_edit(journal)
     end
   end
index 5c3b8165bedff2c9c76c492c6a760830ca9396f2..6c2cdb7cc3d29228e15430045d0a068e688308ba 100644 (file)
@@ -112,6 +112,19 @@ class IssueMovesControllerTest < ActionController::TestCase
         assert_equal '2009-12-31', issue.due_date.to_s, "Due date is incorrect"
       end
     end
+
+    should "allow adding a note when copying" do
+      @request.session[:user_id] = 2
+      assert_difference 'Issue.count', 1 do
+        post :create, :ids => [1], :copy_options => {:copy => '1'}, :notes => 'Copying one issue', :new_tracker_id => '', :assigned_to_id => 4, :status_id => 3, :start_date => '2009-12-01', :due_date => '2009-12-31'
+      end
+      
+      issue = Issue.first(:order => 'id DESC')
+      assert_equal 1, issue.journals.size
+      journal = issue.journals.first
+      assert_equal 0, journal.details.size
+      assert_equal 'Copying one issue', journal.notes
+    end
   end
   
   def test_copy_to_another_project_should_follow_when_needed
index ecd7b1ff7a6df7a12c2a3bd23b116a1597356caf..3ea1b24db40f5907b24905ed86ef303d42ae13f7 100644 (file)
@@ -522,6 +522,11 @@ class IssueTest < ActiveSupport::TestCase
         @issue = Issue.find(1)
         @copy = nil
       end
+      
+      should "not create a journal" do
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
+        assert_equal 0, @copy.reload.journals.size
+      end
 
       should "allow assigned_to changes" do
         @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:assigned_to_id => 3}})
@@ -552,6 +557,19 @@ class IssueTest < ActiveSupport::TestCase
 
         assert_equal User.current, @copy.author
       end
+      
+      should "keep journal notes" do
+        date = Date.today
+        notes = "Notes added when copying"
+        User.current = User.find(9)
+        @issue.init_journal(User.current, notes)
+        @copy = @issue.move_to_project(Project.find(3), Tracker.find(2), {:copy => true, :attributes => {:start_date => date}})
+
+        assert_equal 1, @copy.journals.size
+        journal = @copy.journals.first
+        assert_equal 0, journal.details.size
+        assert_equal notes, journal.notes
+      end
     end
   end
   
index 77179b24fcab9e25cb1257ff7738620c8747f6f3..216e218ee52b575048e146f732d5906406542fcd 100644 (file)
@@ -1,5 +1,5 @@
-# redMine - project management software
-# Copyright (C) 2006-2009  Jean-Philippe Lang
+# Redmine - project management software
+# Copyright (C) 2006-2011  Jean-Philippe Lang
 #
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -35,6 +35,17 @@ class JournalObserverTest < ActiveSupport::TestCase
     assert journal.save
     assert_equal 1, ActionMailer::Base.deliveries.size
   end
+  
+  def test_create_should_not_send_email_notification_with_notify_set_to_false
+    Setting.notified_events = ['issue_updated']
+    issue = Issue.find(:first)
+    user = User.find(:first)
+    journal = issue.init_journal(user, issue)
+    journal.notify = false
+    
+    assert journal.save
+    assert_equal 0, ActionMailer::Base.deliveries.size
+  end
 
   def test_create_should_not_send_email_notification_without_issue_updated
     Setting.notified_events = []