email_postmaster_test.rb 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. # encoding: utf-8
  2. # rubocop:disable all
  3. require 'test_helper'
  4. class EmailPostmasterTest < ActiveSupport::TestCase
  5. test 'process with postmaster filter' do
  6. group_default = Group.lookup(name: 'Users')
  7. group1 = Group.create_if_not_exists(
  8. name: 'Test Group1',
  9. created_by_id: 1,
  10. updated_by_id: 1,
  11. )
  12. group2 = Group.create_if_not_exists(
  13. name: 'Test Group2',
  14. created_by_id: 1,
  15. updated_by_id: 1,
  16. )
  17. PostmasterFilter.destroy_all
  18. PostmasterFilter.create(
  19. name: 'not used',
  20. match: {
  21. from: {
  22. operator: 'contains',
  23. value: 'nobody@example.com',
  24. },
  25. },
  26. perform: {
  27. 'X-Zammad-Ticket-priority' => {
  28. value: '3 high',
  29. },
  30. },
  31. channel: 'email',
  32. active: true,
  33. created_by_id: 1,
  34. updated_by_id: 1,
  35. )
  36. PostmasterFilter.create(
  37. name: 'used',
  38. match: {
  39. from: {
  40. operator: 'contains',
  41. value: 'me@example.com',
  42. },
  43. },
  44. perform: {
  45. 'X-Zammad-Ticket-group_id' => {
  46. value: group1.id,
  47. },
  48. 'x-Zammad-Article-Internal' => {
  49. value: true,
  50. },
  51. },
  52. channel: 'email',
  53. active: true,
  54. created_by_id: 1,
  55. updated_by_id: 1,
  56. )
  57. PostmasterFilter.create(
  58. name: 'used x-any-recipient',
  59. match: {
  60. 'x-any-recipient' => {
  61. operator: 'contains',
  62. value: 'any@example.com',
  63. },
  64. },
  65. perform: {
  66. 'X-Zammad-Ticket-group_id' => {
  67. value: group2.id,
  68. },
  69. 'x-Zammad-Article-Internal' => {
  70. value: true,
  71. },
  72. },
  73. channel: 'email',
  74. active: true,
  75. created_by_id: 1,
  76. updated_by_id: 1,
  77. )
  78. data = 'From: me@example.com
  79. To: customer@example.com
  80. Subject: some subject
  81. Some Text'
  82. parser = Channel::EmailParser.new
  83. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  84. assert_equal('Test Group1', ticket.group.name)
  85. assert_equal('2 normal', ticket.priority.name)
  86. assert_equal('some subject', ticket.title)
  87. assert_equal('Customer', article.sender.name)
  88. assert_equal('email', article.type.name)
  89. assert_equal(true, article.internal)
  90. data = 'From: Some Body <somebody@example.com>
  91. To: Bob <bod@example.com>
  92. Cc: any@example.com
  93. Subject: some subject
  94. Some Text'
  95. parser = Channel::EmailParser.new
  96. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  97. assert_equal('Test Group2', ticket.group.name)
  98. assert_equal('2 normal', ticket.priority.name)
  99. assert_equal('some subject', ticket.title)
  100. assert_equal('Customer', article.sender.name)
  101. assert_equal('email', article.type.name)
  102. assert_equal(true, article.internal)
  103. PostmasterFilter.create(
  104. name: 'used x-any-recipient',
  105. match: {
  106. 'x-any-recipient' => {
  107. operator: 'contains not',
  108. value: 'any_not@example.com',
  109. },
  110. },
  111. perform: {
  112. 'X-Zammad-Ticket-group_id' => {
  113. value: group2.id,
  114. },
  115. 'X-Zammad-Ticket-priority_id' => {
  116. value: '1',
  117. },
  118. 'x-Zammad-Article-Internal' => {
  119. value: 'false',
  120. },
  121. },
  122. channel: 'email',
  123. active: true,
  124. created_by_id: 1,
  125. updated_by_id: 1,
  126. )
  127. data = 'From: Some Body <somebody@example.com>
  128. To: Bob <bod@example.com>
  129. Cc: any@example.com
  130. Subject: some subject2
  131. Some Text'
  132. parser = Channel::EmailParser.new
  133. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  134. assert_equal('Test Group2', ticket.group.name)
  135. assert_equal('1 low', ticket.priority.name)
  136. assert_equal('some subject2', ticket.title)
  137. assert_equal('Customer', article.sender.name)
  138. assert_equal('email', article.type.name)
  139. assert_equal(false, article.internal)
  140. PostmasterFilter.destroy_all
  141. PostmasterFilter.create(
  142. name: 'used - empty selector',
  143. match: {
  144. from: {
  145. operator: 'contains',
  146. value: '',
  147. },
  148. },
  149. perform: {
  150. 'X-Zammad-Ticket-group_id' => {
  151. value: group2.id,
  152. },
  153. 'X-Zammad-Ticket-priority_id' => {
  154. value: '1',
  155. },
  156. 'x-Zammad-Article-Internal' => {
  157. value: true,
  158. },
  159. },
  160. channel: 'email',
  161. active: true,
  162. created_by_id: 1,
  163. updated_by_id: 1,
  164. )
  165. data = 'From: Some Body <somebody@example.com>
  166. To: Bob <bod@example.com>
  167. Cc: any@example.com
  168. Subject: some subject - no selector
  169. Some Text'
  170. parser = Channel::EmailParser.new
  171. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  172. assert_equal('Users', ticket.group.name)
  173. assert_equal('2 normal', ticket.priority.name)
  174. assert_equal('some subject - no selector', ticket.title)
  175. assert_equal('Customer', article.sender.name)
  176. assert_equal('email', article.type.name)
  177. assert_equal(false, article.internal)
  178. PostmasterFilter.destroy_all
  179. # follow up with create post master filter test
  180. PostmasterFilter.create(
  181. name: 'used - empty selector',
  182. match: {
  183. from: {
  184. operator: 'contains',
  185. value: 'example.com',
  186. },
  187. },
  188. perform: {
  189. 'X-Zammad-Ticket-group_id' => {
  190. value: group2.id,
  191. },
  192. },
  193. channel: 'email',
  194. active: true,
  195. created_by_id: 1,
  196. updated_by_id: 1,
  197. )
  198. data = 'From: Some Body <somebody@example.com>
  199. To: Bob <bod@example.com>
  200. Cc: any@example.com
  201. Subject: follow up with create post master filter test
  202. Some Text'
  203. parser = Channel::EmailParser.new
  204. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  205. assert_equal(group2.name, ticket.group.name)
  206. assert_equal('2 normal', ticket.priority.name)
  207. assert_equal('follow up with create post master filter test', ticket.title)
  208. assert_equal('Customer', article.sender.name)
  209. assert_equal('email', article.type.name)
  210. assert_equal(false, article.internal)
  211. # move ticket
  212. ticket.group = group1
  213. ticket.save
  214. Observer::Transaction.commit
  215. data = "From: me@example.com
  216. To: customer@example.com
  217. Subject: #{ticket.subject_build('some new subject')}
  218. Some Text"
  219. article_count = ticket.articles.count
  220. parser = Channel::EmailParser.new
  221. ticket_followup, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  222. # check if group is still the old one
  223. assert_equal(ticket.id, ticket_followup.id)
  224. assert_equal(group1.name, ticket_followup.group.name)
  225. assert_equal(group1.name, ticket_followup.group.name)
  226. assert_equal('2 normal', ticket_followup.priority.name)
  227. assert_equal('follow up with create post master filter test', ticket_followup.title)
  228. assert_equal('Customer', article.sender.name)
  229. assert_equal('email', article.type.name)
  230. assert_equal(false, article.internal)
  231. assert_equal(article_count+1, ticket_followup.articles.count)
  232. PostmasterFilter.destroy_all
  233. PostmasterFilter.create(
  234. name: 'used',
  235. match: {
  236. from: {
  237. operator: 'contains',
  238. value: 'me@example.com',
  239. },
  240. },
  241. perform: {
  242. 'X-Zammad-Ticket-group_id' => {
  243. value: group1.id,
  244. },
  245. 'x-Zammad-Article-Internal' => {
  246. value: true,
  247. },
  248. 'x-Zammad-Ticket-customer_id' => {
  249. value: '',
  250. value_completion: '',
  251. },
  252. },
  253. channel: 'email',
  254. active: true,
  255. created_by_id: 1,
  256. updated_by_id: 1,
  257. )
  258. data = 'From: ME Bob <me@example.com>
  259. To: customer@example.com
  260. Subject: some subject
  261. Some Text'
  262. parser = Channel::EmailParser.new
  263. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  264. assert_equal(group1.name, ticket.group.name)
  265. assert_equal('2 normal', ticket.priority.name)
  266. assert_equal('some subject', ticket.title)
  267. assert_equal('me@example.com', ticket.customer.email)
  268. PostmasterFilter.destroy_all
  269. PostmasterFilter.create(
  270. name: 'used',
  271. match: {
  272. from: {
  273. operator: 'contains',
  274. value: 'me@example.com',
  275. },
  276. },
  277. perform: {
  278. 'X-Zammad-Ticket-group_id' => {
  279. value: group1.id,
  280. },
  281. 'x-Zammad-Article-Internal' => {
  282. value: true,
  283. },
  284. 'x-Zammad-Ticket-customer_id' => {
  285. value: 999_999,
  286. value_completion: 'xxx',
  287. },
  288. },
  289. channel: 'email',
  290. active: true,
  291. created_by_id: 1,
  292. updated_by_id: 1,
  293. )
  294. data = 'From: ME Bob <me@example.com>
  295. To: customer@example.com
  296. Subject: some subject
  297. Some Text'
  298. parser = Channel::EmailParser.new
  299. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  300. assert_equal(group1.name, ticket.group.name)
  301. assert_equal('2 normal', ticket.priority.name)
  302. assert_equal('some subject', ticket.title)
  303. assert_equal('me@example.com', ticket.customer.email)
  304. PostmasterFilter.destroy_all
  305. PostmasterFilter.create(
  306. name: 'used',
  307. match: {
  308. from: {
  309. operator: 'contains',
  310. value: 'me@example.com',
  311. },
  312. },
  313. perform: {
  314. 'X-Zammad-Ticket-group_id' => {
  315. value: group1.id,
  316. },
  317. 'X-Zammad-Ticket-priority_id' => {
  318. value: 888_888,
  319. },
  320. 'x-Zammad-Article-Internal' => {
  321. value: true,
  322. },
  323. 'x-Zammad-Ticket-customer_id' => {
  324. value: 999_999,
  325. value_completion: 'xxx',
  326. },
  327. },
  328. channel: 'email',
  329. active: true,
  330. created_by_id: 1,
  331. updated_by_id: 1,
  332. )
  333. data = 'From: ME Bob <me@example.com>
  334. To: customer@example.com
  335. Subject: some subject
  336. Some Text'
  337. parser = Channel::EmailParser.new
  338. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  339. assert_equal(group1.name, ticket.group.name)
  340. assert_equal('2 normal', ticket.priority.name)
  341. assert_equal('some subject', ticket.title)
  342. assert_equal('me@example.com', ticket.customer.email)
  343. assert_equal('2 normal', ticket.priority.name)
  344. PostmasterFilter.destroy_all
  345. end
  346. end