email_process_sender_is_system_address_or_agent_test.rb 8.3 KB

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