email_process_follow_up_test.rb 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class EmailProcessFollowUpTest < ActiveSupport::TestCase
  4. test 'process with follow up check' do
  5. ticket = Ticket.create(
  6. title: 'follow up check',
  7. group: Group.lookup(name: 'Users'),
  8. customer_id: 2,
  9. state: Ticket::State.lookup(name: 'new'),
  10. priority: Ticket::Priority.lookup(name: '2 normal'),
  11. updated_by_id: 1,
  12. created_by_id: 1,
  13. )
  14. article = Ticket::Article.create(
  15. ticket_id: ticket.id,
  16. from: 'some_sender@example.com',
  17. to: 'some_recipient@example.com',
  18. subject: 'follow up check',
  19. message_id: '<20150830145601.30.608882@edenhofer.zammad.com>',
  20. body: 'some message article',
  21. internal: false,
  22. sender: Ticket::Article::Sender.lookup(name: 'Agent'),
  23. type: Ticket::Article::Type.lookup(name: 'email'),
  24. updated_by_id: 1,
  25. created_by_id: 1,
  26. )
  27. email_raw_string_subject = "From: me@example.com
  28. To: customer@example.com
  29. Subject: #{ticket.subject_build('some new subject')}
  30. Some Text"
  31. email_raw_string_body = "From: me@example.com
  32. To: customer@example.com
  33. Subject: no reference
  34. Some Text #{ticket.subject_build('some new subject')} "
  35. email_raw_string_attachment = "From: me@example.com
  36. Content-Type: multipart/mixed; boundary=\"Apple-Mail=_ED77AC8D-FB6F-40E5-8FBE-D41FF5E1BAF2\"
  37. Subject: no reference
  38. Date: Sun, 30 Aug 2015 23:20:54 +0200
  39. To: Martin Edenhofer <me@znuny.com>
  40. Mime-Version: 1.0 (Mac OS X Mail 8.2 \(2104\))
  41. X-Mailer: Apple Mail (2.2104)
  42. --Apple-Mail=_ED77AC8D-FB6F-40E5-8FBE-D41FF5E1BAF2
  43. Content-Transfer-Encoding: 7bit
  44. Content-Type: text/plain;
  45. charset=us-ascii
  46. no reference
  47. --Apple-Mail=_ED77AC8D-FB6F-40E5-8FBE-D41FF5E1BAF2
  48. Content-Disposition: attachment;
  49. filename=test1.txt
  50. Content-Type: text/plain;
  51. name=\"test.txt\"
  52. Content-Transfer-Encoding: 7bit
  53. Some Text #{ticket.subject_build('some new subject')}
  54. --Apple-Mail=_ED77AC8D-FB6F-40E5-8FBE-D41FF5E1BAF2--"
  55. email_raw_string_references1 = "From: me@example.com
  56. To: customer@example.com
  57. Subject: no reference
  58. In-Reply-To: <20150830145601.30.608882@edenhofer.zammad.com>
  59. References: <DA918CD1-BE9A-4262-ACF6-5001E59291B6@znuny.com>
  60. no reference "
  61. email_raw_string_references2 = "From: me@example.com
  62. To: customer@example.com
  63. Subject: no reference
  64. References: <DA918CD1-BE9A-4262-ACF6-5001E59291B6@znuny.com> <20150830145601.30.608882@edenhofer.zammad.com> <DA918CD1-BE9A-4262-ACF6-5001E59291XX@znuny.com>
  65. no reference "
  66. setting_orig = Setting.get('postmaster_follow_up_search_in')
  67. Setting.set('postmaster_follow_up_search_in', %w(body attachment references))
  68. sleep 1
  69. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_subject)
  70. assert_equal(ticket.id, ticket_p.id)
  71. sleep 1
  72. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_body)
  73. assert_equal(ticket.id, ticket_p.id)
  74. sleep 1
  75. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_attachment)
  76. assert_equal(ticket.id, ticket_p.id)
  77. sleep 1
  78. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_references1)
  79. assert_equal(ticket.id, ticket_p.id)
  80. sleep 1
  81. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_references2)
  82. assert_equal(ticket.id, ticket_p.id)
  83. Setting.set('postmaster_follow_up_search_in', setting_orig)
  84. sleep 1
  85. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_subject)
  86. assert_equal(ticket.id, ticket_p.id)
  87. sleep 1
  88. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_body)
  89. assert_not_equal(ticket.id, ticket_p.id)
  90. sleep 1
  91. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_attachment)
  92. assert_not_equal(ticket.id, ticket_p.id)
  93. sleep 1
  94. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_references1)
  95. assert_not_equal(ticket.id, ticket_p.id)
  96. sleep 1
  97. ticket_p, article_p, user_p = Channel::EmailParser.new.process( {}, email_raw_string_references2)
  98. assert_not_equal(ticket.id, ticket_p.id)
  99. end
  100. test 'process with follow up check - with auto responses and no T# in subject_build' do
  101. ticket = Ticket.create(
  102. title: 'follow up - with references follow up check',
  103. group: Group.lookup(name: 'Users'),
  104. customer_id: 2,
  105. state: Ticket::State.lookup(name: 'closed'),
  106. priority: Ticket::Priority.lookup(name: '2 normal'),
  107. updated_by_id: 1,
  108. created_by_id: 1,
  109. )
  110. article = Ticket::Article.create(
  111. ticket_id: ticket.id,
  112. from: 'some_sender@example.com',
  113. to: 'some_recipient@example.com',
  114. subject: 'follow up with references follow up check',
  115. message_id: '<20151222145601.30.608881@edenhofer.zammad.com>',
  116. body: 'some message with references follow up check',
  117. internal: false,
  118. sender: Ticket::Article::Sender.lookup(name: 'Agent'),
  119. type: Ticket::Article::Type.lookup(name: 'email'),
  120. updated_by_id: 1,
  121. created_by_id: 1,
  122. )
  123. sleep 1
  124. # auto response without T# in subject, find follow up by references header
  125. email_raw_string = "From: bob@example.com
  126. To: customer@example.com
  127. Subject: =?ISO-8859-1?Q?AUTO=3A_Bob_Smith_ist_au=DFer_Haus=2E_=2F_is_out_of?=
  128. =?ISO-8859-1?Q?_office=2E_=28R=FCckkehr_am_28=2E12=2E2015=29?=
  129. In-Reply-To: <20251222081758.116249.983698@portal.znuny.com>
  130. References: <OF9D1FD72A.878EF84E-ONC1257F22.003D7BB4-C1257F22.003F4503@example.com> <20151222145601.30.608881@edenhofer.zammad.com> <20251222081758.116249.983698@portal.znuny.com>
  131. Message-ID: <OFD563742F.FC05EEAF-ONC1257F23.002DAE02@example.com>
  132. Auto-Submitted: auto-replied
  133. Some Text"
  134. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  135. ticket = Ticket.find(ticket.id)
  136. assert_equal(ticket.id, ticket_p.id)
  137. assert_equal('open', ticket.state.name)
  138. end
  139. end