ticket_trigger_test.rb 88 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class TicketTriggerTest < ActiveSupport::TestCase
  4. test '1 basic' do
  5. trigger1 = Trigger.create_or_update(
  6. name: 'aaa loop check',
  7. condition: {
  8. 'article.subject' => {
  9. 'operator' => 'contains',
  10. 'value' => 'Thanks for your inquiry',
  11. },
  12. },
  13. perform: {
  14. 'ticket.tags' => {
  15. 'operator' => 'add',
  16. 'value' => 'should_not_loop',
  17. },
  18. 'notification.email' => {
  19. 'body' => 'some lala',
  20. 'recipient' => 'ticket_customer',
  21. 'subject' => 'Thanks for your inquiry - loop check (#{ticket.title})!',
  22. },
  23. },
  24. disable_notification: true,
  25. active: true,
  26. created_by_id: 1,
  27. updated_by_id: 1,
  28. )
  29. trigger2 = Trigger.create_or_update(
  30. name: 'auto reply',
  31. condition: {
  32. 'ticket.action' => {
  33. 'operator' => 'is',
  34. 'value' => 'create',
  35. },
  36. 'ticket.state_id' => {
  37. 'operator' => 'is',
  38. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  39. }
  40. },
  41. perform: {
  42. 'notification.email' => {
  43. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  44. 'recipient' => 'ticket_customer',
  45. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  46. },
  47. 'ticket.priority_id' => {
  48. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  49. },
  50. 'ticket.tags' => {
  51. 'operator' => 'add',
  52. 'value' => 'aa, kk',
  53. },
  54. },
  55. disable_notification: true,
  56. active: true,
  57. created_by_id: 1,
  58. updated_by_id: 1,
  59. )
  60. trigger3 = Trigger.create_or_update(
  61. name: 'auto tag 1',
  62. condition: {
  63. 'ticket.action' => {
  64. 'operator' => 'is',
  65. 'value' => 'update',
  66. },
  67. 'ticket.state_id' => {
  68. 'operator' => 'is',
  69. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  70. }
  71. },
  72. perform: {
  73. 'ticket.priority_id' => {
  74. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  75. },
  76. 'ticket.tags' => {
  77. 'operator' => 'remove',
  78. 'value' => 'kk',
  79. },
  80. },
  81. disable_notification: true,
  82. active: true,
  83. created_by_id: 1,
  84. updated_by_id: 1,
  85. )
  86. trigger4 = Trigger.create_or_update(
  87. name: 'auto tag 2',
  88. condition: {
  89. 'ticket.state_id' => {
  90. 'operator' => 'is',
  91. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  92. }
  93. },
  94. perform: {
  95. 'ticket.tags' => {
  96. 'operator' => 'add',
  97. 'value' => 'abc',
  98. },
  99. },
  100. disable_notification: true,
  101. active: true,
  102. created_by_id: 1,
  103. updated_by_id: 1,
  104. )
  105. trigger5 = Trigger.create_or_update(
  106. name: 'not matching',
  107. condition: {
  108. 'ticket.state_id' => {
  109. 'operator' => 'is',
  110. 'value' => Ticket::State.lookup(name: 'closed').id.to_s,
  111. }
  112. },
  113. perform: {
  114. 'ticket.priority_id' => {
  115. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  116. },
  117. },
  118. disable_notification: true,
  119. active: true,
  120. created_by_id: 1,
  121. updated_by_id: 1,
  122. )
  123. trigger6 = Trigger.create_or_update(
  124. name: 'zzz last',
  125. condition: {
  126. 'article.subject' => {
  127. 'operator' => 'contains',
  128. 'value' => 'some subject 1234',
  129. },
  130. },
  131. perform: {
  132. 'ticket.tags' => {
  133. 'operator' => 'add',
  134. 'value' => 'article_create_trigger',
  135. },
  136. 'notification.email' => {
  137. 'body' => 'some lala',
  138. 'recipient' => 'ticket_customer',
  139. 'subject' => 'Thanks for your inquiry - 1234 check (#{ticket.title})!',
  140. },
  141. },
  142. disable_notification: true,
  143. active: true,
  144. created_by_id: 1,
  145. updated_by_id: 1,
  146. )
  147. ticket1 = Ticket.create(
  148. title: "some <b>title</b>\n äöüß",
  149. group: Group.lookup(name: 'Users'),
  150. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  151. updated_by_id: 1,
  152. created_by_id: 1,
  153. )
  154. assert(ticket1, 'ticket1 created')
  155. Ticket::Article.create(
  156. ticket_id: ticket1.id,
  157. from: 'some_sender@example.com',
  158. to: 'some_recipient@example.com',
  159. subject: 'some subject',
  160. message_id: 'some@id',
  161. body: "some message <b>note</b>\nnew line",
  162. internal: false,
  163. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  164. type: Ticket::Article::Type.find_by(name: 'note'),
  165. updated_by_id: 1,
  166. created_by_id: 1,
  167. )
  168. ticket1.reload
  169. assert_equal('some <b>title</b> äöüß', ticket1.title, 'ticket1.title verify')
  170. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  171. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  172. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  173. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  174. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  175. Observer::Transaction.commit
  176. ticket1.reload
  177. assert_equal('some <b>title</b> äöüß', ticket1.title, 'ticket1.title verify')
  178. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  179. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  180. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  181. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  182. assert_equal(%w(aa kk abc), Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  183. article1 = ticket1.articles.last
  184. assert_match('Zammad <zammad@localhost>', article1.from)
  185. assert_match('nicole.braun@zammad.org', article1.to)
  186. assert_match('Thanks for your inquiry (some <b>title</b> äöüß)!', article1.subject)
  187. assert_match('Braun<br>some &lt;b&gt;title&lt;/b&gt;', article1.body)
  188. assert_match('&gt; some message &lt;b&gt;note&lt;/b&gt;<br>&gt; new line', article1.body)
  189. assert_equal('text/html', article1.content_type)
  190. ticket1.priority = Ticket::Priority.lookup(name: '2 normal')
  191. ticket1.save!
  192. Observer::Transaction.commit
  193. ticket1.reload
  194. assert_equal('some <b>title</b> äöüß', ticket1.title, 'ticket1.title verify')
  195. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  196. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  197. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  198. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  199. assert_equal(%w(aa kk abc), Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  200. ticket1.state = Ticket::State.lookup(name: 'open')
  201. ticket1.save!
  202. Observer::Transaction.commit
  203. ticket1.reload
  204. assert_equal('some <b>title</b> äöüß', ticket1.title, 'ticket1.title verify')
  205. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  206. assert_equal('open', ticket1.state.name, 'ticket1.state verify')
  207. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  208. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  209. assert_equal(%w(aa kk abc), Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  210. ticket1.state = Ticket::State.lookup(name: 'new')
  211. ticket1.save!
  212. Observer::Transaction.commit
  213. ticket1.reload
  214. assert_equal('some <b>title</b> äöüß', ticket1.title, 'ticket1.title verify')
  215. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  216. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  217. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  218. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  219. assert_equal(%w(aa abc), Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  220. ticket2 = Ticket.create(
  221. title: "some title\n äöüß",
  222. group: Group.lookup(name: 'Users'),
  223. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  224. state: Ticket::State.lookup(name: 'open'),
  225. priority: Ticket::Priority.lookup(name: '2 normal'),
  226. updated_by_id: 1,
  227. created_by_id: 1,
  228. )
  229. assert(ticket2, 'ticket2 created')
  230. assert_equal('some title äöüß', ticket2.title, 'ticket2.title verify')
  231. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  232. assert_equal('open', ticket2.state.name, 'ticket2.state verify')
  233. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  234. assert_equal(0, ticket2.articles.count, 'ticket2.articles verify')
  235. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket2.id))
  236. Observer::Transaction.commit
  237. ticket2.reload
  238. assert_equal('some title äöüß', ticket2.title, 'ticket2.title verify')
  239. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  240. assert_equal('open', ticket2.state.name, 'ticket2.state verify')
  241. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  242. assert_equal(0, ticket2.articles.count, 'ticket2.articles verify')
  243. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket2.id))
  244. ticket3 = Ticket.create(
  245. title: "some <b>title</b>\n äöüß3",
  246. group: Group.lookup(name: 'Users'),
  247. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  248. updated_by_id: 1,
  249. created_by_id: 1,
  250. )
  251. assert(ticket3, 'ticket3 created')
  252. Ticket::Article.create(
  253. ticket_id: ticket3.id,
  254. from: 'some_sender@example.com',
  255. to: 'some_recipient@example.com',
  256. subject: 'some subject 1234',
  257. message_id: 'some@id',
  258. content_type: 'text/html',
  259. body: 'some message <b>note</b><br>new line',
  260. internal: false,
  261. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  262. type: Ticket::Article::Type.find_by(name: 'note'),
  263. updated_by_id: 1,
  264. created_by_id: 1,
  265. )
  266. assert_equal('some <b>title</b> äöüß3', ticket3.title, 'ticket3.title verify')
  267. assert_equal('Users', ticket3.group.name, 'ticket3.group verify')
  268. assert_equal('new', ticket3.state.name, 'ticket3.state verify')
  269. assert_equal('2 normal', ticket3.priority.name, 'ticket3.priority verify')
  270. assert_equal(1, ticket3.articles.count, 'ticket3.articles verify')
  271. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket3.id))
  272. Observer::Transaction.commit
  273. ticket3.reload
  274. assert_equal('some <b>title</b> äöüß3', ticket3.title, 'ticket3.title verify')
  275. assert_equal('Users', ticket3.group.name, 'ticket3.group verify')
  276. assert_equal('new', ticket3.state.name, 'ticket3.state verify')
  277. assert_equal('3 high', ticket3.priority.name, 'ticket3.priority verify')
  278. assert_equal(3, ticket3.articles.count, 'ticket3.articles verify')
  279. assert_equal(%w(aa kk abc article_create_trigger), Tag.tag_list(object: 'Ticket', o_id: ticket3.id))
  280. article3 = ticket3.articles[1]
  281. assert_match('Zammad <zammad@localhost>', article3.from)
  282. assert_match('nicole.braun@zammad.org', article3.to)
  283. assert_match('Thanks for your inquiry (some <b>title</b> äöüß3)!', article3.subject)
  284. assert_match('Braun<br>some &lt;b&gt;title&lt;/b&gt;', article3.body)
  285. assert_match('&gt; some message note<br>&gt; new line', article3.body)
  286. assert_no_match('&gt; some message &lt;b&gt;note&lt;/b&gt;<br>&gt; new line', article3.body)
  287. assert_equal('text/html', article3.content_type)
  288. article3 = ticket3.articles[2]
  289. assert_match('Zammad <zammad@localhost>', article3.from)
  290. assert_match('nicole.braun@zammad.org', article3.to)
  291. assert_match('Thanks for your inquiry - 1234 check (some <b>title</b> äöüß3)!', article3.subject)
  292. assert_equal('text/html', article3.content_type)
  293. Ticket::Article.create(
  294. ticket_id: ticket3.id,
  295. from: 'some_sender@example.com',
  296. to: 'some_recipient@example.com',
  297. subject: 'some subject - not 1234',
  298. message_id: 'some@id',
  299. content_type: 'text/html',
  300. body: 'some message <b>note</b><br>new line',
  301. internal: false,
  302. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  303. type: Ticket::Article::Type.find_by(name: 'note'),
  304. updated_by_id: 1,
  305. created_by_id: 1,
  306. )
  307. Observer::Transaction.commit
  308. ticket3.reload
  309. assert_equal('some <b>title</b> äöüß3', ticket3.title, 'ticket3.title verify')
  310. assert_equal('Users', ticket3.group.name, 'ticket3.group verify')
  311. assert_equal('new', ticket3.state.name, 'ticket3.state verify')
  312. assert_equal('3 high', ticket3.priority.name, 'ticket3.priority verify')
  313. assert_equal(4, ticket3.articles.count, 'ticket3.articles verify')
  314. assert_equal(%w(aa abc article_create_trigger), Tag.tag_list(object: 'Ticket', o_id: ticket3.id))
  315. Ticket::Article.create(
  316. ticket_id: ticket3.id,
  317. from: 'some_sender@example.com',
  318. to: 'some_recipient@example.com',
  319. subject: 'some subject NOT 1234',
  320. message_id: 'some@id',
  321. content_type: 'text/html',
  322. body: 'some message <b>note</b><br>new line',
  323. internal: false,
  324. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  325. type: Ticket::Article::Type.find_by(name: 'note'),
  326. updated_by_id: 1,
  327. created_by_id: 1,
  328. )
  329. Observer::Transaction.commit
  330. ticket3.reload
  331. assert_equal('some <b>title</b> äöüß3', ticket3.title, 'ticket3.title verify')
  332. assert_equal('Users', ticket3.group.name, 'ticket3.group verify')
  333. assert_equal('new', ticket3.state.name, 'ticket3.state verify')
  334. assert_equal('3 high', ticket3.priority.name, 'ticket3.priority verify')
  335. assert_equal(5, ticket3.articles.count, 'ticket3.articles verify')
  336. assert_equal(%w(aa abc article_create_trigger), Tag.tag_list(object: 'Ticket', o_id: ticket3.id))
  337. Ticket::Article.create(
  338. ticket_id: ticket3.id,
  339. from: 'some_sender@example.com',
  340. to: 'some_recipient@example.com',
  341. subject: 'some subject 1234',
  342. message_id: 'some@id',
  343. content_type: 'text/html',
  344. body: 'some message <b>note</b><br>new line',
  345. internal: false,
  346. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  347. type: Ticket::Article::Type.find_by(name: 'note'),
  348. updated_by_id: 1,
  349. created_by_id: 1,
  350. )
  351. Observer::Transaction.commit
  352. ticket3.reload
  353. assert_equal('some <b>title</b> äöüß3', ticket3.title, 'ticket3.title verify')
  354. assert_equal('Users', ticket3.group.name, 'ticket3.group verify')
  355. assert_equal('new', ticket3.state.name, 'ticket3.state verify')
  356. assert_equal('3 high', ticket3.priority.name, 'ticket3.priority verify')
  357. assert_equal(7, ticket3.articles.count, 'ticket3.articles verify')
  358. assert_equal(%w(aa abc article_create_trigger), Tag.tag_list(object: 'Ticket', o_id: ticket3.id))
  359. end
  360. test '2 actions - create' do
  361. trigger1 = Trigger.create_or_update(
  362. name: 'auto reply',
  363. condition: {
  364. 'ticket.action' => {
  365. 'operator' => 'is',
  366. 'value' => 'create',
  367. },
  368. 'ticket.state_id' => {
  369. 'operator' => 'is',
  370. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  371. }
  372. },
  373. perform: {
  374. 'notification.email' => {
  375. 'body' => 'dasdasdasd',
  376. 'recipient' => 'ticket_customer',
  377. 'subject' => 'asdasdas',
  378. },
  379. 'ticket.priority_id' => {
  380. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  381. },
  382. },
  383. disable_notification: true,
  384. active: true,
  385. created_by_id: 1,
  386. updated_by_id: 1,
  387. )
  388. ticket1 = Ticket.create(
  389. title: "some title\n äöüß",
  390. group: Group.lookup(name: 'Users'),
  391. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  392. updated_by_id: 1,
  393. created_by_id: 1,
  394. )
  395. assert(ticket1, 'ticket1 created')
  396. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  397. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  398. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  399. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  400. assert_equal(0, ticket1.articles.count, 'ticket1.articles verify')
  401. Observer::Transaction.commit
  402. ticket1.reload
  403. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  404. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  405. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  406. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  407. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  408. article1 = ticket1.articles.last
  409. assert_match('Zammad <zammad@localhost>', article1.from)
  410. assert_match('nicole.braun@zammad.org', article1.to)
  411. assert_match('asdasdas', article1.subject)
  412. assert_match('dasdasdasd', article1.body)
  413. assert_equal('text/html', article1.content_type)
  414. ticket1.priority = Ticket::Priority.lookup(name: '2 normal')
  415. ticket1.save!
  416. Observer::Transaction.commit
  417. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  418. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  419. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  420. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  421. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  422. ticket1.state = Ticket::State.lookup(name: 'open')
  423. ticket1.save!
  424. Observer::Transaction.commit
  425. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  426. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  427. assert_equal('open', ticket1.state.name, 'ticket1.state verify')
  428. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  429. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  430. ticket1.state = Ticket::State.lookup(name: 'new')
  431. ticket1.save!
  432. Observer::Transaction.commit
  433. ticket1.reload
  434. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  435. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  436. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  437. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  438. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  439. end
  440. test '2 actions - update' do
  441. trigger1 = Trigger.create_or_update(
  442. name: 'auto reply',
  443. condition: {
  444. 'ticket.action' => {
  445. 'operator' => 'is',
  446. 'value' => 'update',
  447. },
  448. 'ticket.state_id' => {
  449. 'operator' => 'is',
  450. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  451. }
  452. },
  453. perform: {
  454. 'notification.email' => {
  455. 'body' => 'dasdasdasd',
  456. 'recipient' => 'ticket_customer',
  457. 'subject' => 'asdasdas',
  458. },
  459. 'ticket.priority_id' => {
  460. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  461. },
  462. },
  463. disable_notification: true,
  464. active: true,
  465. created_by_id: 1,
  466. updated_by_id: 1,
  467. )
  468. ticket1 = Ticket.create(
  469. title: "some title\n äöüß",
  470. group: Group.lookup(name: 'Users'),
  471. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  472. updated_by_id: 1,
  473. created_by_id: 1,
  474. )
  475. assert(ticket1, 'ticket1 created')
  476. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  477. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  478. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  479. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  480. assert_equal(0, ticket1.articles.count, 'ticket1.articles verify')
  481. Observer::Transaction.commit
  482. ticket1.reload
  483. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  484. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  485. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  486. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  487. assert_equal(0, ticket1.articles.count, 'ticket1.articles verify')
  488. ticket1.priority = Ticket::Priority.lookup(name: '2 normal')
  489. ticket1.save!
  490. Observer::Transaction.commit
  491. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  492. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  493. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  494. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  495. assert_equal(0, ticket1.articles.count, 'ticket1.articles verify')
  496. ticket1.state = Ticket::State.lookup(name: 'open')
  497. ticket1.save!
  498. Observer::Transaction.commit
  499. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  500. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  501. assert_equal('open', ticket1.state.name, 'ticket1.state verify')
  502. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  503. assert_equal(0, ticket1.articles.count, 'ticket1.articles verify')
  504. ticket1.state = Ticket::State.lookup(name: 'new')
  505. ticket1.save!
  506. Observer::Transaction.commit
  507. ticket1.reload
  508. assert_equal('some title äöüß', ticket1.title, 'ticket1.title verify')
  509. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  510. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  511. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  512. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  513. end
  514. test '3 auto replys' do
  515. roles = Role.where(name: 'Customer')
  516. customer1 = User.create_or_update(
  517. login: 'postmaster@example.com',
  518. firstname: 'Trigger',
  519. lastname: 'Customer1',
  520. email: 'postmaster@example.com',
  521. password: 'customerpw',
  522. active: true,
  523. roles: roles,
  524. updated_at: '2015-02-05 16:37:00',
  525. updated_by_id: 1,
  526. created_by_id: 1,
  527. )
  528. customer2 = User.create_or_update(
  529. login: 'ticket-auto-reply-customer2@example.com',
  530. firstname: 'Trigger',
  531. lastname: 'Customer2',
  532. email: 'ticket-auto-reply-customer2@example.com',
  533. password: 'customerpw',
  534. active: true,
  535. organization_id: nil,
  536. roles: roles,
  537. updated_at: '2015-02-05 16:37:00',
  538. updated_by_id: 1,
  539. created_by_id: 1,
  540. )
  541. trigger1 = Trigger.create_or_update(
  542. name: 'auto reply - new ticket',
  543. condition: {
  544. 'ticket.action' => {
  545. 'operator' => 'is',
  546. 'value' => 'create',
  547. },
  548. 'ticket.state_id' => {
  549. 'operator' => 'is not',
  550. 'value' => Ticket::State.lookup(name: 'closed').id,
  551. },
  552. 'article.type_id' => {
  553. 'operator' => 'is',
  554. 'value' => [
  555. Ticket::Article::Type.lookup(name: 'email').id,
  556. Ticket::Article::Type.lookup(name: 'phone').id,
  557. Ticket::Article::Type.lookup(name: 'web').id,
  558. ],
  559. },
  560. },
  561. perform: {
  562. 'notification.email' => {
  563. 'body' => '<p>Your request (Ticket##{ticket.number}) has been received and will be reviewed by our support staff.<p>
  564. <br/>
  565. <p>To provide additional information, please reply to this email or click on the following link:
  566. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  567. </p>
  568. <br/>
  569. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  570. 'recipient' => 'ticket_customer',
  571. 'subject' => 'Thanks for your inquiry (#{ticket.title})',
  572. },
  573. },
  574. disable_notification: true,
  575. active: true,
  576. created_by_id: 1,
  577. updated_by_id: 1,
  578. )
  579. trigger2 = Trigger.create_or_update(
  580. name: 'auto reply (on follow up of tickets)',
  581. condition: {
  582. 'ticket.action' => {
  583. 'operator' => 'is',
  584. 'value' => 'update',
  585. },
  586. 'article.sender_id' => {
  587. 'operator' => 'is',
  588. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  589. },
  590. 'article.type_id' => {
  591. 'operator' => 'is',
  592. 'value' => [
  593. Ticket::Article::Type.lookup(name: 'email').id,
  594. Ticket::Article::Type.lookup(name: 'phone').id,
  595. Ticket::Article::Type.lookup(name: 'web').id,
  596. ],
  597. },
  598. },
  599. perform: {
  600. 'notification.email' => {
  601. 'body' => '<p>Your follow up for (#{config.ticket_hook}##{ticket.number}) has been received and will be reviewed by our support staff.<p>
  602. <br/>
  603. <p>To provide additional information, please reply to this email or click on the following link:
  604. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  605. </p>
  606. <br/>
  607. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  608. 'recipient' => 'ticket_customer',
  609. 'subject' => 'Thanks for your follow up (#{ticket.title})',
  610. },
  611. },
  612. active: true,
  613. created_by_id: 1,
  614. updated_by_id: 1,
  615. )
  616. trigger3 = Trigger.create_or_update(
  617. name: 'not matching',
  618. condition: {
  619. 'ticket.action' => {
  620. 'operator' => 'is',
  621. 'value' => 'create',
  622. },
  623. 'ticket.state_id' => {
  624. 'operator' => 'is',
  625. 'value' => Ticket::State.lookup(name: 'closed').id.to_s,
  626. }
  627. },
  628. perform: {
  629. 'notification.email' => {
  630. 'body' => '2some text<br>#{ticket.customer.lastname}<br>#{ticket.title}',
  631. 'recipient' => 'ticket_customer',
  632. 'subject' => '2Thanks for your inquiry (#{ticket.title})!',
  633. },
  634. },
  635. disable_notification: true,
  636. active: true,
  637. created_by_id: 1,
  638. updated_by_id: 1,
  639. )
  640. # process mail without Precedence header
  641. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  642. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  643. assert_equal('aaäöüßad asd', ticket_p.title)
  644. assert_equal('Users', ticket_p.group.name)
  645. assert_equal('new', ticket_p.state.name)
  646. assert_equal(2, ticket_p.articles.count)
  647. article_p = ticket_p.articles.last
  648. assert_match('Thanks for your inquiry (aaäöüßad asd)', article_p.subject)
  649. assert_match('Zammad <zammad@localhost>', article_p.from)
  650. assert_no_match('config\.', article_p.body)
  651. assert_match('http://zammad.example.com', article_p.body)
  652. assert_no_match('ticket.', article_p.body)
  653. assert_match(ticket_p.number, article_p.body)
  654. assert_equal('text/html', article_p.content_type)
  655. ticket_p.priority = Ticket::Priority.lookup(name: '2 normal')
  656. ticket_p.save!
  657. Observer::Transaction.commit
  658. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  659. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  660. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  661. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  662. assert_equal(2, ticket_p.articles.count, 'ticket_p.articles verify')
  663. article_p = Ticket::Article.create(
  664. ticket_id: ticket_p.id,
  665. from: 'some_sender@example.com',
  666. to: 'some_recipient@example.com',
  667. subject: 'some subject',
  668. message_id: 'some@id',
  669. body: 'some message note',
  670. internal: false,
  671. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  672. type: Ticket::Article::Type.find_by(name: 'note'),
  673. updated_by_id: 1,
  674. created_by_id: 1,
  675. )
  676. Observer::Transaction.commit
  677. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  678. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  679. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  680. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  681. assert_equal(3, ticket_p.articles.count, 'ticket_p.articles verify')
  682. article_p = Ticket::Article.create(
  683. ticket_id: ticket_p.id,
  684. from: 'some_sender@example.com',
  685. to: 'some_recipient@example.com',
  686. subject: 'some subject',
  687. message_id: 'some@id',
  688. body: 'some message note',
  689. internal: false,
  690. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  691. type: Ticket::Article::Type.find_by(name: 'email'),
  692. updated_by_id: 1,
  693. created_by_id: 1,
  694. )
  695. Observer::Transaction.commit
  696. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  697. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  698. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  699. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  700. assert_equal(4, ticket_p.articles.count, 'ticket_p.articles verify')
  701. article_p = Ticket::Article.create(
  702. ticket_id: ticket_p.id,
  703. from: 'some_sender@example.com',
  704. to: 'some_recipient@example.com',
  705. subject: 'some subject',
  706. message_id: 'some@id',
  707. body: 'some message note',
  708. internal: false,
  709. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  710. type: Ticket::Article::Type.find_by(name: 'email'),
  711. updated_by_id: 1,
  712. created_by_id: 1,
  713. )
  714. Observer::Transaction.commit
  715. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  716. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  717. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  718. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  719. assert_equal(6, ticket_p.articles.count, 'ticket_p.articles verify')
  720. article_p = ticket_p.articles.last
  721. assert_match('Thanks for your follow up (aaäöüßad asd)', article_p.subject)
  722. assert_match('Zammad <zammad@localhost>', article_p.from)
  723. assert_no_match('config\.', article_p.body)
  724. assert_match('http://zammad.example.com', article_p.body)
  725. assert_no_match('ticket.', article_p.body)
  726. assert_match(ticket_p.number, article_p.body)
  727. assert_equal('text/html', article_p.content_type)
  728. ticket_p.state = Ticket::State.lookup(name: 'open')
  729. ticket_p.save!
  730. article_p = Ticket::Article.create(
  731. ticket_id: ticket_p.id,
  732. from: 'some_sender@example.com',
  733. to: 'some_recipient@example.com',
  734. subject: 'some subject',
  735. message_id: 'some@id',
  736. body: 'some message note',
  737. internal: false,
  738. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  739. type: Ticket::Article::Type.find_by(name: 'email'),
  740. updated_by_id: 1,
  741. created_by_id: 1,
  742. )
  743. Observer::Transaction.commit
  744. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  745. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  746. assert_equal('open', ticket_p.state.name, 'ticket_p.state verify')
  747. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  748. assert_equal(8, ticket_p.articles.count, 'ticket_p.articles verify')
  749. article_p = ticket_p.articles.last
  750. assert_match('Thanks for your follow up (aaäöüßad asd)', article_p.subject)
  751. assert_match('Zammad <zammad@localhost>', article_p.from)
  752. assert_no_match('config\.', article_p.body)
  753. assert_match('http://zammad.example.com', article_p.body)
  754. assert_no_match('ticket.', article_p.body)
  755. assert_match(ticket_p.number, article_p.body)
  756. assert_equal('text/html', article_p.content_type)
  757. # process mail without Precedence header
  758. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  759. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  760. assert_equal('new', ticket_p.state.name)
  761. assert_equal(2, ticket_p.articles.count)
  762. # process mail with Precedence header (no auto response)
  763. content = IO.binread('test/fixtures/ticket_trigger/mail2.box')
  764. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  765. assert_equal('new', ticket_p.state.name)
  766. assert_equal(1, ticket_p.articles.count)
  767. # process mail with abuse@ (no auto response)
  768. content = IO.binread('test/fixtures/ticket_trigger/mail3.box')
  769. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  770. assert_equal('new', ticket_p.state.name)
  771. assert_equal(1, ticket_p.articles.count)
  772. end
  773. test '4 has changed' do
  774. roles = Role.where(name: 'Customer')
  775. customer1 = User.create_or_update(
  776. login: 'postmaster@example.com',
  777. firstname: 'Trigger',
  778. lastname: 'Customer1',
  779. email: 'postmaster@example.com',
  780. password: 'customerpw',
  781. active: true,
  782. roles: roles,
  783. updated_at: '2015-02-05 16:37:00',
  784. updated_by_id: 1,
  785. created_by_id: 1,
  786. )
  787. customer2 = User.create_or_update(
  788. login: 'ticket-has-changed-customer2@example.com',
  789. firstname: 'Trigger',
  790. lastname: 'Customer2',
  791. email: 'ticket-has-changed-customer2@example.com',
  792. password: 'customerpw',
  793. active: true,
  794. organization_id: nil,
  795. roles: roles,
  796. updated_at: '2015-02-05 16:37:00',
  797. updated_by_id: 1,
  798. created_by_id: 1,
  799. )
  800. roles = Role.where(name: 'Agent')
  801. agent1 = User.create_or_update(
  802. login: 'agent-has-changed@example.com',
  803. firstname: 'Has Changed',
  804. lastname: 'Agent1',
  805. email: 'agent-has-changed@example.com',
  806. password: 'agentpw',
  807. active: true,
  808. roles: roles,
  809. updated_at: '2015-02-05 16:37:00',
  810. updated_by_id: 1,
  811. created_by_id: 1,
  812. )
  813. trigger1 = Trigger.create_or_update(
  814. name: 'owner update - to customer',
  815. condition: {
  816. 'ticket.owner_id' => {
  817. 'operator' => 'has changed',
  818. 'pre_condition' => 'current_user.id',
  819. 'value' => '',
  820. 'value_completion' => '',
  821. }
  822. },
  823. perform: {
  824. 'notification.email' => {
  825. 'body' => '<p>The owner of ticket (Ticket##{ticket.number}) has changed.<p>
  826. <br/>
  827. <p>To provide additional information, please reply to this email or click on the following link:
  828. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  829. </p>
  830. <br/>
  831. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  832. 'recipient' => 'ticket_customer',
  833. 'subject' => 'Owner has changed (#{ticket.title})',
  834. },
  835. },
  836. disable_notification: true,
  837. active: true,
  838. created_by_id: 1,
  839. updated_by_id: 1,
  840. )
  841. # process mail without Precedence header
  842. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  843. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  844. assert_equal('aaäöüßad asd', ticket_p.title)
  845. assert_equal('Users', ticket_p.group.name)
  846. assert_equal('new', ticket_p.state.name)
  847. assert_equal(1, ticket_p.articles.count)
  848. article_p = ticket_p.articles.last
  849. Observer::Transaction.commit
  850. ticket_p.owner = agent1
  851. ticket_p.save!
  852. Observer::Transaction.commit
  853. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  854. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  855. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  856. assert_equal('2 normal', ticket_p.priority.name, 'ticket_p.priority verify')
  857. assert_equal(2, ticket_p.articles.count, 'ticket_p.articles verify')
  858. #p ticket_p.articles.last.inspect
  859. article_p = ticket_p.articles.last
  860. assert_match('Owner has changed', article_p.subject)
  861. assert_match('Zammad <zammad@localhost>', article_p.from)
  862. assert_match('martin@example.com', article_p.to)
  863. assert_no_match('config\.', article_p.body)
  864. assert_match('http://zammad.example.com', article_p.body)
  865. assert_no_match('ticket.', article_p.body)
  866. assert_match(ticket_p.number, article_p.body)
  867. assert_equal('text/html', article_p.content_type)
  868. trigger1 = Trigger.create_or_update(
  869. name: 'owner update - to customer',
  870. condition: {
  871. 'ticket.owner_id' => {
  872. 'operator' => 'has changed',
  873. 'pre_condition' => 'current_user.id',
  874. 'value' => '',
  875. 'value_completion' => '',
  876. },
  877. 'ticket.priority_id' => {
  878. 'operator' => 'is',
  879. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  880. },
  881. },
  882. perform: {
  883. 'notification.email' => {
  884. 'body' => '<p>The owner of ticket (Ticket##{ticket.number}) has changed.<p>
  885. <br/>
  886. <p>To provide additional information, please reply to this email or click on the following link:
  887. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  888. </p>
  889. <br/>
  890. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  891. 'recipient' => 'ticket_customer',
  892. 'subject' => 'Owner has changed (#{ticket.title})',
  893. },
  894. },
  895. disable_notification: true,
  896. active: true,
  897. created_by_id: 1,
  898. updated_by_id: 1,
  899. )
  900. # process mail without Precedence header
  901. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  902. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  903. assert_equal('aaäöüßad asd', ticket_p.title)
  904. assert_equal('Users', ticket_p.group.name)
  905. assert_equal('new', ticket_p.state.name)
  906. assert_equal(1, ticket_p.articles.count)
  907. article_p = ticket_p.articles.last
  908. Observer::Transaction.commit
  909. assert_equal(1, ticket_p.articles.count)
  910. ticket_p.priority = Ticket::Priority.lookup(name: '1 low')
  911. ticket_p.save!
  912. Observer::Transaction.commit
  913. assert_equal(1, ticket_p.articles.count)
  914. ticket_p.priority = Ticket::Priority.lookup(name: '3 high')
  915. ticket_p.save!
  916. Observer::Transaction.commit
  917. assert_equal(1, ticket_p.articles.count)
  918. ticket_p.owner = agent1
  919. ticket_p.save!
  920. Observer::Transaction.commit
  921. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  922. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  923. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  924. assert_equal('3 high', ticket_p.priority.name, 'ticket_p.priority verify')
  925. assert_equal(2, ticket_p.articles.count, 'ticket_p.articles verify')
  926. #p ticket_p.articles.last.inspect
  927. article_p = ticket_p.articles.last
  928. assert_match('Owner has changed', article_p.subject)
  929. assert_match('Zammad <zammad@localhost>', article_p.from)
  930. assert_match('martin@example.com', article_p.to)
  931. assert_no_match('config\.', article_p.body)
  932. assert_match('http://zammad.example.com', article_p.body)
  933. assert_no_match('ticket.', article_p.body)
  934. assert_match(ticket_p.number, article_p.body)
  935. assert_equal('text/html', article_p.content_type)
  936. # should trigger
  937. trigger1 = Trigger.create_or_update(
  938. name: 'owner update - to customer',
  939. condition: {
  940. 'ticket.owner_id' => {
  941. 'operator' => 'has changed',
  942. 'pre_condition' => 'current_user.id',
  943. 'value' => '',
  944. 'value_completion' => '',
  945. },
  946. 'ticket.priority_id' => {
  947. 'operator' => 'is',
  948. 'value' => Ticket::Priority.lookup(name: '3 high').id.to_s,
  949. },
  950. 'ticket.action' => {
  951. 'operator' => 'is not',
  952. 'value' => 'create',
  953. },
  954. },
  955. perform: {
  956. 'notification.email' => {
  957. 'body' => '<p>The owner of ticket (Ticket##{ticket.number}) has changed.<p>
  958. <br/>
  959. <p>To provide additional information, please reply to this email or click on the following link:
  960. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  961. </p>
  962. <br/>
  963. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  964. 'recipient' => 'ticket_customer',
  965. 'subject' => 'Owner has changed (#{ticket.title})',
  966. },
  967. },
  968. disable_notification: true,
  969. active: true,
  970. created_by_id: 1,
  971. updated_by_id: 1,
  972. )
  973. # process mail without Precedence header
  974. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  975. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  976. assert_equal('aaäöüßad asd', ticket_p.title)
  977. assert_equal('Users', ticket_p.group.name)
  978. assert_equal('new', ticket_p.state.name)
  979. assert_equal(1, ticket_p.articles.count)
  980. article_p = ticket_p.articles.last
  981. Observer::Transaction.commit
  982. assert_equal(1, ticket_p.articles.count)
  983. ticket_p.priority = Ticket::Priority.lookup(name: '1 low')
  984. ticket_p.save!
  985. Observer::Transaction.commit
  986. assert_equal(1, ticket_p.articles.count)
  987. ticket_p.priority = Ticket::Priority.lookup(name: '3 high')
  988. ticket_p.save!
  989. Observer::Transaction.commit
  990. assert_equal(1, ticket_p.articles.count)
  991. ticket_p.owner = agent1
  992. ticket_p.save!
  993. Observer::Transaction.commit
  994. assert_equal('aaäöüßad asd', ticket_p.title, 'ticket_p.title verify')
  995. assert_equal('Users', ticket_p.group.name, 'ticket_p.group verify')
  996. assert_equal('new', ticket_p.state.name, 'ticket_p.state verify')
  997. assert_equal('3 high', ticket_p.priority.name, 'ticket_p.priority verify')
  998. assert_equal(2, ticket_p.articles.count, 'ticket_p.articles verify')
  999. #p ticket_p.articles.last.inspect
  1000. article_p = ticket_p.articles.last
  1001. assert_match('Owner has changed', article_p.subject)
  1002. assert_match('Zammad <zammad@localhost>', article_p.from)
  1003. assert_match('martin@example.com', article_p.to)
  1004. assert_no_match('config\.', article_p.body)
  1005. assert_match('http://zammad.example.com', article_p.body)
  1006. assert_no_match('ticket.', article_p.body)
  1007. assert_match(ticket_p.number, article_p.body)
  1008. assert_equal('text/html', article_p.content_type)
  1009. # should not trigger
  1010. trigger1 = Trigger.create_or_update(
  1011. name: 'owner update - to customer',
  1012. condition: {
  1013. 'ticket.owner_id' => {
  1014. 'operator' => 'has changed',
  1015. 'pre_condition' => 'current_user.id',
  1016. 'value' => '',
  1017. 'value_completion' => '',
  1018. },
  1019. 'ticket.action' => {
  1020. 'operator' => 'is',
  1021. 'value' => 'create',
  1022. },
  1023. },
  1024. perform: {
  1025. 'notification.email' => {
  1026. 'body' => '<p>The owner of ticket (Ticket##{ticket.number}) has changed.<p>
  1027. <br/>
  1028. <p>To provide additional information, please reply to this email or click on the following link:
  1029. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  1030. </p>
  1031. <br/>
  1032. <p><i><a href="http://zammad.com">Zammad</a>, your customer support system</i></p>',
  1033. 'recipient' => 'ticket_customer',
  1034. 'subject' => 'Owner has changed (#{ticket.title})',
  1035. },
  1036. },
  1037. disable_notification: true,
  1038. active: true,
  1039. created_by_id: 1,
  1040. updated_by_id: 1,
  1041. )
  1042. # process mail without Precedence header
  1043. content = IO.binread('test/fixtures/ticket_trigger/mail1.box')
  1044. ticket_p, article_p, user_p, mail = Channel::EmailParser.new.process({}, content)
  1045. assert_equal(1, ticket_p.articles.count)
  1046. Observer::Transaction.commit
  1047. assert_equal(1, ticket_p.articles.count)
  1048. ticket_p.owner = agent1
  1049. ticket_p.save!
  1050. Observer::Transaction.commit
  1051. assert_equal(1, ticket_p.articles.count)
  1052. end
  1053. test '5 notify owner' do
  1054. trigger1 = Trigger.create_or_update(
  1055. name: 'aaa notify mail',
  1056. condition: {
  1057. 'ticket.state_id' => {
  1058. 'operator' => 'is',
  1059. 'value' => Ticket::State.all.pluck(:id),
  1060. },
  1061. 'ticket.action' => {
  1062. 'operator' => 'is',
  1063. 'value' => 'update',
  1064. },
  1065. },
  1066. perform: {
  1067. 'notification.email' => {
  1068. 'body' => 'some lala',
  1069. 'recipient' => 'ticket_owner',
  1070. 'subject' => 'CC NOTE (#{ticket.title})!',
  1071. },
  1072. },
  1073. disable_notification: true,
  1074. active: true,
  1075. created_by_id: 1,
  1076. updated_by_id: 1,
  1077. )
  1078. roles = Role.where(name: 'Agent')
  1079. agent = User.create_or_update(
  1080. login: 'agent@example.com',
  1081. firstname: 'Trigger',
  1082. lastname: 'Agent1',
  1083. email: 'agent@example.com',
  1084. password: 'agentpw',
  1085. active: true,
  1086. roles: roles,
  1087. updated_by_id: 1,
  1088. created_by_id: 1,
  1089. )
  1090. ticket1 = Ticket.create(
  1091. title: 'test 123',
  1092. owner: agent,
  1093. group: Group.lookup(name: 'Users'),
  1094. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1095. updated_by_id: 1,
  1096. created_by_id: 1,
  1097. )
  1098. Ticket::Article.create(
  1099. ticket_id: ticket1.id,
  1100. from: 'some_sender@example.com',
  1101. to: 'some_recipient@example.com',
  1102. subject: 'some subject',
  1103. message_id: 'some@id',
  1104. body: "some message <b>note</b>\nnew line",
  1105. internal: false,
  1106. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1107. type: Ticket::Article::Type.find_by(name: 'note'),
  1108. updated_by_id: 1,
  1109. created_by_id: 1,
  1110. )
  1111. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1112. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1113. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1114. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1115. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1116. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1117. Observer::Transaction.commit
  1118. assert_equal(1, ticket1.articles.count)
  1119. Ticket::Article.create(
  1120. ticket_id: ticket1.id,
  1121. from: 'some_sender@example.com',
  1122. to: 'some_recipient@example.com',
  1123. subject: 'update',
  1124. message_id: 'some@id',
  1125. content_type: 'text/html',
  1126. body: 'update',
  1127. internal: false,
  1128. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1129. type: Ticket::Article::Type.find_by(name: 'note'),
  1130. updated_by_id: 1,
  1131. created_by_id: 1,
  1132. )
  1133. Observer::Transaction.commit
  1134. assert_equal(3, ticket1.articles.count)
  1135. trigger1 = Trigger.create_or_update(
  1136. name: 'aaa notify mail 2',
  1137. condition: {
  1138. 'ticket.state_id' => {
  1139. 'operator' => 'is',
  1140. 'value' => Ticket::State.all.pluck(:id),
  1141. },
  1142. 'ticket.action' => {
  1143. 'operator' => 'is',
  1144. 'value' => 'update',
  1145. },
  1146. },
  1147. perform: {
  1148. 'notification.email' => {
  1149. 'body' => 'some lala',
  1150. 'recipient' => 'ticket_owner',
  1151. 'subject' => 'CC NOTE (#{ticket.title})!',
  1152. },
  1153. },
  1154. disable_notification: true,
  1155. active: true,
  1156. created_by_id: 1,
  1157. updated_by_id: 1,
  1158. )
  1159. Ticket::Article.create(
  1160. ticket_id: ticket1.id,
  1161. from: 'some_sender@example.com',
  1162. to: 'some_recipient@example.com',
  1163. subject: 'update',
  1164. message_id: 'some@id',
  1165. content_type: 'text/html',
  1166. body: 'update',
  1167. internal: false,
  1168. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1169. type: Ticket::Article::Type.find_by(name: 'note'),
  1170. updated_by_id: 1,
  1171. created_by_id: 1,
  1172. )
  1173. Observer::Transaction.commit
  1174. assert_equal(6, ticket1.articles.count)
  1175. end
  1176. test '6 owner auto assignment' do
  1177. trigger1 = Trigger.create_or_update(
  1178. name: 'aaa auto assignment',
  1179. condition: {
  1180. 'ticket.owner_id' => {
  1181. 'operator' => 'is',
  1182. 'pre_condition' => 'not_set',
  1183. 'value' => '',
  1184. 'value_completion' => '',
  1185. },
  1186. 'ticket.action' => {
  1187. 'operator' => 'is',
  1188. 'value' => 'update',
  1189. },
  1190. },
  1191. perform: {
  1192. 'ticket.owner_id' => {
  1193. 'pre_condition' => 'current_user.id',
  1194. 'value' => '',
  1195. 'value_completion' => '',
  1196. },
  1197. },
  1198. disable_notification: true,
  1199. active: true,
  1200. created_by_id: 1,
  1201. updated_by_id: 1,
  1202. )
  1203. roles = Role.where(name: 'Agent')
  1204. agent = User.create_or_update(
  1205. login: 'agent@example.com',
  1206. firstname: 'Trigger',
  1207. lastname: 'Agent1',
  1208. email: 'agent@example.com',
  1209. password: 'agentpw',
  1210. active: true,
  1211. roles: roles,
  1212. updated_by_id: 1,
  1213. created_by_id: 1,
  1214. )
  1215. ticket1 = Ticket.create(
  1216. title: 'test 123',
  1217. #owner: agent,
  1218. group: Group.lookup(name: 'Users'),
  1219. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1220. updated_by_id: 1,
  1221. created_by_id: 1,
  1222. )
  1223. Ticket::Article.create(
  1224. ticket_id: ticket1.id,
  1225. from: 'some_sender@example.com',
  1226. to: 'some_recipient@example.com',
  1227. subject: 'some subject',
  1228. message_id: 'some@id',
  1229. body: "some message <b>note</b>\nnew line",
  1230. internal: false,
  1231. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1232. type: Ticket::Article::Type.find_by(name: 'note'),
  1233. updated_by_id: 1,
  1234. created_by_id: 1,
  1235. )
  1236. Observer::Transaction.commit
  1237. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1238. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1239. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1240. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1241. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1242. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1243. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1244. UserInfo.current_user_id = agent.id
  1245. Ticket::Article.create(
  1246. ticket_id: ticket1.id,
  1247. from: 'some_sender@example.com',
  1248. to: 'some_recipient@example.com',
  1249. subject: 'update',
  1250. message_id: 'some@id',
  1251. content_type: 'text/html',
  1252. body: 'update',
  1253. internal: false,
  1254. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1255. type: Ticket::Article::Type.find_by(name: 'note'),
  1256. )
  1257. Observer::Transaction.commit
  1258. UserInfo.current_user_id = nil
  1259. ticket1.reload
  1260. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1261. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1262. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1263. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1264. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1265. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1266. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1267. UserInfo.current_user_id = agent.id
  1268. ticket1.owner_id = 1
  1269. ticket1.save!
  1270. Observer::Transaction.commit
  1271. UserInfo.current_user_id = nil
  1272. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1273. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1274. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1275. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1276. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1277. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1278. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1279. end
  1280. test '7 owner auto assignment' do
  1281. trigger1 = Trigger.create_or_update(
  1282. name: 'aaa auto assignment',
  1283. condition: {
  1284. 'ticket.owner_id' => {
  1285. 'operator' => 'is',
  1286. 'pre_condition' => 'not_set',
  1287. 'value' => '',
  1288. 'value_completion' => '',
  1289. },
  1290. 'article.type_id' => {
  1291. 'operator' => 'is',
  1292. 'value' => Ticket::Article::Type.find_by(name: 'note'),
  1293. },
  1294. 'article.sender_id' => {
  1295. 'operator' => 'is',
  1296. 'value' => Ticket::Article::Sender.find_by(name: 'Agent'),
  1297. },
  1298. },
  1299. perform: {
  1300. 'ticket.owner_id' => {
  1301. 'pre_condition' => 'current_user.id',
  1302. 'value' => '',
  1303. 'value_completion' => '',
  1304. },
  1305. },
  1306. disable_notification: true,
  1307. active: true,
  1308. created_by_id: 1,
  1309. updated_by_id: 1,
  1310. )
  1311. roles = Role.where(name: 'Agent')
  1312. agent1 = User.create_or_update(
  1313. login: 'agent@example.com',
  1314. firstname: 'Trigger',
  1315. lastname: 'Agent1',
  1316. email: 'agent@example.com',
  1317. password: 'agentpw',
  1318. active: true,
  1319. roles: roles,
  1320. updated_by_id: 1,
  1321. created_by_id: 1,
  1322. )
  1323. agent2 = User.create_or_update(
  1324. login: 'agent@example.com',
  1325. firstname: 'Trigger',
  1326. lastname: 'Agent2',
  1327. email: 'agent@example.com',
  1328. password: 'agentpw',
  1329. active: true,
  1330. roles: roles,
  1331. updated_by_id: 1,
  1332. created_by_id: 1,
  1333. )
  1334. ticket1 = Ticket.create(
  1335. title: 'test 123',
  1336. #owner: agent,
  1337. group: Group.lookup(name: 'Users'),
  1338. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1339. updated_by_id: 1,
  1340. created_by_id: 1,
  1341. )
  1342. Ticket::Article.create(
  1343. ticket_id: ticket1.id,
  1344. from: 'some_sender@example.com',
  1345. to: 'some_recipient@example.com',
  1346. subject: 'some subject',
  1347. message_id: 'some@id',
  1348. body: "some message <b>note</b>\nnew line",
  1349. internal: false,
  1350. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1351. type: Ticket::Article::Type.find_by(name: 'note'),
  1352. updated_by_id: 1,
  1353. created_by_id: 1,
  1354. )
  1355. Observer::Transaction.commit
  1356. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1357. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1358. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1359. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1360. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1361. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1362. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1363. UserInfo.current_user_id = agent1.id
  1364. Ticket::Article.create(
  1365. ticket_id: ticket1.id,
  1366. from: 'some_sender@example.com',
  1367. to: 'some_recipient@example.com',
  1368. subject: 'update',
  1369. message_id: 'some@id',
  1370. content_type: 'text/html',
  1371. body: 'update',
  1372. internal: false,
  1373. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1374. type: Ticket::Article::Type.find_by(name: 'note'),
  1375. )
  1376. Observer::Transaction.commit
  1377. UserInfo.current_user_id = nil
  1378. ticket1.reload
  1379. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1380. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1381. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1382. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1383. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1384. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1385. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1386. UserInfo.current_user_id = agent1.id
  1387. ticket1.owner_id = 1
  1388. ticket1.save!
  1389. Observer::Transaction.commit
  1390. UserInfo.current_user_id = nil
  1391. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1392. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1393. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1394. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1395. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1396. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1397. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1398. UserInfo.current_user_id = agent1.id
  1399. Ticket::Article.create(
  1400. ticket_id: ticket1.id,
  1401. from: 'some_sender@example.com',
  1402. to: 'some_recipient@example.com',
  1403. subject: 'update',
  1404. message_id: 'some@id',
  1405. content_type: 'text/html',
  1406. body: 'update',
  1407. internal: false,
  1408. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  1409. type: Ticket::Article::Type.find_by(name: 'note'),
  1410. )
  1411. Observer::Transaction.commit
  1412. UserInfo.current_user_id = nil
  1413. ticket1.reload
  1414. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1415. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1416. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1417. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1418. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1419. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1420. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1421. UserInfo.current_user_id = agent2.id
  1422. ticket1.owner_id = agent2.id
  1423. ticket1.save!
  1424. Observer::Transaction.commit
  1425. UserInfo.current_user_id = nil
  1426. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1427. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1428. assert_equal(agent2.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1429. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1430. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1431. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1432. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1433. UserInfo.current_user_id = agent1.id
  1434. Ticket::Article.create(
  1435. ticket_id: ticket1.id,
  1436. from: 'some_sender@example.com',
  1437. to: 'some_recipient@example.com',
  1438. subject: 'update',
  1439. message_id: 'some@id',
  1440. content_type: 'text/html',
  1441. body: 'update',
  1442. internal: false,
  1443. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1444. type: Ticket::Article::Type.find_by(name: 'note'),
  1445. )
  1446. Observer::Transaction.commit
  1447. UserInfo.current_user_id = nil
  1448. ticket1.reload
  1449. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1450. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1451. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1452. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1453. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1454. assert_equal(4, ticket1.articles.count, 'ticket1.articles verify')
  1455. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1456. end
  1457. test '8 owner auto assignment' do
  1458. trigger1 = Trigger.create_or_update(
  1459. name: 'aaa auto assignment',
  1460. condition: {
  1461. 'ticket.owner_id' => {
  1462. 'operator' => 'is',
  1463. 'pre_condition' => 'not_set',
  1464. 'value' => '',
  1465. 'value_completion' => '',
  1466. },
  1467. 'ticket.priority_id' => {
  1468. 'operator' => 'has changed',
  1469. 'pre_condition' => '',
  1470. 'value' => '2',
  1471. 'value_completion' => '',
  1472. },
  1473. 'ticket.action' => {
  1474. 'operator' => 'is',
  1475. 'value' => 'update',
  1476. },
  1477. },
  1478. perform: {
  1479. 'ticket.owner_id' => {
  1480. 'pre_condition' => 'current_user.id',
  1481. 'value' => '',
  1482. 'value_completion' => '',
  1483. },
  1484. },
  1485. disable_notification: true,
  1486. active: true,
  1487. created_by_id: 1,
  1488. updated_by_id: 1,
  1489. )
  1490. roles = Role.where(name: 'Agent')
  1491. agent = User.create_or_update(
  1492. login: 'agent@example.com',
  1493. firstname: 'Trigger',
  1494. lastname: 'Agent1',
  1495. email: 'agent@example.com',
  1496. password: 'agentpw',
  1497. active: true,
  1498. roles: roles,
  1499. updated_by_id: 1,
  1500. created_by_id: 1,
  1501. )
  1502. ticket1 = Ticket.create(
  1503. title: 'test 123',
  1504. #owner: agent,
  1505. group: Group.lookup(name: 'Users'),
  1506. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1507. updated_by_id: 1,
  1508. created_by_id: 1,
  1509. )
  1510. Ticket::Article.create(
  1511. ticket_id: ticket1.id,
  1512. from: 'some_sender@example.com',
  1513. to: 'some_recipient@example.com',
  1514. subject: 'some subject',
  1515. message_id: 'some@id',
  1516. body: "some message <b>note</b>\nnew line",
  1517. internal: false,
  1518. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1519. type: Ticket::Article::Type.find_by(name: 'note'),
  1520. updated_by_id: 1,
  1521. created_by_id: 1,
  1522. )
  1523. Observer::Transaction.commit
  1524. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1525. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1526. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1527. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1528. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1529. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1530. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1531. UserInfo.current_user_id = agent.id
  1532. Ticket::Article.create(
  1533. ticket_id: ticket1.id,
  1534. from: 'some_sender@example.com',
  1535. to: 'some_recipient@example.com',
  1536. subject: 'update',
  1537. message_id: 'some@id',
  1538. content_type: 'text/html',
  1539. body: 'update',
  1540. internal: false,
  1541. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1542. type: Ticket::Article::Type.find_by(name: 'note'),
  1543. )
  1544. Observer::Transaction.commit
  1545. UserInfo.current_user_id = nil
  1546. ticket1.reload
  1547. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1548. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1549. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1550. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1551. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1552. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1553. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1554. UserInfo.current_user_id = agent.id
  1555. ticket1.priority = Ticket::Priority.find_by(name: '1 low')
  1556. ticket1.save!
  1557. Observer::Transaction.commit
  1558. UserInfo.current_user_id = nil
  1559. ticket1.reload
  1560. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1561. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1562. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1563. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1564. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1565. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1566. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1567. UserInfo.current_user_id = agent.id
  1568. ticket1.owner_id = 1
  1569. ticket1.save!
  1570. Observer::Transaction.commit
  1571. UserInfo.current_user_id = nil
  1572. ticket1.reload
  1573. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1574. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1575. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1576. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1577. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1578. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1579. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1580. UserInfo.current_user_id = agent.id
  1581. ticket1.owner_id = agent.id
  1582. ticket1.save!
  1583. Observer::Transaction.commit
  1584. UserInfo.current_user_id = nil
  1585. ticket1.reload
  1586. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1587. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1588. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1589. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1590. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1591. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1592. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1593. end
  1594. test '9 vip priority set' do
  1595. trigger1 = Trigger.create_or_update(
  1596. name: 'aaa vip priority',
  1597. condition: {
  1598. 'customer.vip' => {
  1599. 'operator' => 'is',
  1600. 'value' => true,
  1601. },
  1602. },
  1603. perform: {
  1604. 'ticket.priority_id' => {
  1605. 'value' => Ticket::Priority.find_by(name: '3 high').id,
  1606. },
  1607. },
  1608. disable_notification: true,
  1609. active: true,
  1610. created_by_id: 1,
  1611. updated_by_id: 1,
  1612. )
  1613. roles = Role.where(name: 'Agent')
  1614. agent = User.create_or_update(
  1615. login: 'agent@example.com',
  1616. firstname: 'Trigger',
  1617. lastname: 'Agent1',
  1618. email: 'agent@example.com',
  1619. password: 'agentpw',
  1620. active: true,
  1621. roles: roles,
  1622. updated_by_id: 1,
  1623. created_by_id: 1,
  1624. )
  1625. roles = Role.where(name: 'Customer')
  1626. customer = User.create_or_update(
  1627. login: 'customer@example.com',
  1628. firstname: 'Trigger',
  1629. lastname: 'Customer1',
  1630. email: 'customer@example.com',
  1631. password: 'customerpw',
  1632. vip: true,
  1633. active: true,
  1634. roles: roles,
  1635. updated_by_id: 1,
  1636. created_by_id: 1,
  1637. )
  1638. ticket1 = Ticket.create(
  1639. title: 'test 123',
  1640. owner: agent,
  1641. customer: customer,
  1642. group: Group.lookup(name: 'Users'),
  1643. updated_by_id: 1,
  1644. created_by_id: 1,
  1645. )
  1646. Ticket::Article.create(
  1647. ticket_id: ticket1.id,
  1648. from: 'some_sender@example.com',
  1649. to: 'some_recipient@example.com',
  1650. subject: 'some subject',
  1651. message_id: 'some@id',
  1652. body: "some message <b>note</b>\nnew line",
  1653. internal: false,
  1654. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1655. type: Ticket::Article::Type.find_by(name: 'note'),
  1656. updated_by_id: 1,
  1657. created_by_id: 1,
  1658. )
  1659. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1660. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1661. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1662. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1663. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1664. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1665. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1666. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1667. Observer::Transaction.commit
  1668. ticket1.reload
  1669. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1670. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1671. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1672. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1673. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1674. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  1675. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1676. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1677. customer.vip = false
  1678. customer.save!
  1679. ticket2 = Ticket.create(
  1680. title: 'test 123',
  1681. owner: agent,
  1682. customer: customer,
  1683. group: Group.lookup(name: 'Users'),
  1684. updated_by_id: 1,
  1685. created_by_id: 1,
  1686. )
  1687. Ticket::Article.create(
  1688. ticket_id: ticket2.id,
  1689. from: 'some_sender@example.com',
  1690. to: 'some_recipient@example.com',
  1691. subject: 'some subject',
  1692. message_id: 'some@id',
  1693. body: "some message <b>note</b>\nnew line",
  1694. internal: false,
  1695. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1696. type: Ticket::Article::Type.find_by(name: 'note'),
  1697. updated_by_id: 1,
  1698. created_by_id: 1,
  1699. )
  1700. assert_equal('test 123', ticket2.title, 'ticket2.title verify')
  1701. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  1702. assert_equal(agent.id, ticket2.owner_id, 'ticket2.owner_id verify')
  1703. assert_equal(customer.id, ticket2.customer_id, 'ticket2.customer_id verify')
  1704. assert_equal('new', ticket2.state.name, 'ticket2.state verify')
  1705. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  1706. assert_equal(1, ticket2.articles.count, 'ticket2.articles verify')
  1707. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket2.id))
  1708. Observer::Transaction.commit
  1709. ticket2.reload
  1710. assert_equal('test 123', ticket2.title, 'ticket2.title verify')
  1711. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  1712. assert_equal(agent.id, ticket2.owner_id, 'ticket2.owner_id verify')
  1713. assert_equal(customer.id, ticket2.customer_id, 'ticket2.customer_id verify')
  1714. assert_equal('new', ticket2.state.name, 'ticket2.state verify')
  1715. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  1716. assert_equal(1, ticket2.articles.count, 'ticket2.articles verify')
  1717. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket2.id))
  1718. end
  1719. test '10 owner auto assignment notify to customer' do
  1720. trigger1 = Trigger.create_or_update(
  1721. name: 'aaa auto assignment',
  1722. condition: {
  1723. 'ticket.owner_id' => {
  1724. 'operator' => 'has changed',
  1725. 'pre_condition' => '',
  1726. 'value' => '2',
  1727. 'value_completion' => '',
  1728. },
  1729. },
  1730. perform: {
  1731. 'notification.email' => {
  1732. 'body' => 'some lala',
  1733. 'recipient' => 'ticket_customer',
  1734. 'subject' => 'NEW OWNER (#{ticket.title})!',
  1735. },
  1736. },
  1737. disable_notification: true,
  1738. active: true,
  1739. created_by_id: 1,
  1740. updated_by_id: 1,
  1741. )
  1742. roles = Role.where(name: 'Agent')
  1743. agent1 = User.create_or_update(
  1744. login: 'agent1@example.com',
  1745. firstname: 'Trigger',
  1746. lastname: 'Agent1',
  1747. email: 'agent1@example.com',
  1748. password: 'agentpw',
  1749. active: true,
  1750. roles: roles,
  1751. updated_by_id: 1,
  1752. created_by_id: 1,
  1753. )
  1754. agent2 = User.create_or_update(
  1755. login: 'agent2@example.com',
  1756. firstname: 'Trigger',
  1757. lastname: 'Agent2',
  1758. email: 'agent2@example.com',
  1759. password: 'agentpw',
  1760. active: true,
  1761. roles: roles,
  1762. updated_by_id: 1,
  1763. created_by_id: 1,
  1764. )
  1765. ticket1 = Ticket.create(
  1766. title: 'test 123',
  1767. group: Group.lookup(name: 'Users'),
  1768. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1769. updated_by_id: 1,
  1770. created_by_id: 1,
  1771. )
  1772. Ticket::Article.create(
  1773. ticket_id: ticket1.id,
  1774. from: 'some_sender@example.com',
  1775. to: 'some_recipient@example.com',
  1776. subject: 'some subject',
  1777. message_id: 'some@id',
  1778. body: "some message <b>note</b>\nnew line",
  1779. internal: false,
  1780. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1781. type: Ticket::Article::Type.find_by(name: 'note'),
  1782. updated_by_id: 1,
  1783. created_by_id: 1,
  1784. )
  1785. Observer::Transaction.commit
  1786. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1787. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1788. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1789. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1790. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1791. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1792. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1793. UserInfo.current_user_id = agent1.id
  1794. ticket1.owner_id = agent1.id
  1795. ticket1.save!
  1796. Observer::Transaction.commit
  1797. UserInfo.current_user_id = nil
  1798. ticket1.reload
  1799. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1800. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1801. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1802. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1803. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1804. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1805. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1806. UserInfo.current_user_id = agent1.id
  1807. ticket1.owner_id = agent1.id
  1808. ticket1.save!
  1809. Observer::Transaction.commit
  1810. UserInfo.current_user_id = nil
  1811. ticket1.reload
  1812. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1813. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1814. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1815. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1816. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1817. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1818. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1819. UserInfo.current_user_id = agent1.id
  1820. ticket1.owner_id = agent2.id
  1821. ticket1.save!
  1822. Observer::Transaction.commit
  1823. UserInfo.current_user_id = nil
  1824. ticket1.reload
  1825. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1826. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1827. assert_equal(agent2.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1828. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1829. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1830. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1831. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1832. end
  1833. test '11 notify to customer on public note' do
  1834. trigger1 = Trigger.create_or_update(
  1835. name: 'aaa notify to customer on public note',
  1836. condition: {
  1837. 'article.internal' => {
  1838. 'operator' => 'is',
  1839. 'value' => 'false',
  1840. },
  1841. 'article.sender_id' => {
  1842. 'operator' => 'is',
  1843. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  1844. },
  1845. 'article.type_id' => {
  1846. 'operator' => 'is',
  1847. 'value' => [
  1848. Ticket::Article::Type.lookup(name: 'note').id,
  1849. ],
  1850. },
  1851. },
  1852. perform: {
  1853. 'notification.email' => {
  1854. 'body' => 'some lala',
  1855. 'recipient' => 'ticket_customer',
  1856. 'subject' => 'UPDATE (#{ticket.title})!',
  1857. },
  1858. },
  1859. disable_notification: true,
  1860. active: true,
  1861. created_by_id: 1,
  1862. updated_by_id: 1,
  1863. )
  1864. roles = Role.where(name: 'Agent')
  1865. agent = User.create_or_update(
  1866. login: 'agent@example.com',
  1867. firstname: 'Trigger',
  1868. lastname: 'Agent1',
  1869. email: 'agent@example.com',
  1870. password: 'agentpw',
  1871. active: true,
  1872. roles: roles,
  1873. updated_by_id: 1,
  1874. created_by_id: 1,
  1875. )
  1876. roles = Role.where(name: 'Customer')
  1877. customer = User.create_or_update(
  1878. login: 'customer@example.com',
  1879. firstname: 'Trigger',
  1880. lastname: 'Customer1',
  1881. email: 'customer@example.com',
  1882. password: 'customerpw',
  1883. vip: true,
  1884. active: true,
  1885. roles: roles,
  1886. updated_by_id: 1,
  1887. created_by_id: 1,
  1888. )
  1889. ticket1 = Ticket.create(
  1890. title: 'test 123',
  1891. owner: agent,
  1892. customer: customer,
  1893. group: Group.lookup(name: 'Users'),
  1894. updated_by_id: 1,
  1895. created_by_id: 1,
  1896. )
  1897. Ticket::Article.create(
  1898. ticket_id: ticket1.id,
  1899. from: 'some_sender@example.com',
  1900. to: 'some_recipient@example.com',
  1901. subject: 'some subject',
  1902. message_id: 'some@id',
  1903. body: "some message <b>note</b>\nnew line",
  1904. internal: false,
  1905. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1906. type: Ticket::Article::Type.find_by(name: 'note'),
  1907. updated_by_id: 1,
  1908. created_by_id: 1,
  1909. )
  1910. Observer::Transaction.commit
  1911. ticket1.reload
  1912. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1913. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1914. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1915. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1916. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1917. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1918. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1919. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1920. Ticket::Article.create(
  1921. ticket_id: ticket1.id,
  1922. from: 'some_sender@example.com',
  1923. to: 'some_recipient@example.com',
  1924. subject: 'some subject',
  1925. message_id: 'some@id',
  1926. body: "some message <b>note</b>\nnew line",
  1927. internal: true,
  1928. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1929. type: Ticket::Article::Type.find_by(name: 'note'),
  1930. updated_by_id: 1,
  1931. created_by_id: 1,
  1932. )
  1933. Observer::Transaction.commit
  1934. ticket1.reload
  1935. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1936. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1937. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1938. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1939. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1940. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1941. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1942. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1943. Ticket::Article.create(
  1944. ticket_id: ticket1.id,
  1945. from: 'some_sender@example.com',
  1946. to: 'some_recipient@example.com',
  1947. subject: 'some subject',
  1948. message_id: 'some@id',
  1949. body: "some message <b>note</b>\nnew line",
  1950. internal: false,
  1951. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1952. type: Ticket::Article::Type.find_by(name: 'note'),
  1953. updated_by_id: 1,
  1954. created_by_id: 1,
  1955. )
  1956. Observer::Transaction.commit
  1957. ticket1.reload
  1958. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1959. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1960. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1961. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1962. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1963. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1964. assert_equal(5, ticket1.articles.count, 'ticket1.articles verify')
  1965. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1966. ticket1.priority = Ticket::Priority.find_by(name: '3 high')
  1967. ticket1.save!
  1968. article = Ticket::Article.create(
  1969. ticket_id: ticket1.id,
  1970. from: 'some_sender@example.com',
  1971. to: 'some_recipient@example.com',
  1972. subject: 'some subject',
  1973. message_id: 'some@id',
  1974. body: "some message <b>note</b>\nnew line",
  1975. internal: true,
  1976. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1977. type: Ticket::Article::Type.find_by(name: 'note'),
  1978. updated_by_id: 1,
  1979. created_by_id: 1,
  1980. )
  1981. Observer::Transaction.commit
  1982. ticket1.reload
  1983. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1984. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1985. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1986. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1987. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1988. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  1989. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  1990. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  1991. article.internal = false
  1992. article.save!
  1993. Observer::Transaction.commit
  1994. ticket1.reload
  1995. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1996. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1997. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1998. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1999. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2000. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  2001. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  2002. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2003. Ticket::Article.create(
  2004. ticket_id: ticket1.id,
  2005. from: 'some_sender@example.com',
  2006. to: 'some_recipient@example.com',
  2007. subject: 'some subject',
  2008. message_id: 'some@id',
  2009. body: "some message <b>note</b>\nnew line",
  2010. internal: true,
  2011. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2012. type: Ticket::Article::Type.find_by(name: 'note'),
  2013. updated_by_id: 1,
  2014. created_by_id: 1,
  2015. )
  2016. Observer::Transaction.commit
  2017. ticket1.reload
  2018. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2019. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2020. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2021. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2022. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2023. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  2024. assert_equal(7, ticket1.articles.count, 'ticket1.articles verify')
  2025. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2026. end
  2027. test '12 notify on owner change' do
  2028. trigger1 = Trigger.create_or_update(
  2029. name: 'aaa notify to customer on public note',
  2030. condition: {
  2031. 'ticket.owner_id' => {
  2032. 'operator' => 'has changed',
  2033. 'pre_condition' => 'current_user.id',
  2034. 'value' => '',
  2035. 'value_completion' => '',
  2036. }
  2037. },
  2038. perform: {
  2039. 'notification.email' => {
  2040. 'body' => 'some lala',
  2041. 'recipient' => 'ticket_customer',
  2042. 'subject' => 'UPDATE (#{ticket.title})!',
  2043. },
  2044. },
  2045. disable_notification: true,
  2046. active: true,
  2047. created_by_id: 1,
  2048. updated_by_id: 1,
  2049. )
  2050. Trigger.create_or_update(
  2051. name: 'auto reply (on new tickets)',
  2052. condition: {
  2053. 'ticket.action' => {
  2054. 'operator' => 'is',
  2055. 'value' => 'create',
  2056. },
  2057. 'ticket.state_id' => {
  2058. 'operator' => 'is not',
  2059. 'value' => Ticket::State.lookup(name: 'closed').id,
  2060. },
  2061. 'article.type_id' => {
  2062. 'operator' => 'is',
  2063. 'value' => [
  2064. Ticket::Article::Type.lookup(name: 'email').id,
  2065. Ticket::Article::Type.lookup(name: 'phone').id,
  2066. Ticket::Article::Type.lookup(name: 'web').id,
  2067. ],
  2068. },
  2069. 'article.sender_id' => {
  2070. 'operator' => 'is',
  2071. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  2072. },
  2073. },
  2074. perform: {
  2075. 'notification.email' => {
  2076. 'body' => '<div>Your request <b>(#{config.ticket_hook}#{ticket.number})</b> has been received and will be reviewed by our support staff.</div>
  2077. <br/>
  2078. <div>To provide additional information, please reply to this email or click on the following link (for initial login, please request a new password):
  2079. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  2080. </div>
  2081. <br/>
  2082. <div>Your #{config.product_name} Team</div>
  2083. <br/>
  2084. <div><i><a href="https://zammad.com">Zammad</a>, your customer support system</i></div>',
  2085. 'recipient' => 'ticket_customer',
  2086. 'subject' => 'Thanks for your inquiry (#{ticket.title})',
  2087. },
  2088. },
  2089. active: true,
  2090. created_by_id: 1,
  2091. updated_by_id: 1,
  2092. )
  2093. Trigger.create_or_update(
  2094. name: 'auto reply (on follow up of tickets)',
  2095. condition: {
  2096. 'ticket.action' => {
  2097. 'operator' => 'is',
  2098. 'value' => 'update',
  2099. },
  2100. 'article.sender_id' => {
  2101. 'operator' => 'is',
  2102. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  2103. },
  2104. 'article.type_id' => {
  2105. 'operator' => 'is',
  2106. 'value' => [
  2107. Ticket::Article::Type.lookup(name: 'email').id,
  2108. Ticket::Article::Type.lookup(name: 'phone').id,
  2109. Ticket::Article::Type.lookup(name: 'web').id,
  2110. ],
  2111. },
  2112. },
  2113. perform: {
  2114. 'notification.email' => {
  2115. 'body' => '<div>Your follow up for <b>(#{config.ticket_hook}#{ticket.number})</b> has been received and will be reviewed by our support staff.</div>
  2116. <br/>
  2117. <div>To provide additional information, please reply to this email or click on the following link:
  2118. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  2119. </div>
  2120. <br/>
  2121. <div>Your #{config.product_name} Team</div>
  2122. <br/>
  2123. <div><i><a href="https://zammad.com">Zammad</a>, your customer support system</i></div>',
  2124. 'recipient' => 'ticket_customer',
  2125. 'subject' => 'Thanks for your follow up (#{ticket.title})',
  2126. },
  2127. },
  2128. active: true,
  2129. created_by_id: 1,
  2130. updated_by_id: 1,
  2131. )
  2132. roles = Role.where(name: 'Agent')
  2133. agent = User.create_or_update(
  2134. login: 'agent@example.com',
  2135. firstname: 'Trigger',
  2136. lastname: 'Agent1',
  2137. email: 'agent@example.com',
  2138. password: 'agentpw',
  2139. active: true,
  2140. roles: roles,
  2141. updated_by_id: 1,
  2142. created_by_id: 1,
  2143. )
  2144. roles = Role.where(name: 'Customer')
  2145. customer = User.create_or_update(
  2146. login: 'customer@example.com',
  2147. firstname: 'Trigger',
  2148. lastname: 'Customer1',
  2149. email: 'customer@example.com',
  2150. password: 'customerpw',
  2151. vip: true,
  2152. active: true,
  2153. roles: roles,
  2154. updated_by_id: 1,
  2155. created_by_id: 1,
  2156. )
  2157. ticket1 = Ticket.create(
  2158. title: 'test 123',
  2159. #owner: agent,
  2160. customer: customer,
  2161. group: Group.lookup(name: 'Users'),
  2162. updated_by_id: 1,
  2163. created_by_id: 1,
  2164. )
  2165. Ticket::Article.create(
  2166. ticket_id: ticket1.id,
  2167. from: 'some_sender@example.com',
  2168. to: 'some_recipient@example.com',
  2169. subject: 'some subject',
  2170. message_id: 'some@id',
  2171. body: "some message <b>note</b>\nnew line",
  2172. internal: false,
  2173. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2174. type: Ticket::Article::Type.find_by(name: 'web'),
  2175. updated_by_id: 1,
  2176. created_by_id: 1,
  2177. )
  2178. Observer::Transaction.commit
  2179. ticket1.reload
  2180. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2181. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2182. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  2183. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2184. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2185. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2186. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2187. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2188. UserInfo.current_user_id = agent.id
  2189. ticket1.owner_id = agent.id
  2190. ticket1.save!
  2191. Observer::Transaction.commit
  2192. UserInfo.current_user_id = nil
  2193. ticket1.reload
  2194. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2195. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2196. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2197. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2198. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2199. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2200. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  2201. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2202. Ticket::Article.create(
  2203. ticket_id: ticket1.id,
  2204. from: 'some_sender@example.com',
  2205. to: 'some_recipient@example.com',
  2206. subject: 'some subject',
  2207. message_id: 'some@id',
  2208. body: "some message <b>note</b>\nnew line",
  2209. internal: false,
  2210. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2211. type: Ticket::Article::Type.find_by(name: 'web'),
  2212. updated_by_id: 1,
  2213. created_by_id: 1,
  2214. )
  2215. Observer::Transaction.commit
  2216. ticket1.reload
  2217. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2218. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2219. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2220. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2221. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2222. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2223. assert_equal(5, ticket1.articles.count, 'ticket1.articles verify')
  2224. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2225. UserInfo.current_user_id = agent.id
  2226. ticket1.owner_id = 1
  2227. ticket1.save!
  2228. Observer::Transaction.commit
  2229. UserInfo.current_user_id = nil
  2230. ticket1.reload
  2231. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2232. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2233. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  2234. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2235. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2236. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2237. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  2238. assert_equal([], Tag.tag_list(object: 'Ticket', o_id: ticket1.id))
  2239. end
  2240. end