]> source.dussan.org Git - redmine.git/commitdiff
Try importing journal replies as issue reply where applicable (#38263).
authorGo MAEDA <maeda@farend.jp>
Mon, 27 Feb 2023 09:43:37 +0000 (09:43 +0000)
committerGo MAEDA <maeda@farend.jp>
Mon, 27 Feb 2023 09:43:37 +0000 (09:43 +0000)
Patch by Felix Schäfer.

git-svn-id: https://svn.redmine.org/redmine/trunk@22119 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/mail_handler.rb
test/unit/mail_handler_test.rb

index 6da848124a7742db37a5032bc624df8afce6f015..2fa4de00dae942106ce29a8b2ebaee853dc3f562 100644 (file)
@@ -263,15 +263,14 @@ class MailHandler < ActionMailer::Base
   # Reply will be added to the issue
   def receive_journal_reply(journal_id)
     journal = Journal.find_by(:id => journal_id)
-    if journal.nil?
-      logger&.info "MailHandler: ignoring reply from [#{email.from.first}] to a nonexistent journal"
-      return nil
-    end
 
-    if journal.journalized_type == 'Issue'
+    if journal && journal.journalized_type == 'Issue'
       receive_issue_reply(journal.journalized_id, journal)
+    elsif m = email.subject.to_s.match(ISSUE_REPLY_SUBJECT_RE)
+      logger&.info "MailHandler: reply to a nonexistant journal, calling receive_issue_reply with issue from subject"
+      receive_issue_reply(m[1].to_i)
     else
-      logger&.info "MailHandler: ignoring reply from [#{email.from.first}] to a journal whose journalized_type is not Issue"
+      logger&.info "MailHandler: ignoring reply to a nonexistant journal or issue"
       return nil
     end
   end
index bc9439c686d99c73e474a8b1bf80147dc01f7545..01279a11796059e0edd2a6b40fe291a5e16a765d 100644 (file)
@@ -1114,6 +1114,21 @@ class MailHandlerTest < ActiveSupport::TestCase
     end
   end
 
+  def test_reply_to_a_nonexitent_journal_with_subject_fallback
+    journal_id = Issue.find(2).journals.last.id
+    Journal.destroy(journal_id)
+    assert_no_difference 'Issue.count' do
+      assert_difference 'Journal.count', 1 do
+        journal = submit_email('ticket_reply.eml') do |email|
+          email.sub! %r{^In-Reply-To:.*$}, "In-Reply-To: <redmine.journal-#{journal_id}.20060719210421@osiris>"
+          email.sub! %r{^Subject:.*$}, "Subject: Re: [Feature request #2] Add ingredients categories"
+        end
+        assert_kind_of Journal, journal
+        assert_equal Issue.find(2), journal.journalized
+      end
+    end
+  end
+
   def test_reply_to_a_message
     m = submit_email('message_reply.eml')
     assert m.is_a?(Message)