email_process_sender_is_system_address_or_agent_test.rb 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  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. article = Ticket::Article.find(article_p.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 #{rand(9_999_999)}"
  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. article = Ticket::Article.find(article_p.id)
  68. assert_not_equal(ticket.id, ticket2.id)
  69. assert_equal(subject, ticket2.title)
  70. assert_equal('new', ticket2.state.name)
  71. Setting.set('postmaster_follow_up_search_in', setting_orig)
  72. end
  73. test 'process email with sender as agent address check' do
  74. # create customer
  75. roles = Role.where(name: 'Customer')
  76. customer1 = User.create_or_update(
  77. login: 'ticket-system-sender-customer1@example.com',
  78. firstname: 'system-sender',
  79. lastname: 'Customer1',
  80. email: 'ticket-system-sender-customer1@example.com',
  81. password: 'customerpw',
  82. active: true,
  83. roles: roles,
  84. updated_by_id: 1,
  85. created_by_id: 1,
  86. )
  87. # create agent
  88. groups = Group.all
  89. roles = Role.where(name: 'Agent')
  90. agent1 = User.create_or_update(
  91. login: 'ticket-system-sender-agent1@example.com',
  92. firstname: 'system-sender',
  93. lastname: 'Agent1',
  94. email: 'ticket-system-sender-agent1@example.com',
  95. password: 'agentpw',
  96. active: true,
  97. roles: roles,
  98. groups: groups,
  99. updated_by_id: 1,
  100. created_by_id: 1,
  101. )
  102. # process customer email
  103. email_raw_string = "From: ticket-system-sender-customer1@example.com
  104. To: myzammad@system.test
  105. Subject: some subject #1
  106. Some Text"
  107. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  108. ticket = Ticket.find(ticket_p.id)
  109. article = Ticket::Article.find(article_p.id)
  110. assert_equal('some subject #1', ticket.title)
  111. assert_equal('new', ticket.state.name)
  112. assert_equal('Customer', ticket.create_article_sender.name)
  113. assert_equal('Customer', article.sender.name)
  114. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  115. assert_equal(customer1.id, ticket.created_by_id)
  116. assert_equal(customer1.id, article.created_by_id)
  117. # process agent email
  118. email_raw_string = "From: ticket-system-sender-agent1@example.com
  119. To: ticket-system-sender-customer1@example.com, myzammad@system.test
  120. Subject: some subject #2
  121. Some Text"
  122. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  123. ticket = Ticket.find(ticket_p.id)
  124. article = Ticket::Article.find(article_p.id)
  125. assert_equal('some subject #2', ticket.title)
  126. assert_equal('new', ticket.state.name)
  127. assert_equal('Agent', ticket.create_article_sender.name)
  128. assert_equal('Agent', article.sender.name)
  129. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  130. assert_equal(agent1.id, ticket.created_by_id)
  131. assert_equal(agent1.id, article.created_by_id)
  132. email_raw_string = "From: ticket-system-sender-agent1@example.com
  133. To: myzammad@system.test, ticket-system-sender-customer1@example.com
  134. Subject: some subject #3
  135. Some Text"
  136. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  137. ticket = Ticket.find(ticket_p.id)
  138. article = Ticket::Article.find(article_p.id)
  139. assert_equal('some subject #3', ticket.title)
  140. assert_equal('new', ticket.state.name)
  141. assert_equal('Agent', ticket.create_article_sender.name)
  142. assert_equal('Agent', article.sender.name)
  143. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  144. assert_equal(agent1.id, ticket.created_by_id)
  145. assert_equal(agent1.id, article.created_by_id)
  146. email_raw_string = "From: ticket-system-sender-AGENT1@example.com
  147. To: MYZAMMAD@system.test, ticket-system-sender-CUSTOMER1@example.com
  148. Subject: some subject #4
  149. Some Text"
  150. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  151. ticket = Ticket.find(ticket_p.id)
  152. article = Ticket::Article.find(article_p.id)
  153. assert_equal('some subject #4', ticket.title)
  154. assert_equal('new', ticket.state.name)
  155. assert_equal('Agent', ticket.create_article_sender.name)
  156. assert_equal('Agent', article.sender.name)
  157. assert_equal('ticket-system-sender-customer1@example.com', ticket.customer.email)
  158. assert_equal(agent1.id, ticket.created_by_id)
  159. assert_equal(agent1.id, article.created_by_id)
  160. email_raw_string = "From: ticket-system-sender-agent1@example.com
  161. To: myzammad@system.test
  162. Subject: some subject #5
  163. Some Text"
  164. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  165. ticket = Ticket.find(ticket_p.id)
  166. article = Ticket::Article.find(article_p.id)
  167. assert_equal('some subject #5', ticket.title)
  168. assert_equal('new', ticket.state.name)
  169. assert_equal('Agent', ticket.create_article_sender.name)
  170. assert_equal('Agent', article.sender.name)
  171. assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
  172. assert_equal(agent1.id, ticket.created_by_id)
  173. assert_equal(agent1.id, article.created_by_id)
  174. email_raw_string = "From: ticket-system-sender-agent1@example.com
  175. To: myZammad@system.Test
  176. Subject: some subject #6
  177. Some Text"
  178. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, email_raw_string)
  179. ticket = Ticket.find(ticket_p.id)
  180. article = Ticket::Article.find(article_p.id)
  181. assert_equal('some subject #6', ticket.title)
  182. assert_equal('new', ticket.state.name)
  183. assert_equal('Agent', ticket.create_article_sender.name)
  184. assert_equal('Agent', article.sender.name)
  185. assert_equal('ticket-system-sender-agent1@example.com', ticket.customer.email)
  186. assert_equal(agent1.id, ticket.created_by_id)
  187. assert_equal(agent1.id, article.created_by_id)
  188. end
  189. end