email_process_sender_is_system_address_or_agent_test.rb 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'test_helper'
  3. class EmailProcessSenderIsSystemAddressOrAgent < ActiveSupport::TestCase
  4. setup do
  5. EmailAddress.create_or_update(
  6. channel_id: 1,
  7. realname: 'My System',
  8. email: 'Myzammad@system.TEST',
  9. active: true,
  10. updated_by_id: 1,
  11. created_by_id: 1,
  12. )
  13. end
  14. test 'process email with sender as system address check' do
  15. subject = "some new subject #{SecureRandom.uuid}"
  16. email_raw_string = "From: me+is+customer@example.com
  17. To: customer@example.com
  18. Subject: #{subject}
  19. Some Text"
  20. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  21. ticket = Ticket.find(ticket_p.id)
  22. article = Ticket::Article.find(article_p.id)
  23. assert_equal(subject, ticket.title)
  24. assert_equal('new', ticket.state.name)
  25. assert_equal('Customer', ticket.create_article_sender.name)
  26. assert_equal('Customer', article.sender.name)
  27. assert_equal('me+is+customer@example.com', ticket.customer.email)
  28. # check article sender + customer of ticket
  29. subject = "some new subject #{SecureRandom.uuid}"
  30. email_raw_string = "From: myzammad@system.test
  31. To: me+is+customer@example.com, customer@example.com
  32. Subject: #{subject}
  33. Message-ID: <123456789-1@linuxhotel.de>
  34. Some Text"
  35. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  36. ticket = Ticket.find(ticket_p.id)
  37. article = Ticket::Article.find(article_p.id)
  38. assert_equal(subject, ticket.title)
  39. assert_equal('new', ticket.state.name)
  40. assert_equal('Agent', ticket.create_article_sender.name)
  41. assert_equal('Agent', article.sender.name)
  42. assert_equal('me+is+customer@example.com', ticket.customer.email)
  43. # check if follow-up based on inital system sender address
  44. setting_orig = Setting.get('postmaster_follow_up_search_in')
  45. Setting.set('postmaster_follow_up_search_in', [])
  46. # follow-up possible because same subject
  47. email_raw_string = "From: me+is+customer@example.com
  48. To: myzammad@system.test
  49. Subject: #{subject}
  50. Message-ID: <123456789-2@linuxhotel.de>
  51. References: <123456789-1@linuxhotel.de>
  52. Some Text"
  53. ticket_p2, _article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  54. ticket2 = Ticket.find(ticket_p2.id)
  55. assert_equal(subject, ticket2.title)
  56. assert_equal(ticket.id, ticket2.id)
  57. # follow-up not possible because subject has changed
  58. subject = "new subject without ticket ref #{SecureRandom.uuid}"
  59. email_raw_string = "From: me+is+customer@example.com
  60. To: myzammad@system.test
  61. Subject: #{subject}
  62. Message-ID: <123456789-3@linuxhotel.de>
  63. References: <123456789-1@linuxhotel.de>
  64. Some Text"
  65. ticket_p2, _article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  66. ticket2 = Ticket.find(ticket_p2.id)
  67. assert_not_equal(ticket.id, ticket2.id)
  68. assert_equal(subject, ticket2.title)
  69. assert_equal('new', ticket2.state.name)
  70. Setting.set('postmaster_follow_up_search_in', setting_orig)
  71. end
  72. test 'process email with sender as agent address check' do
  73. # create customer
  74. roles = Role.where(name: 'Customer')
  75. customer1 = User.create_or_update(
  76. login: 'ticket-system-sender-customer1@example.com',
  77. firstname: 'system-sender',
  78. lastname: 'Customer1',
  79. email: 'ticket-system-sender-customer1@example.com',
  80. password: 'customerpw',
  81. active: true,
  82. roles: roles,
  83. updated_by_id: 1,
  84. created_by_id: 1,
  85. )
  86. # create agent
  87. groups = Group.all
  88. roles = Role.where(name: 'Agent')
  89. agent1 = User.create_or_update(
  90. login: 'ticket-system-sender-agent1@example.com',
  91. firstname: 'system-sender',
  92. lastname: 'Agent1',
  93. email: 'ticket-system-sender-agent1@example.com',
  94. password: 'agentpw',
  95. active: true,
  96. roles: roles,
  97. groups: groups,
  98. updated_by_id: 1,
  99. created_by_id: 1,
  100. )
  101. # process customer email
  102. email_raw_string = "From: ticket-system-sender-customer1@example.com
  103. To: myzammad@system.test
  104. Subject: some subject #1
  105. Some Text"
  106. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  107. ticket = Ticket.find(ticket_p.id)
  108. article = Ticket::Article.find(article_p.id)
  109. assert_equal('some subject #1', ticket.title)
  110. assert_equal('new', ticket.state.name)
  111. assert_equal('Customer', ticket.create_article_sender.name)
  112. assert_equal('Customer', article.sender.name)
  113. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  114. assert_equal(customer1.id, ticket.created_by_id)
  115. assert_equal(customer1.id, article.created_by_id)
  116. # process agent email
  117. email_raw_string = "From: ticket-system-sender-agent1@example.com
  118. To: ticket-system-sender-customer1@example.com, myzammad@system.test
  119. Subject: some subject #2
  120. Some Text"
  121. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  122. ticket = Ticket.find(ticket_p.id)
  123. article = Ticket::Article.find(article_p.id)
  124. assert_equal('some subject #2', ticket.title)
  125. assert_equal('new', ticket.state.name)
  126. assert_equal('Agent', ticket.create_article_sender.name)
  127. assert_equal('Agent', article.sender.name)
  128. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  129. assert_equal(agent1.id, ticket.created_by_id)
  130. assert_equal(agent1.id, article.created_by_id)
  131. email_raw_string = "From: ticket-system-sender-agent1@example.com
  132. To: myzammad@system.test, ticket-system-sender-customer1@example.com
  133. Subject: some subject #3
  134. Some Text"
  135. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  136. ticket = Ticket.find(ticket_p.id)
  137. article = Ticket::Article.find(article_p.id)
  138. assert_equal('some subject #3', ticket.title)
  139. assert_equal('new', ticket.state.name)
  140. assert_equal('Agent', ticket.create_article_sender.name)
  141. assert_equal('Agent', article.sender.name)
  142. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  143. assert_equal(agent1.id, ticket.created_by_id)
  144. assert_equal(agent1.id, article.created_by_id)
  145. email_raw_string = "From: ticket-system-sender-AGENT1@example.com
  146. To: MYZAMMAD@system.test, ticket-system-sender-CUSTOMER1@example.com
  147. Subject: some subject #4
  148. Some Text"
  149. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  150. ticket = Ticket.find(ticket_p.id)
  151. article = Ticket::Article.find(article_p.id)
  152. assert_equal('some subject #4', ticket.title)
  153. assert_equal('new', ticket.state.name)
  154. assert_equal('Agent', ticket.create_article_sender.name)
  155. assert_equal('Agent', article.sender.name)
  156. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  157. assert_equal(agent1.id, ticket.created_by_id)
  158. assert_equal(agent1.id, article.created_by_id)
  159. email_raw_string = "From: ticket-system-sender-agent1@example.com
  160. To: myzammad@system.test
  161. Subject: some subject #5
  162. Some Text"
  163. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  164. ticket = Ticket.find(ticket_p.id)
  165. article = Ticket::Article.find(article_p.id)
  166. assert_equal('some subject #5', ticket.title)
  167. assert_equal('new', ticket.state.name)
  168. assert_equal('Agent', ticket.create_article_sender.name)
  169. assert_equal('Agent', article.sender.name)
  170. assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
  171. assert_equal(agent1.id, ticket.created_by_id)
  172. assert_equal(agent1.id, article.created_by_id)
  173. email_raw_string = "From: ticket-system-sender-agent1@example.com
  174. To: myZammad@system.Test
  175. Subject: some subject #6
  176. Some Text"
  177. ticket_p, article_p, _user_p, _mail = Channel::EmailParser.new.process({}, email_raw_string)
  178. ticket = Ticket.find(ticket_p.id)
  179. article = Ticket::Article.find(article_p.id)
  180. assert_equal('some subject #6', ticket.title)
  181. assert_equal('new', ticket.state.name)
  182. assert_equal('Agent', ticket.create_article_sender.name)
  183. assert_equal('Agent', article.sender.name)
  184. assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
  185. assert_equal(agent1.id, ticket.created_by_id)
  186. assert_equal(agent1.id, article.created_by_id)
  187. end
  188. end