ticket_trigger_test.rb 116 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370
  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([], ticket1.tag_list)
  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), ticket1.tag_list)
  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), ticket1.tag_list)
  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), ticket1.tag_list)
  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), ticket1.tag_list)
  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([], ticket2.tag_list)
  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([], ticket2.tag_list)
  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([], ticket3.tag_list)
  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), ticket3.tag_list)
  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), ticket3.tag_list)
  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), ticket3.tag_list)
  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), ticket3.tag_list)
  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([], ticket1.tag_list)
  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([], ticket1.tag_list)
  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([], ticket1.tag_list)
  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([], ticket1.tag_list)
  1279. end
  1280. test '6.1 owner auto assignment based on organization' do
  1281. trigger1 = Trigger.create_or_update(
  1282. name: 'aaa auto assignment',
  1283. condition: {
  1284. 'ticket.organization_id' => {
  1285. 'operator' => 'is not',
  1286. 'pre_condition' => 'not_set',
  1287. 'value' => '',
  1288. 'value_completion' => '',
  1289. },
  1290. 'ticket.action' => {
  1291. 'operator' => 'is',
  1292. 'value' => 'update',
  1293. },
  1294. },
  1295. perform: {
  1296. 'ticket.owner_id' => {
  1297. 'pre_condition' => 'current_user.id',
  1298. 'value' => '',
  1299. 'value_completion' => '',
  1300. },
  1301. },
  1302. disable_notification: true,
  1303. active: true,
  1304. created_by_id: 1,
  1305. updated_by_id: 1,
  1306. )
  1307. roles = Role.where(name: 'Agent')
  1308. agent = User.create_or_update(
  1309. login: 'agent@example.com',
  1310. firstname: 'Trigger',
  1311. lastname: 'Agent1',
  1312. email: 'agent@example.com',
  1313. password: 'agentpw',
  1314. active: true,
  1315. roles: roles,
  1316. updated_by_id: 1,
  1317. created_by_id: 1,
  1318. )
  1319. roles = Role.where(name: 'Customer')
  1320. customer = User.create_or_update(
  1321. login: 'customer@example.com',
  1322. firstname: 'Trigger',
  1323. lastname: 'Customer1',
  1324. email: 'customer@example.com',
  1325. password: 'customerpw',
  1326. vip: true,
  1327. active: true,
  1328. roles: roles,
  1329. updated_by_id: 1,
  1330. created_by_id: 1,
  1331. )
  1332. ticket1 = Ticket.create(
  1333. title: 'test 123',
  1334. group: Group.lookup(name: 'Users'),
  1335. customer: customer,
  1336. updated_by_id: 1,
  1337. created_by_id: 1,
  1338. )
  1339. Ticket::Article.create(
  1340. ticket_id: ticket1.id,
  1341. from: 'some_sender@example.com',
  1342. to: 'some_recipient@example.com',
  1343. subject: 'some subject',
  1344. message_id: 'some@id',
  1345. body: "some message <b>note</b>\nnew line",
  1346. internal: false,
  1347. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1348. type: Ticket::Article::Type.find_by(name: 'note'),
  1349. updated_by_id: 1,
  1350. created_by_id: 1,
  1351. )
  1352. Observer::Transaction.commit
  1353. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1354. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1355. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1356. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1357. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1358. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1359. assert_equal([], ticket1.tag_list)
  1360. ticket1.update_attribute(:customer, User.lookup(email: 'nicole.braun@zammad.org') )
  1361. UserInfo.current_user_id = agent.id
  1362. Ticket::Article.create(
  1363. ticket_id: ticket1.id,
  1364. from: 'some_sender@example.com',
  1365. to: 'some_recipient@example.com',
  1366. subject: 'update',
  1367. message_id: 'some@id',
  1368. content_type: 'text/html',
  1369. body: 'update',
  1370. internal: false,
  1371. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1372. type: Ticket::Article::Type.find_by(name: 'note'),
  1373. )
  1374. Observer::Transaction.commit
  1375. UserInfo.current_user_id = nil
  1376. ticket1.reload
  1377. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1378. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1379. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1380. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1381. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1382. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1383. assert_equal([], ticket1.tag_list)
  1384. end
  1385. test '6.2 owner auto assignment based on organization' do
  1386. trigger1 = Trigger.create_or_update(
  1387. name: 'aaa auto assignment',
  1388. condition: {
  1389. 'ticket.organization_id' => {
  1390. 'operator' => 'is',
  1391. 'pre_condition' => 'not_set',
  1392. 'value' => '',
  1393. 'value_completion' => '',
  1394. },
  1395. 'ticket.action' => {
  1396. 'operator' => 'is',
  1397. 'value' => 'update',
  1398. },
  1399. },
  1400. perform: {
  1401. 'ticket.owner_id' => {
  1402. 'pre_condition' => 'current_user.id',
  1403. 'value' => '',
  1404. 'value_completion' => '',
  1405. },
  1406. },
  1407. disable_notification: true,
  1408. active: true,
  1409. created_by_id: 1,
  1410. updated_by_id: 1,
  1411. )
  1412. roles = Role.where(name: 'Agent')
  1413. agent = User.create_or_update(
  1414. login: 'agent@example.com',
  1415. firstname: 'Trigger',
  1416. lastname: 'Agent1',
  1417. email: 'agent@example.com',
  1418. password: 'agentpw',
  1419. active: true,
  1420. roles: roles,
  1421. updated_by_id: 1,
  1422. created_by_id: 1,
  1423. )
  1424. roles = Role.where(name: 'Customer')
  1425. customer = User.create_or_update(
  1426. login: 'customer@example.com',
  1427. firstname: 'Trigger',
  1428. lastname: 'Customer1',
  1429. email: 'customer@example.com',
  1430. password: 'customerpw',
  1431. vip: true,
  1432. active: true,
  1433. roles: roles,
  1434. updated_by_id: 1,
  1435. created_by_id: 1,
  1436. )
  1437. ticket1 = Ticket.create(
  1438. title: 'test 123',
  1439. group: Group.lookup(name: 'Users'),
  1440. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1441. updated_by_id: 1,
  1442. created_by_id: 1,
  1443. )
  1444. Ticket::Article.create(
  1445. ticket_id: ticket1.id,
  1446. from: 'some_sender@example.com',
  1447. to: 'some_recipient@example.com',
  1448. subject: 'some subject',
  1449. message_id: 'some@id',
  1450. body: "some message <b>note</b>\nnew line",
  1451. internal: false,
  1452. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1453. type: Ticket::Article::Type.find_by(name: 'note'),
  1454. updated_by_id: 1,
  1455. created_by_id: 1,
  1456. )
  1457. Observer::Transaction.commit
  1458. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1459. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1460. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1461. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1462. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1463. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1464. assert_equal([], ticket1.tag_list)
  1465. ticket1.update_attribute(:customer, customer )
  1466. UserInfo.current_user_id = agent.id
  1467. Ticket::Article.create(
  1468. ticket_id: ticket1.id,
  1469. from: 'some_sender@example.com',
  1470. to: 'some_recipient@example.com',
  1471. subject: 'update',
  1472. message_id: 'some@id',
  1473. content_type: 'text/html',
  1474. body: 'update',
  1475. internal: false,
  1476. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1477. type: Ticket::Article::Type.find_by(name: 'note'),
  1478. )
  1479. Observer::Transaction.commit
  1480. UserInfo.current_user_id = nil
  1481. ticket1.reload
  1482. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1483. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1484. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1485. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1486. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1487. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1488. assert_equal([], ticket1.tag_list)
  1489. end
  1490. test '7 owner auto assignment' do
  1491. trigger1 = Trigger.create_or_update(
  1492. name: 'aaa auto assignment',
  1493. condition: {
  1494. 'ticket.owner_id' => {
  1495. 'operator' => 'is',
  1496. 'pre_condition' => 'not_set',
  1497. 'value' => '',
  1498. 'value_completion' => '',
  1499. },
  1500. 'article.type_id' => {
  1501. 'operator' => 'is',
  1502. 'value' => Ticket::Article::Type.find_by(name: 'note'),
  1503. },
  1504. 'article.sender_id' => {
  1505. 'operator' => 'is',
  1506. 'value' => Ticket::Article::Sender.find_by(name: 'Agent'),
  1507. },
  1508. },
  1509. perform: {
  1510. 'ticket.owner_id' => {
  1511. 'pre_condition' => 'current_user.id',
  1512. 'value' => '',
  1513. 'value_completion' => '',
  1514. },
  1515. },
  1516. disable_notification: true,
  1517. active: true,
  1518. created_by_id: 1,
  1519. updated_by_id: 1,
  1520. )
  1521. roles = Role.where(name: 'Agent')
  1522. agent1 = User.create_or_update(
  1523. login: 'agent@example.com',
  1524. firstname: 'Trigger',
  1525. lastname: 'Agent1',
  1526. email: 'agent@example.com',
  1527. password: 'agentpw',
  1528. active: true,
  1529. roles: roles,
  1530. updated_by_id: 1,
  1531. created_by_id: 1,
  1532. )
  1533. agent2 = User.create_or_update(
  1534. login: 'agent@example.com',
  1535. firstname: 'Trigger',
  1536. lastname: 'Agent2',
  1537. email: 'agent@example.com',
  1538. password: 'agentpw',
  1539. active: true,
  1540. roles: roles,
  1541. updated_by_id: 1,
  1542. created_by_id: 1,
  1543. )
  1544. ticket1 = Ticket.create(
  1545. title: 'test 123',
  1546. #owner: agent,
  1547. group: Group.lookup(name: 'Users'),
  1548. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1549. updated_by_id: 1,
  1550. created_by_id: 1,
  1551. )
  1552. Ticket::Article.create(
  1553. ticket_id: ticket1.id,
  1554. from: 'some_sender@example.com',
  1555. to: 'some_recipient@example.com',
  1556. subject: 'some subject',
  1557. message_id: 'some@id',
  1558. body: "some message <b>note</b>\nnew line",
  1559. internal: false,
  1560. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1561. type: Ticket::Article::Type.find_by(name: 'note'),
  1562. updated_by_id: 1,
  1563. created_by_id: 1,
  1564. )
  1565. Observer::Transaction.commit
  1566. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1567. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1568. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1569. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1570. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1571. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1572. assert_equal([], ticket1.tag_list)
  1573. UserInfo.current_user_id = agent1.id
  1574. Ticket::Article.create(
  1575. ticket_id: ticket1.id,
  1576. from: 'some_sender@example.com',
  1577. to: 'some_recipient@example.com',
  1578. subject: 'update',
  1579. message_id: 'some@id',
  1580. content_type: 'text/html',
  1581. body: 'update',
  1582. internal: false,
  1583. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1584. type: Ticket::Article::Type.find_by(name: 'note'),
  1585. )
  1586. Observer::Transaction.commit
  1587. UserInfo.current_user_id = nil
  1588. ticket1.reload
  1589. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1590. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1591. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1592. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1593. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1594. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1595. assert_equal([], ticket1.tag_list)
  1596. UserInfo.current_user_id = agent1.id
  1597. ticket1.owner_id = 1
  1598. ticket1.save!
  1599. Observer::Transaction.commit
  1600. UserInfo.current_user_id = nil
  1601. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1602. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1603. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1604. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1605. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1606. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1607. assert_equal([], ticket1.tag_list)
  1608. UserInfo.current_user_id = agent1.id
  1609. Ticket::Article.create(
  1610. ticket_id: ticket1.id,
  1611. from: 'some_sender@example.com',
  1612. to: 'some_recipient@example.com',
  1613. subject: 'update',
  1614. message_id: 'some@id',
  1615. content_type: 'text/html',
  1616. body: 'update',
  1617. internal: false,
  1618. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  1619. type: Ticket::Article::Type.find_by(name: 'note'),
  1620. )
  1621. Observer::Transaction.commit
  1622. UserInfo.current_user_id = nil
  1623. ticket1.reload
  1624. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1625. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1626. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1627. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1628. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1629. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1630. assert_equal([], ticket1.tag_list)
  1631. UserInfo.current_user_id = agent2.id
  1632. ticket1.owner_id = agent2.id
  1633. ticket1.save!
  1634. Observer::Transaction.commit
  1635. UserInfo.current_user_id = nil
  1636. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1637. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1638. assert_equal(agent2.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1639. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1640. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1641. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  1642. assert_equal([], ticket1.tag_list)
  1643. UserInfo.current_user_id = agent1.id
  1644. Ticket::Article.create(
  1645. ticket_id: ticket1.id,
  1646. from: 'some_sender@example.com',
  1647. to: 'some_recipient@example.com',
  1648. subject: 'update',
  1649. message_id: 'some@id',
  1650. content_type: 'text/html',
  1651. body: 'update',
  1652. internal: false,
  1653. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1654. type: Ticket::Article::Type.find_by(name: 'note'),
  1655. )
  1656. Observer::Transaction.commit
  1657. UserInfo.current_user_id = nil
  1658. ticket1.reload
  1659. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1660. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1661. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1662. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1663. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1664. assert_equal(4, ticket1.articles.count, 'ticket1.articles verify')
  1665. assert_equal([], ticket1.tag_list)
  1666. end
  1667. test '8 owner auto assignment' do
  1668. trigger1 = Trigger.create_or_update(
  1669. name: 'aaa auto assignment',
  1670. condition: {
  1671. 'ticket.owner_id' => {
  1672. 'operator' => 'is',
  1673. 'pre_condition' => 'not_set',
  1674. 'value' => '',
  1675. 'value_completion' => '',
  1676. },
  1677. 'ticket.priority_id' => {
  1678. 'operator' => 'has changed',
  1679. 'pre_condition' => '',
  1680. 'value' => '2',
  1681. 'value_completion' => '',
  1682. },
  1683. 'ticket.action' => {
  1684. 'operator' => 'is',
  1685. 'value' => 'update',
  1686. },
  1687. },
  1688. perform: {
  1689. 'ticket.owner_id' => {
  1690. 'pre_condition' => 'current_user.id',
  1691. 'value' => '',
  1692. 'value_completion' => '',
  1693. },
  1694. },
  1695. disable_notification: true,
  1696. active: true,
  1697. created_by_id: 1,
  1698. updated_by_id: 1,
  1699. )
  1700. roles = Role.where(name: 'Agent')
  1701. agent = User.create_or_update(
  1702. login: 'agent@example.com',
  1703. firstname: 'Trigger',
  1704. lastname: 'Agent1',
  1705. email: 'agent@example.com',
  1706. password: 'agentpw',
  1707. active: true,
  1708. roles: roles,
  1709. updated_by_id: 1,
  1710. created_by_id: 1,
  1711. )
  1712. ticket1 = Ticket.create(
  1713. title: 'test 123',
  1714. #owner: agent,
  1715. group: Group.lookup(name: 'Users'),
  1716. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1717. updated_by_id: 1,
  1718. created_by_id: 1,
  1719. )
  1720. Ticket::Article.create(
  1721. ticket_id: ticket1.id,
  1722. from: 'some_sender@example.com',
  1723. to: 'some_recipient@example.com',
  1724. subject: 'some subject',
  1725. message_id: 'some@id',
  1726. body: "some message <b>note</b>\nnew line",
  1727. internal: false,
  1728. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1729. type: Ticket::Article::Type.find_by(name: 'note'),
  1730. updated_by_id: 1,
  1731. created_by_id: 1,
  1732. )
  1733. Observer::Transaction.commit
  1734. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1735. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1736. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1737. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1738. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1739. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1740. assert_equal([], ticket1.tag_list)
  1741. UserInfo.current_user_id = agent.id
  1742. Ticket::Article.create(
  1743. ticket_id: ticket1.id,
  1744. from: 'some_sender@example.com',
  1745. to: 'some_recipient@example.com',
  1746. subject: 'update',
  1747. message_id: 'some@id',
  1748. content_type: 'text/html',
  1749. body: 'update',
  1750. internal: false,
  1751. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1752. type: Ticket::Article::Type.find_by(name: 'note'),
  1753. )
  1754. Observer::Transaction.commit
  1755. UserInfo.current_user_id = nil
  1756. ticket1.reload
  1757. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1758. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1759. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1760. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1761. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1762. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1763. assert_equal([], ticket1.tag_list)
  1764. UserInfo.current_user_id = agent.id
  1765. ticket1.priority = Ticket::Priority.find_by(name: '1 low')
  1766. ticket1.save!
  1767. Observer::Transaction.commit
  1768. UserInfo.current_user_id = nil
  1769. ticket1.reload
  1770. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1771. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1772. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1773. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1774. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1775. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1776. assert_equal([], ticket1.tag_list)
  1777. UserInfo.current_user_id = agent.id
  1778. ticket1.owner_id = 1
  1779. ticket1.save!
  1780. Observer::Transaction.commit
  1781. UserInfo.current_user_id = nil
  1782. ticket1.reload
  1783. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1784. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1785. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1786. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1787. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1788. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1789. assert_equal([], ticket1.tag_list)
  1790. UserInfo.current_user_id = agent.id
  1791. ticket1.owner_id = agent.id
  1792. ticket1.save!
  1793. Observer::Transaction.commit
  1794. UserInfo.current_user_id = nil
  1795. ticket1.reload
  1796. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1797. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1798. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1799. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1800. assert_equal('1 low', ticket1.priority.name, 'ticket1.priority verify')
  1801. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  1802. assert_equal([], ticket1.tag_list)
  1803. end
  1804. test '9 vip priority set' do
  1805. trigger1 = Trigger.create_or_update(
  1806. name: 'aaa vip priority',
  1807. condition: {
  1808. 'customer.vip' => {
  1809. 'operator' => 'is',
  1810. 'value' => true,
  1811. },
  1812. },
  1813. perform: {
  1814. 'ticket.priority_id' => {
  1815. 'value' => Ticket::Priority.find_by(name: '3 high').id,
  1816. },
  1817. },
  1818. disable_notification: true,
  1819. active: true,
  1820. created_by_id: 1,
  1821. updated_by_id: 1,
  1822. )
  1823. roles = Role.where(name: 'Agent')
  1824. agent = User.create_or_update(
  1825. login: 'agent@example.com',
  1826. firstname: 'Trigger',
  1827. lastname: 'Agent1',
  1828. email: 'agent@example.com',
  1829. password: 'agentpw',
  1830. active: true,
  1831. roles: roles,
  1832. updated_by_id: 1,
  1833. created_by_id: 1,
  1834. )
  1835. roles = Role.where(name: 'Customer')
  1836. customer = User.create_or_update(
  1837. login: 'customer@example.com',
  1838. firstname: 'Trigger',
  1839. lastname: 'Customer1',
  1840. email: 'customer@example.com',
  1841. password: 'customerpw',
  1842. vip: true,
  1843. active: true,
  1844. roles: roles,
  1845. updated_by_id: 1,
  1846. created_by_id: 1,
  1847. )
  1848. ticket1 = Ticket.create(
  1849. title: 'test 123',
  1850. owner: agent,
  1851. customer: customer,
  1852. group: Group.lookup(name: 'Users'),
  1853. updated_by_id: 1,
  1854. created_by_id: 1,
  1855. )
  1856. Ticket::Article.create(
  1857. ticket_id: ticket1.id,
  1858. from: 'some_sender@example.com',
  1859. to: 'some_recipient@example.com',
  1860. subject: 'some subject',
  1861. message_id: 'some@id',
  1862. body: "some message <b>note</b>\nnew line",
  1863. internal: false,
  1864. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1865. type: Ticket::Article::Type.find_by(name: 'note'),
  1866. updated_by_id: 1,
  1867. created_by_id: 1,
  1868. )
  1869. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1870. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1871. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1872. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1873. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1874. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  1875. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1876. assert_equal([], ticket1.tag_list)
  1877. Observer::Transaction.commit
  1878. ticket1.reload
  1879. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1880. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1881. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  1882. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  1883. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  1884. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  1885. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  1886. assert_equal([], ticket1.tag_list)
  1887. customer.vip = false
  1888. customer.save!
  1889. ticket2 = 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: ticket2.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. assert_equal('test 123', ticket2.title, 'ticket2.title verify')
  1911. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  1912. assert_equal(agent.id, ticket2.owner_id, 'ticket2.owner_id verify')
  1913. assert_equal(customer.id, ticket2.customer_id, 'ticket2.customer_id verify')
  1914. assert_equal('new', ticket2.state.name, 'ticket2.state verify')
  1915. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  1916. assert_equal(1, ticket2.articles.count, 'ticket2.articles verify')
  1917. assert_equal([], ticket2.tag_list)
  1918. Observer::Transaction.commit
  1919. ticket2.reload
  1920. assert_equal('test 123', ticket2.title, 'ticket2.title verify')
  1921. assert_equal('Users', ticket2.group.name, 'ticket2.group verify')
  1922. assert_equal(agent.id, ticket2.owner_id, 'ticket2.owner_id verify')
  1923. assert_equal(customer.id, ticket2.customer_id, 'ticket2.customer_id verify')
  1924. assert_equal('new', ticket2.state.name, 'ticket2.state verify')
  1925. assert_equal('2 normal', ticket2.priority.name, 'ticket2.priority verify')
  1926. assert_equal(1, ticket2.articles.count, 'ticket2.articles verify')
  1927. assert_equal([], ticket2.tag_list)
  1928. end
  1929. test '10 owner auto assignment notify to customer' do
  1930. trigger1 = Trigger.create_or_update(
  1931. name: 'aaa auto assignment',
  1932. condition: {
  1933. 'ticket.owner_id' => {
  1934. 'operator' => 'has changed',
  1935. 'pre_condition' => '',
  1936. 'value' => '2',
  1937. 'value_completion' => '',
  1938. },
  1939. },
  1940. perform: {
  1941. 'notification.email' => {
  1942. 'body' => 'some lala',
  1943. 'recipient' => 'ticket_customer',
  1944. 'subject' => 'NEW OWNER (#{ticket.title})!',
  1945. },
  1946. },
  1947. disable_notification: true,
  1948. active: true,
  1949. created_by_id: 1,
  1950. updated_by_id: 1,
  1951. )
  1952. roles = Role.where(name: 'Agent')
  1953. agent1 = User.create_or_update(
  1954. login: 'agent1@example.com',
  1955. firstname: 'Trigger',
  1956. lastname: 'Agent1',
  1957. email: 'agent1@example.com',
  1958. password: 'agentpw',
  1959. active: true,
  1960. roles: roles,
  1961. updated_by_id: 1,
  1962. created_by_id: 1,
  1963. )
  1964. agent2 = User.create_or_update(
  1965. login: 'agent2@example.com',
  1966. firstname: 'Trigger',
  1967. lastname: 'Agent2',
  1968. email: 'agent2@example.com',
  1969. password: 'agentpw',
  1970. active: true,
  1971. roles: roles,
  1972. updated_by_id: 1,
  1973. created_by_id: 1,
  1974. )
  1975. ticket1 = Ticket.create(
  1976. title: 'test 123',
  1977. group: Group.lookup(name: 'Users'),
  1978. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  1979. updated_by_id: 1,
  1980. created_by_id: 1,
  1981. )
  1982. Ticket::Article.create(
  1983. ticket_id: ticket1.id,
  1984. from: 'some_sender@example.com',
  1985. to: 'some_recipient@example.com',
  1986. subject: 'some subject',
  1987. message_id: 'some@id',
  1988. body: "some message <b>note</b>\nnew line",
  1989. internal: false,
  1990. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  1991. type: Ticket::Article::Type.find_by(name: 'note'),
  1992. updated_by_id: 1,
  1993. created_by_id: 1,
  1994. )
  1995. Observer::Transaction.commit
  1996. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  1997. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  1998. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  1999. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2000. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2001. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  2002. assert_equal([], ticket1.tag_list)
  2003. UserInfo.current_user_id = agent1.id
  2004. ticket1.owner_id = agent1.id
  2005. ticket1.save!
  2006. Observer::Transaction.commit
  2007. UserInfo.current_user_id = nil
  2008. ticket1.reload
  2009. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2010. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2011. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2012. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2013. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2014. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2015. assert_equal([], ticket1.tag_list)
  2016. UserInfo.current_user_id = agent1.id
  2017. ticket1.owner_id = agent1.id
  2018. ticket1.save!
  2019. Observer::Transaction.commit
  2020. UserInfo.current_user_id = nil
  2021. ticket1.reload
  2022. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2023. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2024. assert_equal(agent1.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2025. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2026. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2027. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2028. assert_equal([], ticket1.tag_list)
  2029. UserInfo.current_user_id = agent1.id
  2030. ticket1.owner_id = agent2.id
  2031. ticket1.save!
  2032. Observer::Transaction.commit
  2033. UserInfo.current_user_id = nil
  2034. ticket1.reload
  2035. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2036. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2037. assert_equal(agent2.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2038. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2039. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2040. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  2041. assert_equal([], ticket1.tag_list)
  2042. end
  2043. test '11 notify to customer on public note' do
  2044. trigger1 = Trigger.create_or_update(
  2045. name: 'aaa notify to customer on public note',
  2046. condition: {
  2047. 'article.internal' => {
  2048. 'operator' => 'is',
  2049. 'value' => 'false',
  2050. },
  2051. 'article.sender_id' => {
  2052. 'operator' => 'is',
  2053. 'value' => Ticket::Article::Sender.lookup(name: 'Agent').id,
  2054. },
  2055. 'article.type_id' => {
  2056. 'operator' => 'is',
  2057. 'value' => [
  2058. Ticket::Article::Type.lookup(name: 'note').id,
  2059. ],
  2060. },
  2061. },
  2062. perform: {
  2063. 'notification.email' => {
  2064. 'body' => 'some lala',
  2065. 'recipient' => 'ticket_customer',
  2066. 'subject' => 'UPDATE (#{ticket.title})!',
  2067. },
  2068. },
  2069. disable_notification: true,
  2070. active: true,
  2071. created_by_id: 1,
  2072. updated_by_id: 1,
  2073. )
  2074. roles = Role.where(name: 'Agent')
  2075. agent = User.create_or_update(
  2076. login: 'agent@example.com',
  2077. firstname: 'Trigger',
  2078. lastname: 'Agent1',
  2079. email: 'agent@example.com',
  2080. password: 'agentpw',
  2081. active: true,
  2082. roles: roles,
  2083. updated_by_id: 1,
  2084. created_by_id: 1,
  2085. )
  2086. roles = Role.where(name: 'Customer')
  2087. customer = User.create_or_update(
  2088. login: 'customer@example.com',
  2089. firstname: 'Trigger',
  2090. lastname: 'Customer1',
  2091. email: 'customer@example.com',
  2092. password: 'customerpw',
  2093. vip: true,
  2094. active: true,
  2095. roles: roles,
  2096. updated_by_id: 1,
  2097. created_by_id: 1,
  2098. )
  2099. ticket1 = Ticket.create(
  2100. title: 'test 123',
  2101. owner: agent,
  2102. customer: customer,
  2103. group: Group.lookup(name: 'Users'),
  2104. updated_by_id: 1,
  2105. created_by_id: 1,
  2106. )
  2107. Ticket::Article.create(
  2108. ticket_id: ticket1.id,
  2109. from: 'some_sender@example.com',
  2110. to: 'some_recipient@example.com',
  2111. subject: 'some subject',
  2112. message_id: 'some@id',
  2113. body: "some message <b>note</b>\nnew line",
  2114. internal: false,
  2115. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2116. type: Ticket::Article::Type.find_by(name: 'note'),
  2117. updated_by_id: 1,
  2118. created_by_id: 1,
  2119. )
  2120. Observer::Transaction.commit
  2121. ticket1.reload
  2122. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2123. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2124. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2125. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2126. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2127. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2128. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2129. assert_equal([], ticket1.tag_list)
  2130. Ticket::Article.create(
  2131. ticket_id: ticket1.id,
  2132. from: 'some_sender@example.com',
  2133. to: 'some_recipient@example.com',
  2134. subject: 'some subject',
  2135. message_id: 'some@id',
  2136. body: "some message <b>note</b>\nnew line",
  2137. internal: true,
  2138. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2139. type: Ticket::Article::Type.find_by(name: 'note'),
  2140. updated_by_id: 1,
  2141. created_by_id: 1,
  2142. )
  2143. Observer::Transaction.commit
  2144. ticket1.reload
  2145. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2146. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2147. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2148. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2149. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2150. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2151. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  2152. assert_equal([], ticket1.tag_list)
  2153. Ticket::Article.create(
  2154. ticket_id: ticket1.id,
  2155. from: 'some_sender@example.com',
  2156. to: 'some_recipient@example.com',
  2157. subject: 'some subject',
  2158. message_id: 'some@id',
  2159. body: "some message <b>note</b>\nnew line",
  2160. internal: false,
  2161. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2162. type: Ticket::Article::Type.find_by(name: 'note'),
  2163. updated_by_id: 1,
  2164. created_by_id: 1,
  2165. )
  2166. Observer::Transaction.commit
  2167. ticket1.reload
  2168. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2169. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2170. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2171. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2172. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2173. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2174. assert_equal(5, ticket1.articles.count, 'ticket1.articles verify')
  2175. assert_equal([], ticket1.tag_list)
  2176. ticket1.priority = Ticket::Priority.find_by(name: '3 high')
  2177. ticket1.save!
  2178. article = Ticket::Article.create(
  2179. ticket_id: ticket1.id,
  2180. from: 'some_sender@example.com',
  2181. to: 'some_recipient@example.com',
  2182. subject: 'some subject',
  2183. message_id: 'some@id',
  2184. body: "some message <b>note</b>\nnew line",
  2185. internal: true,
  2186. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2187. type: Ticket::Article::Type.find_by(name: 'note'),
  2188. updated_by_id: 1,
  2189. created_by_id: 1,
  2190. )
  2191. Observer::Transaction.commit
  2192. ticket1.reload
  2193. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2194. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2195. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2196. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2197. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2198. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  2199. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  2200. assert_equal([], ticket1.tag_list)
  2201. article.internal = false
  2202. article.save!
  2203. Observer::Transaction.commit
  2204. ticket1.reload
  2205. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2206. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2207. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2208. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2209. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2210. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  2211. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  2212. assert_equal([], ticket1.tag_list)
  2213. Ticket::Article.create(
  2214. ticket_id: ticket1.id,
  2215. from: 'some_sender@example.com',
  2216. to: 'some_recipient@example.com',
  2217. subject: 'some subject',
  2218. message_id: 'some@id',
  2219. body: "some message <b>note</b>\nnew line",
  2220. internal: true,
  2221. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2222. type: Ticket::Article::Type.find_by(name: 'note'),
  2223. updated_by_id: 1,
  2224. created_by_id: 1,
  2225. )
  2226. Observer::Transaction.commit
  2227. ticket1.reload
  2228. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2229. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2230. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2231. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2232. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2233. assert_equal('3 high', ticket1.priority.name, 'ticket1.priority verify')
  2234. assert_equal(7, ticket1.articles.count, 'ticket1.articles verify')
  2235. assert_equal([], ticket1.tag_list)
  2236. end
  2237. test '12 notify on owner change' do
  2238. trigger1 = Trigger.create_or_update(
  2239. name: 'aaa notify to customer on public note',
  2240. condition: {
  2241. 'ticket.owner_id' => {
  2242. 'operator' => 'has changed',
  2243. 'pre_condition' => 'current_user.id',
  2244. 'value' => '',
  2245. 'value_completion' => '',
  2246. }
  2247. },
  2248. perform: {
  2249. 'notification.email' => {
  2250. 'body' => 'some lala',
  2251. 'recipient' => 'ticket_customer',
  2252. 'subject' => 'UPDATE (#{ticket.title})!',
  2253. },
  2254. },
  2255. disable_notification: true,
  2256. active: true,
  2257. created_by_id: 1,
  2258. updated_by_id: 1,
  2259. )
  2260. Trigger.create_or_update(
  2261. name: 'auto reply (on new tickets)',
  2262. condition: {
  2263. 'ticket.action' => {
  2264. 'operator' => 'is',
  2265. 'value' => 'create',
  2266. },
  2267. 'ticket.state_id' => {
  2268. 'operator' => 'is not',
  2269. 'value' => Ticket::State.lookup(name: 'closed').id,
  2270. },
  2271. 'article.type_id' => {
  2272. 'operator' => 'is',
  2273. 'value' => [
  2274. Ticket::Article::Type.lookup(name: 'email').id,
  2275. Ticket::Article::Type.lookup(name: 'phone').id,
  2276. Ticket::Article::Type.lookup(name: 'web').id,
  2277. ],
  2278. },
  2279. 'article.sender_id' => {
  2280. 'operator' => 'is',
  2281. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  2282. },
  2283. },
  2284. perform: {
  2285. 'notification.email' => {
  2286. 'body' => '<div>Your request <b>(#{config.ticket_hook}#{ticket.number})</b> has been received and will be reviewed by our support staff.</div>
  2287. <br/>
  2288. <div>To provide additional information, please reply to this email or click on the following link (for initial login, please request a new password):
  2289. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  2290. </div>
  2291. <br/>
  2292. <div>Your #{config.product_name} Team</div>
  2293. <br/>
  2294. <div><i><a href="https://zammad.com">Zammad</a>, your customer support system</i></div>',
  2295. 'recipient' => 'ticket_customer',
  2296. 'subject' => 'Thanks for your inquiry (#{ticket.title})',
  2297. },
  2298. },
  2299. active: true,
  2300. created_by_id: 1,
  2301. updated_by_id: 1,
  2302. )
  2303. Trigger.create_or_update(
  2304. name: 'auto reply (on follow up of tickets)',
  2305. condition: {
  2306. 'ticket.action' => {
  2307. 'operator' => 'is',
  2308. 'value' => 'update',
  2309. },
  2310. 'article.sender_id' => {
  2311. 'operator' => 'is',
  2312. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  2313. },
  2314. 'article.type_id' => {
  2315. 'operator' => 'is',
  2316. 'value' => [
  2317. Ticket::Article::Type.lookup(name: 'email').id,
  2318. Ticket::Article::Type.lookup(name: 'phone').id,
  2319. Ticket::Article::Type.lookup(name: 'web').id,
  2320. ],
  2321. },
  2322. },
  2323. perform: {
  2324. 'notification.email' => {
  2325. '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>
  2326. <br/>
  2327. <div>To provide additional information, please reply to this email or click on the following link:
  2328. <a href="#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}">#{config.http_type}://#{config.fqdn}/#ticket/zoom/#{ticket.id}</a>
  2329. </div>
  2330. <br/>
  2331. <div>Your #{config.product_name} Team</div>
  2332. <br/>
  2333. <div><i><a href="https://zammad.com">Zammad</a>, your customer support system</i></div>',
  2334. 'recipient' => 'ticket_customer',
  2335. 'subject' => 'Thanks for your follow up (#{ticket.title})',
  2336. },
  2337. },
  2338. active: true,
  2339. created_by_id: 1,
  2340. updated_by_id: 1,
  2341. )
  2342. roles = Role.where(name: 'Agent')
  2343. agent = User.create_or_update(
  2344. login: 'agent@example.com',
  2345. firstname: 'Trigger',
  2346. lastname: 'Agent1',
  2347. email: 'agent@example.com',
  2348. password: 'agentpw',
  2349. active: true,
  2350. roles: roles,
  2351. updated_by_id: 1,
  2352. created_by_id: 1,
  2353. )
  2354. roles = Role.where(name: 'Customer')
  2355. customer = User.create_or_update(
  2356. login: 'customer@example.com',
  2357. firstname: 'Trigger',
  2358. lastname: 'Customer1',
  2359. email: 'customer@example.com',
  2360. password: 'customerpw',
  2361. vip: true,
  2362. active: true,
  2363. roles: roles,
  2364. updated_by_id: 1,
  2365. created_by_id: 1,
  2366. )
  2367. ticket1 = Ticket.create(
  2368. title: 'test 123',
  2369. #owner: agent,
  2370. customer: customer,
  2371. group: Group.lookup(name: 'Users'),
  2372. updated_by_id: 1,
  2373. created_by_id: 1,
  2374. )
  2375. Ticket::Article.create(
  2376. ticket_id: ticket1.id,
  2377. from: 'some_sender@example.com',
  2378. to: 'some_recipient@example.com',
  2379. subject: 'some subject',
  2380. message_id: 'some@id',
  2381. body: "some message <b>note</b>\nnew line",
  2382. internal: false,
  2383. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2384. type: Ticket::Article::Type.find_by(name: 'web'),
  2385. updated_by_id: 1,
  2386. created_by_id: 1,
  2387. )
  2388. Observer::Transaction.commit
  2389. ticket1.reload
  2390. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2391. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2392. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  2393. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2394. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2395. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2396. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2397. assert_equal([], ticket1.tag_list)
  2398. UserInfo.current_user_id = agent.id
  2399. ticket1.owner_id = agent.id
  2400. ticket1.save!
  2401. Observer::Transaction.commit
  2402. UserInfo.current_user_id = nil
  2403. ticket1.reload
  2404. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2405. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2406. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2407. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2408. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2409. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2410. assert_equal(3, ticket1.articles.count, 'ticket1.articles verify')
  2411. assert_equal([], ticket1.tag_list)
  2412. Ticket::Article.create(
  2413. ticket_id: ticket1.id,
  2414. from: 'some_sender@example.com',
  2415. to: 'some_recipient@example.com',
  2416. subject: 'some subject',
  2417. message_id: 'some@id',
  2418. body: "some message <b>note</b>\nnew line",
  2419. internal: false,
  2420. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2421. type: Ticket::Article::Type.find_by(name: 'web'),
  2422. updated_by_id: 1,
  2423. created_by_id: 1,
  2424. )
  2425. Observer::Transaction.commit
  2426. ticket1.reload
  2427. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2428. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2429. assert_equal(agent.id, ticket1.owner_id, 'ticket1.owner_id verify')
  2430. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2431. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2432. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2433. assert_equal(5, ticket1.articles.count, 'ticket1.articles verify')
  2434. assert_equal([], ticket1.tag_list)
  2435. UserInfo.current_user_id = agent.id
  2436. ticket1.owner_id = 1
  2437. ticket1.save!
  2438. Observer::Transaction.commit
  2439. UserInfo.current_user_id = nil
  2440. ticket1.reload
  2441. assert_equal('test 123', ticket1.title, 'ticket1.title verify')
  2442. assert_equal('Users', ticket1.group.name, 'ticket1.group verify')
  2443. assert_equal(1, ticket1.owner_id, 'ticket1.owner_id verify')
  2444. assert_equal(customer.id, ticket1.customer_id, 'ticket1.customer_id verify')
  2445. assert_equal('new', ticket1.state.name, 'ticket1.state verify')
  2446. assert_equal('2 normal', ticket1.priority.name, 'ticket1.priority verify')
  2447. assert_equal(6, ticket1.articles.count, 'ticket1.articles verify')
  2448. assert_equal([], ticket1.tag_list)
  2449. end
  2450. test '1 empty condition should not create errors' do
  2451. assert_raises(Exception) {
  2452. trigger_empty = Trigger.create_or_update(
  2453. name: 'aaa loop check',
  2454. condition: {
  2455. 'ticket.number' => {
  2456. 'operator' => 'contains',
  2457. 'value' => '',
  2458. },
  2459. },
  2460. perform: {
  2461. 'notification.email' => {
  2462. 'body' => 'some lala',
  2463. 'recipient' => 'ticket_customer',
  2464. 'subject' => 'Thanks for your inquiry - loop check (#{ticket.title})!',
  2465. },
  2466. },
  2467. disable_notification: true,
  2468. active: true,
  2469. created_by_id: 1,
  2470. updated_by_id: 1,
  2471. )
  2472. }
  2473. end
  2474. test 'article_last_sender trigger -> reply_to' do
  2475. trigger = Trigger.create_or_update(
  2476. name: 'auto reply',
  2477. condition: {
  2478. 'ticket.action' => {
  2479. 'operator' => 'is',
  2480. 'value' => 'create',
  2481. },
  2482. 'ticket.state_id' => {
  2483. 'operator' => 'is',
  2484. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2485. }
  2486. },
  2487. perform: {
  2488. 'notification.email' => {
  2489. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2490. 'recipient' => 'article_last_sender',
  2491. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2492. },
  2493. },
  2494. disable_notification: true,
  2495. active: true,
  2496. created_by_id: 1,
  2497. updated_by_id: 1,
  2498. )
  2499. ticket1 = Ticket.create(
  2500. title: "some <b>title</b>\n äöüß",
  2501. group: Group.lookup(name: 'Users'),
  2502. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2503. updated_by_id: 1,
  2504. created_by_id: 1,
  2505. )
  2506. Ticket::Article.create(
  2507. ticket_id: ticket1.id,
  2508. from: 'some_sender@example.com',
  2509. to: 'some_recipient+from@example.com',
  2510. reply_to: 'some_recipient+reply_to@example.com',
  2511. subject: 'some subject',
  2512. message_id: 'some@id',
  2513. body: "some message <b>note</b>\nnew line",
  2514. internal: false,
  2515. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2516. type: Ticket::Article::Type.find_by(name: 'note'),
  2517. updated_by_id: 1,
  2518. created_by_id: 1,
  2519. )
  2520. Observer::Transaction.commit
  2521. ticket1.reload
  2522. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2523. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2524. auto_response = ticket1.articles.last
  2525. assert_match('Zammad <zammad@localhost>', auto_response.from)
  2526. assert_match('some_recipient+reply_to@example.com', auto_response.to)
  2527. end
  2528. test 'article_last_sender trigger -> from' do
  2529. trigger = Trigger.create_or_update(
  2530. name: 'auto reply',
  2531. condition: {
  2532. 'ticket.action' => {
  2533. 'operator' => 'is',
  2534. 'value' => 'create',
  2535. },
  2536. 'ticket.state_id' => {
  2537. 'operator' => 'is',
  2538. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2539. }
  2540. },
  2541. perform: {
  2542. 'notification.email' => {
  2543. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2544. 'recipient' => 'article_last_sender',
  2545. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2546. },
  2547. },
  2548. disable_notification: true,
  2549. active: true,
  2550. created_by_id: 1,
  2551. updated_by_id: 1,
  2552. )
  2553. ticket1 = Ticket.create(
  2554. title: "some <b>title</b>\n äöüß",
  2555. group: Group.lookup(name: 'Users'),
  2556. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2557. updated_by_id: 1,
  2558. created_by_id: 1,
  2559. )
  2560. Ticket::Article.create(
  2561. ticket_id: ticket1.id,
  2562. from: 'some_sender+from@example.com',
  2563. to: 'some_recipient@example.com',
  2564. subject: 'some subject',
  2565. message_id: 'some@id',
  2566. body: "some message <b>note</b>\nnew line",
  2567. internal: false,
  2568. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2569. type: Ticket::Article::Type.find_by(name: 'email'),
  2570. updated_by_id: 1,
  2571. created_by_id: 1,
  2572. )
  2573. Observer::Transaction.commit
  2574. ticket1.reload
  2575. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2576. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2577. auto_response = ticket1.articles.last
  2578. assert_match('Zammad <zammad@localhost>', auto_response.from)
  2579. assert_match('some_sender+from@example.com', auto_response.to)
  2580. end
  2581. test 'article_last_sender trigger -> origin_by_id' do
  2582. trigger = Trigger.create_or_update(
  2583. name: 'auto reply',
  2584. condition: {
  2585. 'ticket.action' => {
  2586. 'operator' => 'is',
  2587. 'value' => 'create',
  2588. },
  2589. 'ticket.state_id' => {
  2590. 'operator' => 'is',
  2591. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2592. }
  2593. },
  2594. perform: {
  2595. 'notification.email' => {
  2596. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2597. 'recipient' => 'article_last_sender',
  2598. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2599. },
  2600. },
  2601. disable_notification: true,
  2602. active: true,
  2603. created_by_id: 1,
  2604. updated_by_id: 1,
  2605. )
  2606. roles = Role.where(name: 'Customer')
  2607. customer1 = User.create_or_update(
  2608. login: 'customer+origin_by_id@example.com',
  2609. firstname: 'Trigger',
  2610. lastname: 'Customer1',
  2611. email: 'customer+origin_by_id@example.com',
  2612. password: 'customerpw',
  2613. active: true,
  2614. roles: roles,
  2615. updated_at: '2015-02-05 16:37:00',
  2616. updated_by_id: 1,
  2617. created_by_id: 1,
  2618. )
  2619. ticket1 = Ticket.create(
  2620. title: "some <b>title</b>\n äöüß",
  2621. group: Group.lookup(name: 'Users'),
  2622. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2623. updated_by_id: 1,
  2624. created_by_id: 1,
  2625. )
  2626. Ticket::Article.create(
  2627. ticket_id: ticket1.id,
  2628. to: 'some_recipient@example.com',
  2629. subject: 'some subject',
  2630. message_id: 'some@id',
  2631. body: "some message <b>note</b>\nnew line",
  2632. internal: false,
  2633. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2634. type: Ticket::Article::Type.find_by(name: 'email'),
  2635. origin_by_id: customer1.id,
  2636. updated_by_id: 1,
  2637. created_by_id: 1,
  2638. )
  2639. Observer::Transaction.commit
  2640. ticket1.reload
  2641. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2642. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2643. auto_response = ticket1.articles.last
  2644. assert_match('Zammad <zammad@localhost>', auto_response.from)
  2645. assert_match('customer+origin_by_id@example.com', auto_response.to)
  2646. end
  2647. test 'article_last_sender trigger -> created_by_id' do
  2648. trigger = Trigger.create_or_update(
  2649. name: 'auto reply',
  2650. condition: {
  2651. 'ticket.action' => {
  2652. 'operator' => 'is',
  2653. 'value' => 'create',
  2654. },
  2655. 'ticket.state_id' => {
  2656. 'operator' => 'is',
  2657. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2658. }
  2659. },
  2660. perform: {
  2661. 'notification.email' => {
  2662. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2663. 'recipient' => 'article_last_sender',
  2664. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2665. },
  2666. },
  2667. disable_notification: true,
  2668. active: true,
  2669. created_by_id: 1,
  2670. updated_by_id: 1,
  2671. )
  2672. roles = Role.where(name: 'Customer')
  2673. customer1 = User.create_or_update(
  2674. login: 'customer+created_by_id@example.com',
  2675. firstname: 'Trigger',
  2676. lastname: 'Customer1',
  2677. email: 'customer+created_by_id@example.com',
  2678. password: 'customerpw',
  2679. active: true,
  2680. roles: roles,
  2681. updated_at: '2015-02-05 16:37:00',
  2682. updated_by_id: 1,
  2683. created_by_id: 1,
  2684. )
  2685. ticket1 = Ticket.create(
  2686. title: "some <b>title</b>\n äöüß",
  2687. group: Group.lookup(name: 'Users'),
  2688. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2689. updated_by_id: 1,
  2690. created_by_id: 1,
  2691. )
  2692. Ticket::Article.create(
  2693. ticket_id: ticket1.id,
  2694. to: 'some_recipient@example.com',
  2695. subject: 'some subject',
  2696. message_id: 'some@id',
  2697. body: "some message <b>note</b>\nnew line",
  2698. internal: false,
  2699. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2700. type: Ticket::Article::Type.find_by(name: 'email'),
  2701. updated_by_id: customer1.id,
  2702. created_by_id: customer1.id,
  2703. )
  2704. Observer::Transaction.commit
  2705. ticket1.reload
  2706. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2707. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2708. auto_response = ticket1.articles.last
  2709. assert_match('Zammad <zammad@localhost>', auto_response.from)
  2710. assert_match('customer+created_by_id@example.com', auto_response.to)
  2711. end
  2712. test 'multiple recipients owner_id, article_last_sender(reply_to) trigger' do
  2713. trigger = Trigger.create_or_update(
  2714. name: 'auto reply',
  2715. condition: {
  2716. 'ticket.action' => {
  2717. 'operator' => 'is',
  2718. 'value' => 'create',
  2719. },
  2720. 'ticket.state_id' => {
  2721. 'operator' => 'is',
  2722. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2723. }
  2724. },
  2725. perform: {
  2726. 'notification.email' => {
  2727. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2728. 'recipient' => %w(ticket_owner article_last_sender),
  2729. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2730. },
  2731. },
  2732. disable_notification: true,
  2733. active: true,
  2734. created_by_id: 1,
  2735. updated_by_id: 1,
  2736. )
  2737. admin = User.create_or_update(
  2738. login: 'admin+owner_recipient@example.com',
  2739. firstname: 'Role',
  2740. lastname: "Admin#{name}",
  2741. email: 'admin+owner_recipient@example.com',
  2742. password: 'adminpw',
  2743. active: true,
  2744. roles: Role.where(name: %w(Admin Agent)),
  2745. updated_by_id: 1,
  2746. created_by_id: 1,
  2747. )
  2748. ticket1 = Ticket.create(
  2749. title: "some <b>title</b>\n äöüß",
  2750. group: Group.lookup(name: 'Users'),
  2751. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2752. owner_id: admin.id,
  2753. updated_by_id: 1,
  2754. created_by_id: 1,
  2755. )
  2756. Ticket::Article.create(
  2757. ticket_id: ticket1.id,
  2758. from: 'some_sender@example.com',
  2759. to: 'some_recipient+from@example.com',
  2760. reply_to: 'some_recipient+reply_to@example.com',
  2761. subject: 'some subject',
  2762. message_id: 'some@id',
  2763. body: "some message <b>note</b>\nnew line",
  2764. internal: false,
  2765. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2766. type: Ticket::Article::Type.find_by(name: 'note'),
  2767. updated_by_id: 1,
  2768. created_by_id: 1,
  2769. )
  2770. Observer::Transaction.commit
  2771. ticket1.reload
  2772. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2773. assert_equal(2, ticket1.articles.count, 'ticket1.articles verify')
  2774. auto_response = ticket1.articles.last
  2775. assert_match('Zammad <zammad@localhost>', auto_response.from)
  2776. assert_match('some_recipient+reply_to@example.com', auto_response.to)
  2777. assert_match('admin+owner_recipient@example.com', auto_response.to)
  2778. end
  2779. test 'article_last_sender trigger -> invalid reply_to' do
  2780. trigger = Trigger.create_or_update(
  2781. name: 'auto reply',
  2782. condition: {
  2783. 'ticket.action' => {
  2784. 'operator' => 'is',
  2785. 'value' => 'create',
  2786. },
  2787. 'ticket.state_id' => {
  2788. 'operator' => 'is',
  2789. 'value' => Ticket::State.lookup(name: 'new').id.to_s,
  2790. }
  2791. },
  2792. perform: {
  2793. 'notification.email' => {
  2794. 'body' => 'some text<br>#{ticket.customer.lastname}<br>#{ticket.title}<br>#{article.body}',
  2795. 'recipient' => 'article_last_sender',
  2796. 'subject' => 'Thanks for your inquiry (#{ticket.title})!',
  2797. },
  2798. },
  2799. disable_notification: true,
  2800. active: true,
  2801. created_by_id: 1,
  2802. updated_by_id: 1,
  2803. )
  2804. ticket1 = Ticket.create(
  2805. title: "some <b>title</b>\n äöüß",
  2806. group: Group.lookup(name: 'Users'),
  2807. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2808. updated_by_id: 1,
  2809. created_by_id: 1,
  2810. )
  2811. Ticket::Article.create(
  2812. ticket_id: ticket1.id,
  2813. from: 'some_sender@example.com',
  2814. to: 'some_recipient+from@example.com',
  2815. reply_to: 'Blub blub blub some_recipient+reply_to@example',
  2816. subject: 'some subject',
  2817. message_id: 'some@id',
  2818. body: "some message <b>note</b>\nnew line",
  2819. internal: false,
  2820. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  2821. type: Ticket::Article::Type.find_by(name: 'note'),
  2822. updated_by_id: 1,
  2823. created_by_id: 1,
  2824. )
  2825. Observer::Transaction.commit
  2826. ticket1.reload
  2827. assert_equal('new', ticket1.state.name, 'ticket1.state new')
  2828. assert_equal(1, ticket1.articles.count, 'ticket1.articles verify')
  2829. end
  2830. test '2 loop check' do
  2831. trigger1 = Trigger.create_or_update(
  2832. name: 'aaa loop check',
  2833. condition: {
  2834. 'ticket.state_id' => {
  2835. 'operator' => 'is',
  2836. 'value' => Ticket::State.all.pluck(:id),
  2837. },
  2838. 'article.sender_id' => {
  2839. 'operator' => 'is',
  2840. 'value' => Ticket::Article::Sender.lookup(name: 'Customer').id,
  2841. },
  2842. 'article.type_id' => {
  2843. 'operator' => 'is',
  2844. 'value' => [
  2845. Ticket::Article::Type.lookup(name: 'email').id,
  2846. Ticket::Article::Type.lookup(name: 'phone').id,
  2847. Ticket::Article::Type.lookup(name: 'web').id,
  2848. ],
  2849. },
  2850. },
  2851. perform: {
  2852. 'notification.email' => {
  2853. 'body' => 'some lala',
  2854. 'recipient' => 'ticket_customer',
  2855. 'subject' => 'Thanks for your inquiry - loop check (#{ticket.title})!',
  2856. },
  2857. },
  2858. disable_notification: true,
  2859. active: true,
  2860. created_by_id: 1,
  2861. updated_by_id: 1,
  2862. )
  2863. ticket1 = Ticket.create(
  2864. title: 'loop try 1',
  2865. group: Group.lookup(name: 'Users'),
  2866. customer: User.lookup(email: 'nicole.braun@zammad.org'),
  2867. updated_by_id: 1,
  2868. created_by_id: 1,
  2869. )
  2870. assert(ticket1, 'ticket1 created')
  2871. Ticket::Article.create(
  2872. ticket_id: ticket1.id,
  2873. from: 'some_loop_sender@example.com',
  2874. to: 'some_loop_recipient@example.com',
  2875. subject: 'some subject',
  2876. message_id: 'some@id',
  2877. body: "some message <b>note</b>\nnew line",
  2878. internal: false,
  2879. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2880. type: Ticket::Article::Type.find_by(name: 'email'),
  2881. updated_by_id: 1,
  2882. created_by_id: 1,
  2883. )
  2884. ticket1.reload
  2885. assert_equal(1, ticket1.articles.count)
  2886. Observer::Transaction.commit
  2887. ticket1.reload
  2888. assert_equal(2, ticket1.articles.count)
  2889. ticket1.priority = Ticket::Priority.lookup(name: '2 normal')
  2890. ticket1.save!
  2891. Observer::Transaction.commit
  2892. ticket1.reload
  2893. assert_equal(2, ticket1.articles.count)
  2894. Ticket::Article.create(
  2895. ticket_id: ticket1.id,
  2896. from: 'some_loop_sender@example.com',
  2897. to: 'some_loop_recipient@example.com',
  2898. subject: 'some subject 1234',
  2899. message_id: 'some@id',
  2900. content_type: 'text/html',
  2901. body: 'some message <b>note</b><br>new line',
  2902. internal: false,
  2903. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2904. type: Ticket::Article::Type.find_by(name: 'email'),
  2905. updated_by_id: 1,
  2906. created_by_id: 1,
  2907. )
  2908. Observer::Transaction.commit
  2909. ticket1.reload
  2910. assert_equal(4, ticket1.articles.count)
  2911. assert_equal('some_loop_sender@example.com', ticket1.articles[2].from)
  2912. assert_equal('nicole.braun@zammad.org', ticket1.articles[3].to)
  2913. Ticket::Article.create(
  2914. ticket_id: ticket1.id,
  2915. from: 'some_loop_sender@example.com',
  2916. to: 'some_loop_recipient@example.com',
  2917. subject: 'some subject 1234',
  2918. message_id: 'some@id',
  2919. content_type: 'text/html',
  2920. body: 'some message <b>note</b><br>new line',
  2921. internal: false,
  2922. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2923. type: Ticket::Article::Type.find_by(name: 'email'),
  2924. updated_by_id: 1,
  2925. created_by_id: 1,
  2926. )
  2927. Observer::Transaction.commit
  2928. ticket1.reload
  2929. assert_equal(6, ticket1.articles.count)
  2930. assert_equal('some_loop_sender@example.com', ticket1.articles[4].from)
  2931. assert_equal('nicole.braun@zammad.org', ticket1.articles[5].to)
  2932. Ticket::Article.create(
  2933. ticket_id: ticket1.id,
  2934. from: 'some_loop_sender@example.com',
  2935. to: 'some_loop_recipient@example.com',
  2936. subject: 'some subject 1234',
  2937. message_id: 'some@id',
  2938. content_type: 'text/html',
  2939. body: 'some message <b>note</b><br>new line',
  2940. internal: false,
  2941. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2942. type: Ticket::Article::Type.find_by(name: 'email'),
  2943. updated_by_id: 1,
  2944. created_by_id: 1,
  2945. )
  2946. Observer::Transaction.commit
  2947. ticket1.reload
  2948. assert_equal(8, ticket1.articles.count)
  2949. assert_equal('some_loop_sender@example.com', ticket1.articles[6].from)
  2950. assert_equal('nicole.braun@zammad.org', ticket1.articles[7].to)
  2951. Ticket::Article.create(
  2952. ticket_id: ticket1.id,
  2953. from: 'some_loop_sender@example.com',
  2954. to: 'some_loop_recipient@example.com',
  2955. subject: 'some subject 1234',
  2956. message_id: 'some@id',
  2957. content_type: 'text/html',
  2958. body: 'some message <b>note</b><br>new line',
  2959. internal: false,
  2960. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2961. type: Ticket::Article::Type.find_by(name: 'email'),
  2962. updated_by_id: 1,
  2963. created_by_id: 1,
  2964. )
  2965. Observer::Transaction.commit
  2966. ticket1.reload
  2967. assert_equal(10, ticket1.articles.count)
  2968. assert_equal('some_loop_sender@example.com', ticket1.articles[8].from)
  2969. assert_equal('nicole.braun@zammad.org', ticket1.articles[9].to)
  2970. Ticket::Article.create(
  2971. ticket_id: ticket1.id,
  2972. from: 'some_loop_sender@example.com',
  2973. to: 'some_loop_recipient@example.com',
  2974. subject: 'some subject 1234',
  2975. message_id: 'some@id',
  2976. content_type: 'text/html',
  2977. body: 'some message <b>note</b><br>new line',
  2978. internal: false,
  2979. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2980. type: Ticket::Article::Type.find_by(name: 'email'),
  2981. updated_by_id: 1,
  2982. created_by_id: 1,
  2983. )
  2984. Observer::Transaction.commit
  2985. ticket1.reload
  2986. assert_equal(12, ticket1.articles.count)
  2987. assert_equal('some_loop_sender@example.com', ticket1.articles[10].from)
  2988. assert_equal('nicole.braun@zammad.org', ticket1.articles[11].to)
  2989. Ticket::Article.create(
  2990. ticket_id: ticket1.id,
  2991. from: 'some_loop_sender@example.com',
  2992. to: 'some_loop_recipient@example.com',
  2993. subject: 'some subject 1234',
  2994. message_id: 'some@id',
  2995. content_type: 'text/html',
  2996. body: 'some message <b>note</b><br>new line',
  2997. internal: false,
  2998. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  2999. type: Ticket::Article::Type.find_by(name: 'email'),
  3000. updated_by_id: 1,
  3001. created_by_id: 1,
  3002. )
  3003. Observer::Transaction.commit
  3004. ticket1.reload
  3005. assert_equal(14, ticket1.articles.count)
  3006. assert_equal('some_loop_sender@example.com', ticket1.articles[12].from)
  3007. assert_equal('nicole.braun@zammad.org', ticket1.articles[13].to)
  3008. Ticket::Article.create(
  3009. ticket_id: ticket1.id,
  3010. from: 'some_loop_sender@example.com',
  3011. to: 'some_loop_recipient@example.com',
  3012. subject: 'some subject 1234',
  3013. message_id: 'some@id',
  3014. content_type: 'text/html',
  3015. body: 'some message <b>note</b><br>new line',
  3016. internal: false,
  3017. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  3018. type: Ticket::Article::Type.find_by(name: 'email'),
  3019. updated_by_id: 1,
  3020. created_by_id: 1,
  3021. )
  3022. Observer::Transaction.commit
  3023. ticket1.reload
  3024. assert_equal(16, ticket1.articles.count)
  3025. assert_equal('some_loop_sender@example.com', ticket1.articles[14].from)
  3026. assert_equal('nicole.braun@zammad.org', ticket1.articles[15].to)
  3027. Ticket::Article.create(
  3028. ticket_id: ticket1.id,
  3029. from: 'some_loop_sender@example.com',
  3030. to: 'some_loop_recipient@example.com',
  3031. subject: 'some subject 1234',
  3032. message_id: 'some@id',
  3033. content_type: 'text/html',
  3034. body: 'some message <b>note</b><br>new line',
  3035. internal: false,
  3036. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  3037. type: Ticket::Article::Type.find_by(name: 'email'),
  3038. updated_by_id: 1,
  3039. created_by_id: 1,
  3040. )
  3041. Observer::Transaction.commit
  3042. ticket1.reload
  3043. assert_equal(18, ticket1.articles.count)
  3044. assert_equal('some_loop_sender@example.com', ticket1.articles[16].from)
  3045. assert_equal('nicole.braun@zammad.org', ticket1.articles[17].to)
  3046. Ticket::Article.create(
  3047. ticket_id: ticket1.id,
  3048. from: 'some_loop_sender@example.com',
  3049. to: 'some_loop_recipient@example.com',
  3050. subject: 'some subject 1234',
  3051. message_id: 'some@id',
  3052. content_type: 'text/html',
  3053. body: 'some message <b>note</b><br>new line',
  3054. internal: false,
  3055. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  3056. type: Ticket::Article::Type.find_by(name: 'email'),
  3057. updated_by_id: 1,
  3058. created_by_id: 1,
  3059. )
  3060. Observer::Transaction.commit
  3061. ticket1.reload
  3062. assert_equal(20, ticket1.articles.count)
  3063. assert_equal('some_loop_sender@example.com', ticket1.articles[18].from)
  3064. assert_equal('nicole.braun@zammad.org', ticket1.articles[19].to)
  3065. Ticket::Article.create(
  3066. ticket_id: ticket1.id,
  3067. from: 'some_loop_sender@example.com',
  3068. to: 'some_loop_recipient@example.com',
  3069. subject: 'some subject 1234',
  3070. message_id: 'some@id',
  3071. content_type: 'text/html',
  3072. body: 'some message <b>note</b><br>new line',
  3073. internal: false,
  3074. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  3075. type: Ticket::Article::Type.find_by(name: 'email'),
  3076. updated_by_id: 1,
  3077. created_by_id: 1,
  3078. )
  3079. Observer::Transaction.commit
  3080. ticket1.reload
  3081. assert_equal(21, ticket1.articles.count)
  3082. assert_equal('some_loop_sender@example.com', ticket1.articles[20].from)
  3083. Ticket::Article.create(
  3084. ticket_id: ticket1.id,
  3085. from: 'some_loop_sender@example.com',
  3086. to: 'some_loop_recipient@example.com',
  3087. subject: 'some subject 1234',
  3088. message_id: 'some@id',
  3089. content_type: 'text/html',
  3090. body: 'some message <b>note</b><br>new line',
  3091. internal: false,
  3092. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  3093. type: Ticket::Article::Type.find_by(name: 'email'),
  3094. updated_by_id: 1,
  3095. created_by_id: 1,
  3096. )
  3097. Observer::Transaction.commit
  3098. ticket1.reload
  3099. assert_equal(22, ticket1.articles.count)
  3100. assert_equal('some_loop_sender@example.com', ticket1.articles[21].from)
  3101. end
  3102. end