email_postmaster_test.rb 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. # encoding: utf-8
  2. # rubocop:disable all
  3. require 'test_helper'
  4. class EmailPostmasterTest < ActiveSupport::TestCase
  5. test 'valid/invalid postmaster filter' do
  6. PostmasterFilter.create!(
  7. name: 'not used',
  8. match: {
  9. from: {
  10. operator: 'contains',
  11. value: 'nobody@example.com',
  12. },
  13. },
  14. perform: {
  15. 'X-Zammad-Ticket-priority' => {
  16. value: '3 high',
  17. },
  18. },
  19. channel: 'email',
  20. active: true,
  21. created_by_id: 1,
  22. updated_by_id: 1,
  23. )
  24. assert_raises(Exceptions::UnprocessableEntity) {
  25. PostmasterFilter.create!(
  26. name: 'empty filter should not work',
  27. match: {},
  28. perform: {
  29. 'X-Zammad-Ticket-priority' => {
  30. value: '3 high',
  31. },
  32. },
  33. channel: 'email',
  34. active: true,
  35. created_by_id: 1,
  36. updated_by_id: 1,
  37. )
  38. }
  39. assert_raises(Exceptions::UnprocessableEntity) {
  40. PostmasterFilter.create!(
  41. name: 'empty filter should not work',
  42. match: {
  43. from: {
  44. operator: 'contains',
  45. value: '',
  46. },
  47. },
  48. perform: {
  49. 'X-Zammad-Ticket-priority' => {
  50. value: '3 high',
  51. },
  52. },
  53. channel: 'email',
  54. active: true,
  55. created_by_id: 1,
  56. updated_by_id: 1,
  57. )
  58. }
  59. assert_raises(Exceptions::UnprocessableEntity) {
  60. PostmasterFilter.create!(
  61. name: 'invalid regex',
  62. match: {
  63. from: {
  64. operator: 'contains',
  65. value: 'regex:[]',
  66. },
  67. },
  68. perform: {
  69. 'X-Zammad-Ticket-priority' => {
  70. value: '3 high',
  71. },
  72. },
  73. channel: 'email',
  74. active: true,
  75. created_by_id: 1,
  76. updated_by_id: 1,
  77. )
  78. }
  79. assert_raises(Exceptions::UnprocessableEntity) {
  80. PostmasterFilter.create!(
  81. name: 'invalid regex',
  82. match: {
  83. from: {
  84. operator: 'contains',
  85. value: 'regex:??',
  86. },
  87. },
  88. perform: {
  89. 'X-Zammad-Ticket-priority' => {
  90. value: '3 high',
  91. },
  92. },
  93. channel: 'email',
  94. active: true,
  95. created_by_id: 1,
  96. updated_by_id: 1,
  97. )
  98. }
  99. assert_raises(Exceptions::UnprocessableEntity) {
  100. PostmasterFilter.create!(
  101. name: 'invalid regex',
  102. match: {
  103. from: {
  104. operator: 'contains',
  105. value: 'regex:*',
  106. },
  107. },
  108. perform: {
  109. 'X-Zammad-Ticket-priority' => {
  110. value: '3 high',
  111. },
  112. },
  113. channel: 'email',
  114. active: true,
  115. created_by_id: 1,
  116. updated_by_id: 1,
  117. )
  118. }
  119. PostmasterFilter.create!(
  120. name: 'use .*',
  121. match: {
  122. from: {
  123. operator: 'contains',
  124. value: '*',
  125. },
  126. },
  127. perform: {
  128. 'X-Zammad-Ticket-priority' => {
  129. value: '3 high',
  130. },
  131. },
  132. channel: 'email',
  133. active: true,
  134. created_by_id: 1,
  135. updated_by_id: 1,
  136. )
  137. end
  138. test 'process with postmaster filter with regex' do
  139. group_default = Group.lookup(name: 'Users')
  140. group1 = Group.create_if_not_exists(
  141. name: 'Test Group1',
  142. created_by_id: 1,
  143. updated_by_id: 1,
  144. )
  145. group2 = Group.create_if_not_exists(
  146. name: 'Test Group2',
  147. created_by_id: 1,
  148. updated_by_id: 1,
  149. )
  150. PostmasterFilter.destroy_all
  151. PostmasterFilter.create!(
  152. name: 'used - empty selector',
  153. match: {
  154. from: {
  155. operator: 'contains',
  156. value: 'regex:.*',
  157. },
  158. },
  159. perform: {
  160. 'X-Zammad-Ticket-group_id' => {
  161. value: group2.id,
  162. },
  163. 'X-Zammad-Ticket-priority_id' => {
  164. value: '1',
  165. },
  166. 'x-Zammad-Article-Internal' => {
  167. value: true,
  168. },
  169. },
  170. channel: 'email',
  171. active: true,
  172. created_by_id: 1,
  173. updated_by_id: 1,
  174. )
  175. data = 'From: Some Body <somebody@example.com>
  176. To: Bob <bod@example.com>
  177. Cc: any@example.com
  178. Subject: some subject - no selector
  179. Some Text'
  180. parser = Channel::EmailParser.new
  181. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  182. assert_equal('Test Group2', ticket.group.name)
  183. assert_equal('1 low', ticket.priority.name)
  184. assert_equal('some subject - no selector', ticket.title)
  185. assert_equal('Customer', article.sender.name)
  186. assert_equal('email', article.type.name)
  187. assert_equal(true, article.internal)
  188. PostmasterFilter.destroy_all
  189. PostmasterFilter.create!(
  190. name: 'used - empty selector',
  191. match: {
  192. from: {
  193. operator: 'contains',
  194. value: '*',
  195. },
  196. },
  197. perform: {
  198. 'X-Zammad-Ticket-group_id' => {
  199. value: group2.id,
  200. },
  201. 'X-Zammad-Ticket-priority_id' => {
  202. value: '1',
  203. },
  204. 'x-Zammad-Article-Internal' => {
  205. value: true,
  206. },
  207. },
  208. channel: 'email',
  209. active: true,
  210. created_by_id: 1,
  211. updated_by_id: 1,
  212. )
  213. data = 'From: Some Body <somebody@example.com>
  214. To: Bob <bod@example.com>
  215. Cc: any@example.com
  216. Subject: some subject - no selector
  217. Some Text'
  218. parser = Channel::EmailParser.new
  219. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  220. assert_equal('Test Group2', ticket.group.name)
  221. assert_equal('1 low', ticket.priority.name)
  222. assert_equal('some subject - no selector', ticket.title)
  223. assert_equal('Customer', article.sender.name)
  224. assert_equal('email', article.type.name)
  225. assert_equal(true, article.internal)
  226. PostmasterFilter.destroy_all
  227. PostmasterFilter.create!(
  228. name: 'used - empty selector',
  229. match: {
  230. subject: {
  231. operator: 'contains',
  232. value: '*me*',
  233. },
  234. },
  235. perform: {
  236. 'X-Zammad-Ticket-group_id' => {
  237. value: group2.id,
  238. },
  239. 'X-Zammad-Ticket-priority_id' => {
  240. value: '1',
  241. },
  242. 'x-Zammad-Article-Internal' => {
  243. value: true,
  244. },
  245. },
  246. channel: 'email',
  247. active: true,
  248. created_by_id: 1,
  249. updated_by_id: 1,
  250. )
  251. data = 'From: Some Body <somebody@example.com>
  252. To: Bob <bod@example.com>
  253. Cc: any@example.com
  254. Subject: *me*
  255. Some Text'
  256. parser = Channel::EmailParser.new
  257. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  258. assert_equal('Test Group2', ticket.group.name)
  259. assert_equal('1 low', ticket.priority.name)
  260. assert_equal('*me*', ticket.title)
  261. assert_equal('Customer', article.sender.name)
  262. assert_equal('email', article.type.name)
  263. assert_equal(true, article.internal)
  264. PostmasterFilter.destroy_all
  265. PostmasterFilter.create!(
  266. name: 'used - empty selector',
  267. match: {
  268. subject: {
  269. operator: 'contains not',
  270. value: '*me*',
  271. },
  272. },
  273. perform: {
  274. 'X-Zammad-Ticket-group_id' => {
  275. value: group2.id,
  276. },
  277. 'X-Zammad-Ticket-priority_id' => {
  278. value: '1',
  279. },
  280. 'x-Zammad-Article-Internal' => {
  281. value: true,
  282. },
  283. },
  284. channel: 'email',
  285. active: true,
  286. created_by_id: 1,
  287. updated_by_id: 1,
  288. )
  289. data = 'From: Some Body <somebody@example.com>
  290. To: Bob <bod@example.com>
  291. Cc: any@example.com
  292. Subject: *mo*
  293. Some Text'
  294. parser = Channel::EmailParser.new
  295. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  296. assert_equal('Test Group2', ticket.group.name)
  297. assert_equal('1 low', ticket.priority.name)
  298. assert_equal('*mo*', ticket.title)
  299. assert_equal('Customer', article.sender.name)
  300. assert_equal('email', article.type.name)
  301. assert_equal(true, article.internal)
  302. PostmasterFilter.destroy_all
  303. PostmasterFilter.create!(
  304. name: 'used - empty selector',
  305. match: {
  306. subject: {
  307. operator: 'contains not',
  308. value: '*me*',
  309. },
  310. },
  311. perform: {
  312. 'X-Zammad-Ticket-group_id' => {
  313. value: group2.id,
  314. },
  315. 'X-Zammad-Ticket-priority_id' => {
  316. value: '1',
  317. },
  318. 'x-Zammad-Article-Internal' => {
  319. value: true,
  320. },
  321. },
  322. channel: 'email',
  323. active: true,
  324. created_by_id: 1,
  325. updated_by_id: 1,
  326. )
  327. data = 'From: Some Body <somebody@example.com>
  328. To: Bob <bod@example.com>
  329. Cc: any@example.com
  330. Subject: *me*
  331. Some Text'
  332. parser = Channel::EmailParser.new
  333. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  334. assert_equal('Users', ticket.group.name)
  335. assert_equal('2 normal', ticket.priority.name)
  336. assert_equal('*me*', ticket.title)
  337. assert_equal('Customer', article.sender.name)
  338. assert_equal('email', article.type.name)
  339. assert_equal(false, article.internal)
  340. PostmasterFilter.destroy_all
  341. end
  342. test 'process with postmaster filter' do
  343. group_default = Group.lookup(name: 'Users')
  344. group1 = Group.create_if_not_exists(
  345. name: 'Test Group1',
  346. created_by_id: 1,
  347. updated_by_id: 1,
  348. )
  349. group2 = Group.create_if_not_exists(
  350. name: 'Test Group2',
  351. created_by_id: 1,
  352. updated_by_id: 1,
  353. )
  354. PostmasterFilter.destroy_all
  355. PostmasterFilter.create!(
  356. name: 'not used',
  357. match: {
  358. from: {
  359. operator: 'contains',
  360. value: 'nobody@example.com',
  361. },
  362. },
  363. perform: {
  364. 'X-Zammad-Ticket-priority' => {
  365. value: '3 high',
  366. },
  367. },
  368. channel: 'email',
  369. active: true,
  370. created_by_id: 1,
  371. updated_by_id: 1,
  372. )
  373. PostmasterFilter.create!(
  374. name: 'used',
  375. match: {
  376. from: {
  377. operator: 'contains',
  378. value: 'me@example.com',
  379. },
  380. },
  381. perform: {
  382. 'X-Zammad-Ticket-group_id' => {
  383. value: group1.id,
  384. },
  385. 'x-Zammad-Article-Internal' => {
  386. value: true,
  387. },
  388. },
  389. channel: 'email',
  390. active: true,
  391. created_by_id: 1,
  392. updated_by_id: 1,
  393. )
  394. PostmasterFilter.create!(
  395. name: 'used x-any-recipient',
  396. match: {
  397. 'x-any-recipient' => {
  398. operator: 'contains',
  399. value: 'any@example.com',
  400. },
  401. },
  402. perform: {
  403. 'X-Zammad-Ticket-group_id' => {
  404. value: group2.id,
  405. },
  406. 'x-Zammad-Article-Internal' => {
  407. value: true,
  408. },
  409. },
  410. channel: 'email',
  411. active: true,
  412. created_by_id: 1,
  413. updated_by_id: 1,
  414. )
  415. data = 'From: me@example.com
  416. To: customer@example.com
  417. Subject: some subject
  418. Some Text'
  419. parser = Channel::EmailParser.new
  420. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  421. assert_equal('Test Group1', ticket.group.name)
  422. assert_equal('2 normal', ticket.priority.name)
  423. assert_equal('some subject', ticket.title)
  424. assert_equal('Customer', article.sender.name)
  425. assert_equal('email', article.type.name)
  426. assert_equal(true, article.internal)
  427. data = 'From: Some Body <somebody@example.com>
  428. To: Bob <bod@example.com>
  429. Cc: any@example.com
  430. Subject: some subject
  431. Some Text'
  432. parser = Channel::EmailParser.new
  433. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  434. assert_equal('Test Group2', ticket.group.name)
  435. assert_equal('2 normal', ticket.priority.name)
  436. assert_equal('some subject', ticket.title)
  437. assert_equal('Customer', article.sender.name)
  438. assert_equal('email', article.type.name)
  439. assert_equal(true, article.internal)
  440. PostmasterFilter.create!(
  441. name: 'used x-any-recipient 2',
  442. match: {
  443. 'x-any-recipient' => {
  444. operator: 'contains not',
  445. value: 'any_not@example.com',
  446. },
  447. },
  448. perform: {
  449. 'X-Zammad-Ticket-group_id' => {
  450. value: group2.id,
  451. },
  452. 'X-Zammad-Ticket-priority_id' => {
  453. value: '1',
  454. },
  455. 'x-Zammad-Article-Internal' => {
  456. value: 'false',
  457. },
  458. },
  459. channel: 'email',
  460. active: true,
  461. created_by_id: 1,
  462. updated_by_id: 1,
  463. )
  464. data = 'From: Some Body <somebody@example.com>
  465. To: Bob <bod@example.com>
  466. Cc: any@example.com
  467. Subject: some subject2
  468. Some Text'
  469. parser = Channel::EmailParser.new
  470. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  471. assert_equal('Test Group2', ticket.group.name)
  472. assert_equal('1 low', ticket.priority.name)
  473. assert_equal('some subject2', ticket.title)
  474. assert_equal('Customer', article.sender.name)
  475. assert_equal('email', article.type.name)
  476. assert_equal(false, article.internal)
  477. PostmasterFilter.destroy_all
  478. # follow up with create post master filter test
  479. PostmasterFilter.create!(
  480. name: 'used - empty selector',
  481. match: {
  482. from: {
  483. operator: 'contains',
  484. value: 'example.com',
  485. },
  486. },
  487. perform: {
  488. 'X-Zammad-Ticket-group_id' => {
  489. value: group2.id,
  490. },
  491. },
  492. channel: 'email',
  493. active: true,
  494. created_by_id: 1,
  495. updated_by_id: 1,
  496. )
  497. data = 'From: Some Body <somebody@example.com>
  498. To: Bob <bod@example.com>
  499. Cc: any@example.com
  500. Subject: follow up with create post master filter test
  501. Some Text'
  502. parser = Channel::EmailParser.new
  503. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  504. assert_equal(group2.name, ticket.group.name)
  505. assert_equal('2 normal', ticket.priority.name)
  506. assert_equal('follow up with create post master filter test', ticket.title)
  507. assert_equal('Customer', article.sender.name)
  508. assert_equal('email', article.type.name)
  509. assert_equal(false, article.internal)
  510. # move ticket
  511. ticket.group = group1
  512. ticket.save
  513. Observer::Transaction.commit
  514. data = "From: me@example.com
  515. To: customer@example.com
  516. Subject: #{ticket.subject_build('some new subject')}
  517. Some Text"
  518. article_count = ticket.articles.count
  519. parser = Channel::EmailParser.new
  520. ticket_followup, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  521. # check if group is still the old one
  522. assert_equal(ticket.id, ticket_followup.id)
  523. assert_equal(group1.name, ticket_followup.group.name)
  524. assert_equal(group1.name, ticket_followup.group.name)
  525. assert_equal('2 normal', ticket_followup.priority.name)
  526. assert_equal('follow up with create post master filter test', ticket_followup.title)
  527. assert_equal('Customer', article.sender.name)
  528. assert_equal('email', article.type.name)
  529. assert_equal(false, article.internal)
  530. assert_equal(article_count+1, ticket_followup.articles.count)
  531. PostmasterFilter.destroy_all
  532. PostmasterFilter.create!(
  533. name: 'used',
  534. match: {
  535. from: {
  536. operator: 'contains',
  537. value: 'me@example.com',
  538. },
  539. },
  540. perform: {
  541. 'X-Zammad-Ticket-group_id' => {
  542. value: group1.id,
  543. },
  544. 'x-Zammad-Article-Internal' => {
  545. value: true,
  546. },
  547. 'x-Zammad-Ticket-customer_id' => {
  548. value: '',
  549. value_completion: '',
  550. },
  551. },
  552. channel: 'email',
  553. active: true,
  554. created_by_id: 1,
  555. updated_by_id: 1,
  556. )
  557. data = 'From: ME Bob <me@example.com>
  558. To: customer@example.com
  559. Subject: some subject
  560. Some Text'
  561. parser = Channel::EmailParser.new
  562. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  563. assert_equal(group1.name, ticket.group.name)
  564. assert_equal('2 normal', ticket.priority.name)
  565. assert_equal('some subject', ticket.title)
  566. assert_equal('me@example.com', ticket.customer.email)
  567. PostmasterFilter.destroy_all
  568. PostmasterFilter.create!(
  569. name: 'used',
  570. match: {
  571. from: {
  572. operator: 'contains',
  573. value: 'me@example.com',
  574. },
  575. },
  576. perform: {
  577. 'X-Zammad-Ticket-group_id' => {
  578. value: group1.id,
  579. },
  580. 'x-Zammad-Article-Internal' => {
  581. value: true,
  582. },
  583. 'x-Zammad-Ticket-customer_id' => {
  584. value: 999_999,
  585. value_completion: 'xxx',
  586. },
  587. },
  588. channel: 'email',
  589. active: true,
  590. created_by_id: 1,
  591. updated_by_id: 1,
  592. )
  593. data = 'From: ME Bob <me@example.com>
  594. To: customer@example.com
  595. Subject: some subject
  596. Some Text'
  597. parser = Channel::EmailParser.new
  598. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  599. assert_equal(group1.name, ticket.group.name)
  600. assert_equal('2 normal', ticket.priority.name)
  601. assert_equal('some subject', ticket.title)
  602. assert_equal('me@example.com', ticket.customer.email)
  603. PostmasterFilter.destroy_all
  604. PostmasterFilter.create!(
  605. name: 'used',
  606. match: {
  607. from: {
  608. operator: 'contains',
  609. value: 'me@example.com',
  610. },
  611. },
  612. perform: {
  613. 'X-Zammad-Ticket-group_id' => {
  614. value: group1.id,
  615. },
  616. 'X-Zammad-Ticket-priority_id' => {
  617. value: 888_888,
  618. },
  619. 'x-Zammad-Article-Internal' => {
  620. value: true,
  621. },
  622. 'x-Zammad-Ticket-customer_id' => {
  623. value: 999_999,
  624. value_completion: 'xxx',
  625. },
  626. },
  627. channel: 'email',
  628. active: true,
  629. created_by_id: 1,
  630. updated_by_id: 1,
  631. )
  632. data = 'From: ME Bob <me@example.com>
  633. To: customer@example.com
  634. Subject: some subject
  635. Some Text'
  636. parser = Channel::EmailParser.new
  637. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  638. assert_equal(group1.name, ticket.group.name)
  639. assert_equal('2 normal', ticket.priority.name)
  640. assert_equal('some subject', ticket.title)
  641. assert_equal('me@example.com', ticket.customer.email)
  642. assert_equal('2 normal', ticket.priority.name)
  643. PostmasterFilter.destroy_all
  644. PostmasterFilter.create!(
  645. name: 'Autoresponder',
  646. match: {
  647. 'auto-submitted' => {
  648. 'operator' => 'contains not',
  649. 'value' => 'auto-generated',
  650. },
  651. 'from' => {
  652. 'operator' => 'contains',
  653. 'value' => '@example.com',
  654. }
  655. },
  656. perform: {
  657. 'x-zammad-article-internal' => {
  658. 'value' => 'true',
  659. },
  660. 'x-zammad-article-type_id' => {
  661. 'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
  662. },
  663. 'x-zammad-ignore' => {
  664. 'value' => 'false',
  665. },
  666. },
  667. channel: 'email',
  668. active: true,
  669. created_by_id: 1,
  670. updated_by_id: 1,
  671. )
  672. data = 'From: ME Bob <me@example.com>
  673. To: customer@example.com
  674. Subject: some subject
  675. Some Text'
  676. parser = Channel::EmailParser.new
  677. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  678. assert_equal('Users', ticket.group.name)
  679. assert_equal('2 normal', ticket.priority.name)
  680. assert_equal('some subject', ticket.title)
  681. assert_equal('me@example.com', ticket.customer.email)
  682. assert_equal('2 normal', ticket.priority.name)
  683. assert_equal('Customer', article.sender.name)
  684. assert_equal('note', article.type.name)
  685. assert_equal(true, article.internal)
  686. PostmasterFilter.destroy_all
  687. PostmasterFilter.create!(
  688. name: 'Autoresponder',
  689. match: {
  690. 'auto-submitted' => {
  691. 'operator' => 'contains',
  692. 'value' => 'auto-generated',
  693. },
  694. 'from' => {
  695. 'operator' => 'contains',
  696. 'value' => '@example.com',
  697. }
  698. },
  699. perform: {
  700. 'x-zammad-article-internal' => {
  701. 'value' => 'true',
  702. },
  703. 'x-zammad-article-type_id' => {
  704. 'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
  705. },
  706. 'x-zammad-ignore' => {
  707. 'value' => 'false',
  708. },
  709. },
  710. channel: 'email',
  711. active: true,
  712. created_by_id: 1,
  713. updated_by_id: 1,
  714. )
  715. data = 'From: ME Bob <me@example.com>
  716. To: customer@example.com
  717. Subject: some subject
  718. Some Text'
  719. parser = Channel::EmailParser.new
  720. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  721. assert_equal('Users', ticket.group.name)
  722. assert_equal('2 normal', ticket.priority.name)
  723. assert_equal('some subject', ticket.title)
  724. assert_equal('me@example.com', ticket.customer.email)
  725. assert_equal('2 normal', ticket.priority.name)
  726. assert_equal('Customer', article.sender.name)
  727. assert_equal('email', article.type.name)
  728. assert_equal(false, article.internal)
  729. PostmasterFilter.destroy_all
  730. PostmasterFilter.create!(
  731. name: 'Autoresponder',
  732. match: {
  733. 'auto-submitted' => {
  734. 'operator' => 'contains not',
  735. 'value' => 'auto-generated',
  736. },
  737. 'to' => {
  738. 'operator' => 'contains',
  739. 'value' => 'customer@example.com',
  740. },
  741. 'from' => {
  742. 'operator' => 'contains',
  743. 'value' => '@example.com',
  744. }
  745. },
  746. perform: {
  747. 'x-zammad-article-internal' => {
  748. 'value' => 'true',
  749. },
  750. 'x-zammad-article-type_id' => {
  751. 'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
  752. },
  753. 'x-zammad-ignore' => {
  754. 'value' => 'false',
  755. },
  756. },
  757. channel: 'email',
  758. active: true,
  759. created_by_id: 1,
  760. updated_by_id: 1,
  761. )
  762. data = 'From: ME Bob <me@example.com>
  763. To: customer@example.com
  764. Subject: some subject
  765. Some Text'
  766. parser = Channel::EmailParser.new
  767. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  768. assert_equal('Users', ticket.group.name)
  769. assert_equal('2 normal', ticket.priority.name)
  770. assert_equal('some subject', ticket.title)
  771. assert_equal('me@example.com', ticket.customer.email)
  772. assert_equal('2 normal', ticket.priority.name)
  773. assert_equal('Customer', article.sender.name)
  774. assert_equal('note', article.type.name)
  775. assert_equal(true, article.internal)
  776. PostmasterFilter.destroy_all
  777. PostmasterFilter.create!(
  778. name: 'Autoresponder',
  779. match: {
  780. 'auto-submitted' => {
  781. 'operator' => 'contains',
  782. 'value' => 'auto-generated',
  783. },
  784. 'to' => {
  785. 'operator' => 'contains',
  786. 'value' => 'customer1@example.com',
  787. },
  788. 'from' => {
  789. 'operator' => 'contains',
  790. 'value' => '@example.com',
  791. }
  792. },
  793. perform: {
  794. 'x-zammad-article-internal' => {
  795. 'value' => 'true',
  796. },
  797. 'x-zammad-article-type_id' => {
  798. 'value' => Ticket::Article::Type.find_by(name: 'note').id.to_s,
  799. },
  800. 'x-zammad-ignore' => {
  801. 'value' => 'false',
  802. },
  803. },
  804. channel: 'email',
  805. active: true,
  806. created_by_id: 1,
  807. updated_by_id: 1,
  808. )
  809. data = 'From: ME Bob <me@example.com>
  810. To: customer@example.com
  811. Subject: some subject
  812. Some Text'
  813. parser = Channel::EmailParser.new
  814. ticket, article, user = parser.process({ group_id: group_default.id, trusted: false }, data)
  815. assert_equal('Users', ticket.group.name)
  816. assert_equal('2 normal', ticket.priority.name)
  817. assert_equal('some subject', ticket.title)
  818. assert_equal('me@example.com', ticket.customer.email)
  819. assert_equal('2 normal', ticket.priority.name)
  820. assert_equal('Customer', article.sender.name)
  821. assert_equal('email', article.type.name)
  822. assert_equal(false, article.internal)
  823. end
  824. end