email_process_out_of_office_test.rb 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class EmailProcessOutOfOfficeTest < ActiveSupport::TestCase
  4. test 'process with out of office check - ms' do
  5. ticket = Ticket.create(
  6. title: 'ooo check - ms',
  7. group: Group.lookup(name: 'Users'),
  8. customer_id: 2,
  9. state: Ticket::State.lookup(name: 'closed'),
  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: 'ooo check',
  19. message_id: '<20150830145601.30.608881@edenhofer.zammad.com>',
  20. body: 'some message bounce check',
  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. sleep 1
  28. # exchange out of office example #1
  29. email_raw_string = "From: me@example.com
  30. To: customer@example.com
  31. Subject: #{ticket.subject_build('some new subject 1')}
  32. X-MS-Has-Attach:
  33. X-Auto-Response-Suppress: All
  34. X-MS-Exchange-Inbox-Rules-Loop: aaa.bbb@example.com
  35. X-MS-TNEF-Correlator:
  36. x-olx-disclaimer: Done
  37. x-tm-as-product-ver: SMEX-11.0.0.4179-8.000.1202-21706.006
  38. x-tm-as-result: No--39.689200-0.000000-31
  39. x-tm-as-user-approved-sender: Yes
  40. x-tm-as-user-blocked-sender: No
  41. Some Text"
  42. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  43. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  44. ticket = Ticket.find(ticket.id)
  45. assert_equal(ticket.id, ticket_p.id)
  46. assert_equal('closed', ticket.state.name)
  47. # normal follow up
  48. email_raw_string = "From: me@example.com
  49. To: customer@example.com
  50. Subject: #{ticket.subject_build('some new subject - none')}
  51. X-MS-Exchange-Inbox-Rules-Loop: aaa.bbb@example.com
  52. Some Text 2"
  53. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  54. assert_equal(false, mail['x-zammad-out-of-office'.to_sym])
  55. ticket = Ticket.find(ticket.id)
  56. assert_equal(ticket.id, ticket_p.id)
  57. assert_equal('open', ticket_p.state.name)
  58. ticket = Ticket.find(ticket.id)
  59. ticket.state = Ticket::State.lookup(name: 'closed')
  60. ticket.save
  61. # exchange out of office example #2
  62. email_raw_string = "From: me@example.com
  63. To: customer@example.com
  64. Subject: #{ticket.subject_build('some new subject 2')}
  65. X-MS-Has-Attach:
  66. X-Auto-Response-Suppress: All
  67. X-MS-Exchange-Inbox-Rules-Loop: aaa.bbb@example.com
  68. X-MS-TNEF-Correlator:
  69. x-exclaimer-md-config: 8c10826d-4052-4c5c-a8e8-e09011276827
  70. Some Text"
  71. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  72. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  73. ticket = Ticket.find(ticket.id)
  74. assert_equal(ticket.id, ticket_p.id)
  75. assert_equal('closed', ticket.state.name)
  76. end
  77. test 'process with out of office check - zimbra' do
  78. ticket = Ticket.create(
  79. title: 'ooo check - zimbra',
  80. group: Group.lookup(name: 'Users'),
  81. customer_id: 2,
  82. state: Ticket::State.lookup(name: 'closed'),
  83. priority: Ticket::Priority.lookup(name: '2 normal'),
  84. updated_by_id: 1,
  85. created_by_id: 1,
  86. )
  87. article = Ticket::Article.create(
  88. ticket_id: ticket.id,
  89. from: 'some_sender@example.com',
  90. to: 'some_recipient@example.com',
  91. subject: 'ooo check',
  92. message_id: '<20150830145601.30.608881@edenhofer.zammad.com>',
  93. body: 'some message bounce check',
  94. internal: false,
  95. sender: Ticket::Article::Sender.lookup(name: 'Agent'),
  96. type: Ticket::Article::Type.lookup(name: 'email'),
  97. updated_by_id: 1,
  98. created_by_id: 1,
  99. )
  100. sleep 1
  101. # exchange out of office example #1
  102. email_raw_string = "From: me@example.com
  103. To: customer@example.com
  104. Subject: #{ticket.subject_build('some new subject 1')}
  105. Auto-Submitted: auto-replied (zimbra; vacation)
  106. Precedence: bulk
  107. X-Mailer: Zimbra 7.1.3_GA_3346
  108. Some Text"
  109. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  110. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  111. ticket = Ticket.find(ticket.id)
  112. assert_equal(ticket.id, ticket_p.id)
  113. assert_equal('closed', ticket.state.name)
  114. # normal follow up
  115. email_raw_string = "From: me@example.com
  116. To: customer@example.com
  117. Subject: #{ticket.subject_build('some new subject - none')}
  118. X-Mailer: Zimbra 7.1.3_GA_3346
  119. Some Text 2"
  120. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  121. assert_equal(false, mail['x-zammad-out-of-office'.to_sym])
  122. ticket = Ticket.find(ticket.id)
  123. assert_equal(ticket.id, ticket_p.id)
  124. assert_equal('open', ticket_p.state.name)
  125. ticket = Ticket.find(ticket.id)
  126. ticket.state = Ticket::State.lookup(name: 'closed')
  127. ticket.save
  128. # exchange out of office example #2
  129. email_raw_string = "From: me@example.com
  130. To: customer@example.com
  131. Subject: #{ticket.subject_build('some new subject 2')}
  132. Auto-Submitted: auto-replied (zimbra; vacation)
  133. Precedence: bulk
  134. X-Mailer: Zimbra 7.1.3_GA_3346
  135. Some Text"
  136. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  137. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  138. ticket = Ticket.find(ticket.id)
  139. assert_equal(ticket.id, ticket_p.id)
  140. assert_equal('closed', ticket.state.name)
  141. end
  142. test 'process with out of office check - cloud' do
  143. ticket = Ticket.create(
  144. title: 'ooo check - cloud',
  145. group: Group.lookup(name: 'Users'),
  146. customer_id: 2,
  147. state: Ticket::State.lookup(name: 'closed'),
  148. priority: Ticket::Priority.lookup(name: '2 normal'),
  149. updated_by_id: 1,
  150. created_by_id: 1,
  151. )
  152. article = Ticket::Article.create(
  153. ticket_id: ticket.id,
  154. from: 'some_sender@example.com',
  155. to: 'some_recipient@example.com',
  156. subject: 'ooo check',
  157. message_id: '<20150830145601.30.608881@edenhofer.zammad.com>',
  158. body: 'some message bounce check',
  159. internal: false,
  160. sender: Ticket::Article::Sender.lookup(name: 'Agent'),
  161. type: Ticket::Article::Type.lookup(name: 'email'),
  162. updated_by_id: 1,
  163. created_by_id: 1,
  164. )
  165. sleep 1
  166. # exchange out of office example #1
  167. email_raw_string = "From: me@example.com
  168. To: customer@example.com
  169. Subject: #{ticket.subject_build('some new subject 1')}
  170. Auto-submitted: auto-replied; owner-email=\"me@example.com\"
  171. Some Text"
  172. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  173. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  174. ticket = Ticket.find(ticket.id)
  175. assert_equal(ticket.id, ticket_p.id)
  176. assert_equal('closed', ticket.state.name)
  177. # normal follow up
  178. email_raw_string = "From: me@example.com
  179. To: customer@example.com
  180. Subject: #{ticket.subject_build('some new subject - none')}
  181. Some Text 2"
  182. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  183. assert_equal(false, mail['x-zammad-out-of-office'.to_sym])
  184. ticket = Ticket.find(ticket.id)
  185. assert_equal(ticket.id, ticket_p.id)
  186. assert_equal('open', ticket_p.state.name)
  187. ticket = Ticket.find(ticket.id)
  188. ticket.state = Ticket::State.lookup(name: 'closed')
  189. ticket.save
  190. # exchange out of office example #2
  191. email_raw_string = "From: me@example.com
  192. To: customer@example.com
  193. Subject: #{ticket.subject_build('some new subject 2')}
  194. Auto-submitted: auto-replied; owner-email=\"me@example.com\"
  195. Some Text"
  196. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process( {}, email_raw_string)
  197. assert_equal(true, mail['x-zammad-out-of-office'.to_sym])
  198. ticket = Ticket.find(ticket.id)
  199. assert_equal(ticket.id, ticket_p.id)
  200. assert_equal('closed', ticket.state.name)
  201. end
  202. end