ticket_sla_test.rb 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class TicketSlaTest < ActiveSupport::TestCase
  4. test 'ticket sla' do
  5. # cleanup
  6. delete = Sla.destroy_all
  7. assert( delete, "sla destroy_all" )
  8. delete = Ticket.destroy_all
  9. assert( delete, "ticket destroy_all" )
  10. ticket = Ticket.create(
  11. :title => 'some title äöüß',
  12. :group => Group.lookup( :name => 'Users'),
  13. :customer_id => 2,
  14. :state => Ticket::State.lookup( :name => 'new' ),
  15. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  16. :created_at => '2013-03-21 09:30:00 UTC',
  17. :updated_at => '2013-03-21 09:30:00 UTC',
  18. :updated_by_id => 1,
  19. :created_by_id => 1,
  20. )
  21. assert( ticket, "ticket created" )
  22. assert_equal( ticket.escalation_time, nil, 'ticket.escalation_time verify' )
  23. sla = Sla.create(
  24. :name => 'test sla 1',
  25. :condition => {},
  26. :data => {
  27. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  28. "beginning_of_workday" => "8:00",
  29. "end_of_workday" => "18:00",
  30. },
  31. :first_response_time => 120,
  32. :update_time => 180,
  33. :close_time => 240,
  34. :active => true,
  35. :updated_by_id => 1,
  36. :created_by_id => 1,
  37. )
  38. ticket = Ticket.find(ticket.id)
  39. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.escalation_time verify 1' )
  40. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.first_response_escal_date verify 1' )
  41. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
  42. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 13:30:00 UTC', 'ticket.close_time_escal_date verify 1' )
  43. delete = sla.destroy
  44. assert( delete, "sla destroy 1" )
  45. sla = Sla.create(
  46. :name => 'test sla 2',
  47. :condition => { "tickets.priority_id" =>["1", "2", "3"] },
  48. :data => {
  49. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  50. "beginning_of_workday" => "8:00",
  51. "end_of_workday" => "18:00",
  52. },
  53. :first_response_time => 60,
  54. :update_time => 120,
  55. :close_time => 180,
  56. :active => true,
  57. :updated_by_id => 1,
  58. :created_by_id => 1,
  59. )
  60. ticket = Ticket.find(ticket.id)
  61. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.escalation_time verify 2' )
  62. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 2' )
  63. assert_equal( ticket.first_response, nil, 'ticket.first_response verify 2' )
  64. assert_equal( ticket.first_response_in_min, nil, 'ticket.first_response_in_min verify 2' )
  65. assert_equal( ticket.first_response_diff_in_min, nil, 'ticket.first_response_diff_in_min verify 2' )
  66. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.update_time_escal_date verify 2' )
  67. assert_equal( ticket.update_time_in_min, nil, 'ticket.update_time_in_min verify 2' )
  68. assert_equal( ticket.update_time_diff_in_min, nil, 'ticket.update_time_diff_in_min verify 2' )
  69. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 2' )
  70. assert_equal( ticket.close_time_in_min, nil, 'ticket.close_time_in_min verify 2' )
  71. assert_equal( ticket.close_time_diff_in_min, nil, 'ticket.close_time_diff_in_min verify 2' )
  72. # set first response in time
  73. ticket.update_attributes(
  74. :first_response => '2013-03-21 10:00:00 UTC',
  75. )
  76. puts ticket.inspect
  77. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.escalation_time verify 3' )
  78. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 3' )
  79. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 10:00:00 UTC', 'ticket.first_response verify 3' )
  80. assert_equal( ticket.first_response_in_min, 30, 'ticket.first_response_in_min verify 3' )
  81. assert_equal( ticket.first_response_diff_in_min, 30, 'ticket.first_response_diff_in_min verify 3' )
  82. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.update_time_escal_date verify 3' )
  83. assert_equal( ticket.update_time_in_min, nil, 'ticket.update_time_in_min verify 3' )
  84. assert_equal( ticket.update_time_diff_in_min, nil, 'ticket.update_time_diff_in_min verify 3' )
  85. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 3' )
  86. assert_equal( ticket.close_time_in_min, nil, 'ticket.close_time_in_min verify 3' )
  87. assert_equal( ticket.close_time_diff_in_min, nil, 'ticket.close_time_diff_in_min verify 3' )
  88. # set first reponse over time
  89. ticket.update_attributes(
  90. :first_response => '2013-03-21 14:00:00 UTC',
  91. )
  92. puts ticket.inspect
  93. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.escalation_time verify 4' )
  94. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 4' )
  95. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 4' )
  96. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 4' )
  97. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 4' )
  98. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.update_time_escal_date verify 4' )
  99. assert_equal( ticket.update_time_in_min, nil, 'ticket.update_time_in_min verify 4' )
  100. assert_equal( ticket.update_time_diff_in_min, nil, 'ticket.update_time_diff_in_min verify 4' )
  101. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 4' )
  102. assert_equal( ticket.close_time_in_min, nil, 'ticket.close_time_in_min verify 4' )
  103. assert_equal( ticket.close_time_diff_in_min, nil, 'ticket.close_time_diff_in_min verify 4' )
  104. # set update time in time
  105. ticket.update_attributes(
  106. :last_contact_agent => '2013-03-21 11:00:00 UTC',
  107. )
  108. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.escalation_time verify 5' )
  109. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 5' )
  110. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 5' )
  111. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 5' )
  112. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 5' )
  113. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 13:00:00 UTC', 'ticket.update_time_escal_date verify 5' )
  114. assert_equal( ticket.update_time_in_min, 90, 'ticket.update_time_in_min verify 5' )
  115. assert_equal( ticket.update_time_diff_in_min, 30, 'ticket.update_time_diff_in_min verify 5' )
  116. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 5' )
  117. assert_equal( ticket.close_time_in_min, nil, 'ticket.close_time_in_min verify 5' )
  118. assert_equal( ticket.close_time_diff_in_min, nil, 'ticket.close_time_diff_in_min verify 5' )
  119. # set update time over time
  120. ticket.update_attributes(
  121. :last_contact_agent => '2013-03-21 12:00:00 UTC',
  122. )
  123. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.escalation_time verify 6' )
  124. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 6' )
  125. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 6' )
  126. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 6' )
  127. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 6' )
  128. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.update_time_escal_date verify 6' )
  129. assert_equal( ticket.update_time_in_min, 150, 'ticket.update_time_in_min verify 6' )
  130. assert_equal( ticket.update_time_diff_in_min, -30, 'ticket.update_time_diff_in_min verify 6' )
  131. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 6' )
  132. assert_equal( ticket.close_time_in_min, nil, 'ticket.close_time_in_min verify 6' )
  133. assert_equal( ticket.close_time_diff_in_min, nil, 'ticket.close_time_diff_in_min verify 6' )
  134. # set close time in time
  135. ticket.update_attributes(
  136. :close_time => '2013-03-21 11:30:00 UTC',
  137. )
  138. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.escalation_time verify 7' )
  139. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 7' )
  140. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 7' )
  141. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 7' )
  142. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 7' )
  143. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.update_time_escal_date verify 7' )
  144. assert_equal( ticket.update_time_in_min, 150, 'ticket.update_time_in_min verify 7' )
  145. assert_equal( ticket.update_time_diff_in_min, -30, 'ticket.update_time_diff_in_min verify 7' )
  146. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 7' )
  147. assert_equal( ticket.close_time_in_min, 120, 'ticket.close_time_in_min verify 7' )
  148. assert_equal( ticket.close_time_diff_in_min, 60, 'ticket.close_time_diff_in_min verify 7' )
  149. # set close time over time
  150. ticket.update_attributes(
  151. :close_time => '2013-03-21 13:00:00 UTC',
  152. )
  153. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.escalation_time verify 8' )
  154. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 8' )
  155. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 8' )
  156. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 8' )
  157. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 8' )
  158. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.update_time_escal_date verify 8' )
  159. assert_equal( ticket.update_time_in_min, 150, 'ticket.update_time_in_min verify 8' )
  160. assert_equal( ticket.update_time_diff_in_min, -30, 'ticket.update_time_diff_in_min verify 8' )
  161. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 8' )
  162. assert_equal( ticket.close_time_in_min, 210, 'ticket.close_time_in_min verify 8' )
  163. assert_equal( ticket.close_time_diff_in_min, -30, 'ticket.close_time_diff_in_min verify 8' )
  164. # set close time over time
  165. ticket.update_attributes(
  166. :state => Ticket::State.lookup( :name => 'closed' )
  167. )
  168. assert_equal( ticket.escalation_time, nil, 'ticket.escalation_time verify 9' )
  169. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 10:30:00 UTC', 'ticket.first_response_escal_date verify 9' )
  170. assert_equal( ticket.first_response.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.first_response verify 9' )
  171. assert_equal( ticket.first_response_in_min, 270, 'ticket.first_response_in_min verify 9' )
  172. assert_equal( ticket.first_response_diff_in_min, -210, 'ticket.first_response_diff_in_min verify 9' )
  173. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 14:00:00 UTC', 'ticket.update_time_escal_date verify 9' )
  174. assert_equal( ticket.update_time_in_min, 150, 'ticket.update_time_in_min verify 9' )
  175. assert_equal( ticket.update_time_diff_in_min, -30, 'ticket.update_time_diff_in_min verify 9' )
  176. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.close_time_escal_date verify 9' )
  177. assert_equal( ticket.close_time_in_min, 210, 'ticket.close_time_in_min verify 9' )
  178. assert_equal( ticket.close_time_diff_in_min, -30, 'ticket.close_time_diff_in_min verify 9' )
  179. delete = ticket.destroy
  180. assert( delete, "ticket destroy" )
  181. ticket = Ticket.create(
  182. :title => 'some title äöüß',
  183. :group => Group.lookup( :name => 'Users'),
  184. :customer_id => 2,
  185. :state => Ticket::State.lookup( :name => 'new' ),
  186. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  187. :updated_by_id => 1,
  188. :created_by_id => 1,
  189. :created_at => '2013-03-28 23:49:00 UTC',
  190. :updated_at => '2013-03-28 23:49:00 UTC',
  191. )
  192. assert( ticket, "ticket created" )
  193. assert_equal( ticket.title, 'some title äöüß', 'ticket.title verify' )
  194. assert_equal( ticket.group.name, 'Users', 'ticket.group verify' )
  195. assert_equal( ticket.state.name, 'new', 'ticket.state verify' )
  196. # create inbound article
  197. article_inbound = Ticket::Article.create(
  198. :ticket_id => ticket.id,
  199. :from => 'some_sender@example.com',
  200. :to => 'some_recipient@example.com',
  201. :subject => 'some subject',
  202. :message_id => 'some@id',
  203. :body => 'some message',
  204. :internal => false,
  205. :sender => Ticket::Article::Sender.where(:name => 'Customer').first,
  206. :type => Ticket::Article::Type.where(:name => 'email').first,
  207. :updated_by_id => 1,
  208. :created_by_id => 1,
  209. :created_at => '2013-03-28 23:49:00 UTC',
  210. :updated_at => '2013-03-28 23:49:00 UTC',
  211. )
  212. ticket = Ticket.find(ticket.id)
  213. assert_equal( ticket.article_count, 1, 'ticket.article_count verify - inbound' )
  214. assert_equal( ticket.last_contact.to_s, article_inbound.created_at.to_s, 'ticket.last_contact verify - inbound' )
  215. assert_equal( ticket.last_contact_customer.to_s, article_inbound.created_at.to_s, 'ticket.last_contact_customer verify - inbound' )
  216. assert_equal( ticket.last_contact_agent, nil, 'ticket.last_contact_agent verify - inbound' )
  217. assert_equal( ticket.first_response, nil, 'ticket.first_response verify - inbound' )
  218. assert_equal( ticket.close_time, nil, 'ticket.close_time verify - inbound' )
  219. # create outbound article
  220. article_outbound = Ticket::Article.create(
  221. :ticket_id => ticket.id,
  222. :from => 'some_recipient@example.com',
  223. :to => 'some_sender@example.com',
  224. :subject => 'some subject',
  225. :message_id => 'some@id2',
  226. :body => 'some message 2',
  227. :internal => false,
  228. :sender => Ticket::Article::Sender.where(:name => 'Agent').first,
  229. :type => Ticket::Article::Type.where(:name => 'email').first,
  230. :updated_by_id => 1,
  231. :created_by_id => 1,
  232. :created_at => '2013-03-29 08:00:03 UTC',
  233. :updated_at => '2013-03-29 08:00:03 UTC',
  234. )
  235. ticket = Ticket.find(ticket.id)
  236. assert_equal( ticket.article_count, 2, 'ticket.article_count verify - outbound' )
  237. assert_equal( ticket.last_contact.to_s, article_outbound.created_at.to_s, 'ticket.last_contact verify - outbound' )
  238. assert_equal( ticket.last_contact_customer.to_s, article_inbound.created_at.to_s, 'ticket.last_contact_customer verify - outbound' )
  239. assert_equal( ticket.last_contact_agent.to_s, article_outbound.created_at.to_s, 'ticket.last_contact_agent verify - outbound' )
  240. assert_equal( ticket.first_response.to_s, article_outbound.created_at.to_s, 'ticket.first_response verify - outbound' )
  241. assert_equal( ticket.first_response_in_min, 0, 'ticket.first_response_in_min verify - outbound' )
  242. assert_equal( ticket.first_response_diff_in_min, 60, 'ticket.first_response_diff_in_min verify - outbound' )
  243. assert_equal( ticket.close_time, nil, 'ticket.close_time verify - outbound' )
  244. delete = ticket.destroy
  245. assert( delete, "ticket destroy" )
  246. ticket = Ticket.create(
  247. :title => 'some title äöüß',
  248. :group => Group.lookup( :name => 'Users'),
  249. :customer_id => 2,
  250. :state => Ticket::State.lookup( :name => 'new' ),
  251. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  252. :updated_by_id => 1,
  253. :created_by_id => 1,
  254. :created_at => '2013-03-28 23:49:00 UTC',
  255. :updated_at => '2013-03-28 23:49:00 UTC',
  256. )
  257. assert( ticket, "ticket created" )
  258. assert_equal( ticket.title, 'some title äöüß', 'ticket.title verify' )
  259. assert_equal( ticket.group.name, 'Users', 'ticket.group verify' )
  260. assert_equal( ticket.state.name, 'new', 'ticket.state verify' )
  261. # create inbound article
  262. article_inbound = Ticket::Article.create(
  263. :ticket_id => ticket.id,
  264. :from => 'some_sender@example.com',
  265. :subject => 'some subject',
  266. :message_id => 'some@id',
  267. :body => 'some message',
  268. :internal => false,
  269. :sender => Ticket::Article::Sender.where(:name => 'Customer').first,
  270. :type => Ticket::Article::Type.where(:name => 'phone').first,
  271. :updated_by_id => 1,
  272. :created_by_id => 1,
  273. :created_at => '2013-03-28 23:49:00 UTC',
  274. :updated_at => '2013-03-28 23:49:00 UTC',
  275. )
  276. ticket = Ticket.find(ticket.id)
  277. assert_equal( ticket.article_count, 1, 'ticket.article_count verify - inbound' )
  278. assert_equal( ticket.last_contact.to_s, article_inbound.created_at.to_s, 'ticket.last_contact verify - inbound' )
  279. assert_equal( ticket.last_contact_customer.to_s, article_inbound.created_at.to_s, 'ticket.last_contact_customer verify - inbound' )
  280. assert_equal( ticket.last_contact_agent, nil, 'ticket.last_contact_agent verify - inbound' )
  281. assert_equal( ticket.first_response.to_s, article_inbound.created_at.to_s, 'ticket.first_response verify - inbound' )
  282. assert_equal( ticket.close_time, nil, 'ticket.close_time verify - inbound' )
  283. delete = sla.destroy
  284. assert( delete, "sla destroy" )
  285. delete = sla.destroy
  286. assert( delete, "sla destroy" )
  287. end
  288. test 'ticket sla + timezone' do
  289. # cleanup
  290. delete = Sla.destroy_all
  291. assert( delete, "sla destroy_all" )
  292. delete = Ticket.destroy_all
  293. assert( delete, "ticket destroy_all" )
  294. ticket = Ticket.create(
  295. :title => 'some title äöüß',
  296. :group => Group.lookup( :name => 'Users'),
  297. :customer_id => 2,
  298. :state => Ticket::State.lookup( :name => 'new' ),
  299. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  300. :created_at => '2013-03-21 09:30:00 UTC',
  301. :updated_at => '2013-03-21 09:30:00 UTC',
  302. :updated_by_id => 1,
  303. :created_by_id => 1,
  304. )
  305. assert( ticket, "ticket created" )
  306. assert_equal( ticket.escalation_time, nil, 'ticket.escalation_time verify' )
  307. # set sla's for timezone "Europe/Berlin" wintertime (+1), so UTC times are 8:00-17:00
  308. sla = Sla.create(
  309. :name => 'test sla 1',
  310. :condition => {},
  311. :data => {
  312. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  313. "beginning_of_workday" => "9:00",
  314. "end_of_workday" => "18:00",
  315. },
  316. :timezone => 'Europe/Berlin',
  317. :first_response_time => 120,
  318. :update_time => 180,
  319. :close_time => 240,
  320. :active => true,
  321. :updated_by_id => 1,
  322. :created_by_id => 1,
  323. )
  324. ticket = Ticket.find(ticket.id)
  325. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.escalation_time verify 1' )
  326. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-03-21 11:30:00 UTC', 'ticket.first_response_escal_date verify 1' )
  327. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-03-21 12:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
  328. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-03-21 13:30:00 UTC', 'ticket.close_time_escal_date verify 1' )
  329. delete = sla.destroy
  330. assert( delete, "sla destroy" )
  331. delete = ticket.destroy
  332. assert( delete, "ticket destroy" )
  333. ticket = Ticket.create(
  334. :title => 'some title äöüß',
  335. :group => Group.lookup( :name => 'Users'),
  336. :customer_id => 2,
  337. :state => Ticket::State.lookup( :name => 'new' ),
  338. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  339. :created_at => '2013-10-21 09:30:00 UTC',
  340. :updated_at => '2013-10-21 09:30:00 UTC',
  341. :updated_by_id => 1,
  342. :created_by_id => 1,
  343. )
  344. assert( ticket, "ticket created" )
  345. assert_equal( ticket.escalation_time, nil, 'ticket.escalation_time verify' )
  346. # set sla's for timezone "Europe/Berlin" summertime (+2), so UTC times are 7:00-16:00
  347. sla = Sla.create(
  348. :name => 'test sla 1',
  349. :condition => {},
  350. :data => {
  351. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  352. "beginning_of_workday" => "9:00",
  353. "end_of_workday" => "18:00",
  354. },
  355. :timezone => 'Europe/Berlin',
  356. :first_response_time => 120,
  357. :update_time => 180,
  358. :close_time => 240,
  359. :active => true,
  360. :updated_by_id => 1,
  361. :created_by_id => 1,
  362. )
  363. ticket = Ticket.find(ticket.id)
  364. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-10-21 11:30:00 UTC', 'ticket.escalation_time verify 1' )
  365. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-10-21 11:30:00 UTC', 'ticket.first_response_escal_date verify 1' )
  366. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-10-21 12:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
  367. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-10-21 13:30:00 UTC', 'ticket.close_time_escal_date verify 1' )
  368. delete = ticket.destroy
  369. assert( delete, "ticket destroy" )
  370. delete = sla.destroy
  371. assert( delete, "sla destroy" )
  372. ticket = Ticket.create(
  373. :title => 'some title äöüß',
  374. :group => Group.lookup( :name => 'Users'),
  375. :customer_id => 2,
  376. :state => Ticket::State.lookup( :name => 'new' ),
  377. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  378. :created_at => '2013-10-21 06:30:00 UTC',
  379. :updated_at => '2013-10-21 06:30:00 UTC',
  380. :updated_by_id => 1,
  381. :created_by_id => 1,
  382. )
  383. assert( ticket, "ticket created" )
  384. assert_equal( ticket.escalation_time, nil, 'ticket.escalation_time verify' )
  385. # set sla's for timezone "Europe/Berlin" summertime (+2), so UTC times are 7:00-16:00
  386. sla = Sla.create(
  387. :name => 'test sla 1',
  388. :condition => {},
  389. :data => {
  390. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  391. "beginning_of_workday" => "9:00",
  392. "end_of_workday" => "18:00",
  393. },
  394. :timezone => 'Europe/Berlin',
  395. :first_response_time => 120,
  396. :update_time => 180,
  397. :close_time => 240,
  398. :active => true,
  399. :updated_by_id => 1,
  400. :created_by_id => 1,
  401. )
  402. ticket = Ticket.find(ticket.id)
  403. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-10-21 09:00:00 UTC', 'ticket.escalation_time verify 1' )
  404. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-10-21 09:00:00 UTC', 'ticket.first_response_escal_date verify 1' )
  405. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-10-21 10:00:00 UTC', 'ticket.update_time_escal_date verify 1' )
  406. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-10-21 11:00:00 UTC', 'ticket.close_time_escal_date verify 1' )
  407. delete = sla.destroy
  408. assert( delete, "sla destroy" )
  409. delete = ticket.destroy
  410. assert( delete, "ticket destroy" )
  411. end
  412. test 'ticket escalation suspend' do
  413. ticket = Ticket.create(
  414. :title => 'some title äöüß3',
  415. :group => Group.lookup( :name => 'Users'),
  416. :customer_id => 2,
  417. :state => Ticket::State.lookup( :name => 'new' ),
  418. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  419. :created_at => '2013-06-04 09:00:00 UTC',
  420. :updated_at => '2013-06-04 09:00:00 UTC',
  421. :updated_by_id => 1,
  422. :created_by_id => 1,
  423. )
  424. assert( ticket, 'ticket created' )
  425. # set ticket at 10:00 to pending
  426. History.add(
  427. :history_type => 'updated',
  428. :history_object => 'Ticket',
  429. :history_attribute => 'state',
  430. :o_id => ticket.id,
  431. :id_to => 3,
  432. :id_from => 2,
  433. :value_from => 'open',
  434. :value_to => 'pending',
  435. :created_by_id => 1,
  436. :created_at => '2013-06-04 10:00:00 UTC',
  437. :updated_at => '2013-06-04 10:00:00 UTC',
  438. )
  439. # set ticket at 10:30 to open
  440. History.add(
  441. :history_type => 'updated',
  442. :history_object => 'Ticket',
  443. :history_attribute => 'state',
  444. :o_id => ticket.id,
  445. :id_to => 2,
  446. :id_from => 3,
  447. :value_from => 'pending',
  448. :value_to => 'open',
  449. :created_by_id => 1,
  450. :created_at => '2013-06-04 10:30:00 UTC',
  451. :updated_at => '2013-06-04 10:30:00 UTC'
  452. )
  453. # set update time
  454. ticket.update_attributes(
  455. :last_contact_agent => '2013-06-04 10:15:00 UTC',
  456. )
  457. # set first response time
  458. ticket.update_attributes(
  459. :first_response => '2013-06-04 10:45:00 UTC',
  460. )
  461. # set ticket from 11:30 to closed
  462. History.add(
  463. :history_type => 'updated',
  464. :history_object => 'Ticket',
  465. :history_attribute => 'state',
  466. :o_id => ticket.id,
  467. :id_to => 3,
  468. :id_from => 2,
  469. :value_from => 'open',
  470. :value_to => 'closed',
  471. :created_by_id => 1,
  472. :created_at => '2013-06-04 12:00:00 UTC',
  473. :updated_at => '2013-06-04 12:00:00 UTC'
  474. )
  475. ticket.update_attributes(
  476. :close_time => '2013-06-04 12:00:00 UTC',
  477. )
  478. # set sla's for timezone "Europe/Berlin" summertime (+2), so UTC times are 7:00-16:00
  479. sla = Sla.create(
  480. :name => 'test sla 1',
  481. :condition => {},
  482. :data => {
  483. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  484. "beginning_of_workday" => "9:00",
  485. "end_of_workday" => "18:00",
  486. },
  487. :timezone => 'Europe/Berlin',
  488. :first_response_time => 120,
  489. :update_time => 180,
  490. :close_time => 250,
  491. :active => true,
  492. :updated_by_id => 1,
  493. :created_by_id => 1,
  494. )
  495. ticket = Ticket.find(ticket.id)
  496. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-06-04 13:30:00 UTC', 'ticket.escalation_time verify 1' )
  497. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-06-04 11:30:00 UTC', 'ticket.first_response_escal_date verify 1' )
  498. assert_equal( ticket.first_response_in_min, 75, 'ticket.first_response_in_min verify 3' )
  499. assert_equal( ticket.first_response_diff_in_min, 45, 'ticket.first_response_diff_in_min verify 3' )
  500. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-06-04 13:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
  501. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-06-04 13:40:00 UTC', 'ticket.close_time_escal_date verify 1' )
  502. assert_equal( ticket.close_time_in_min, 150, 'ticket.close_time_in_min verify 3' )
  503. assert_equal( ticket.close_time_diff_in_min, 100, 'ticket.close_time_diff_in_min# verify 3' )
  504. delete = sla.destroy
  505. assert( delete, "sla destroy" )
  506. delete = ticket.destroy
  507. assert( delete, "ticket destroy" )
  508. # test Ticket created in state pending and closed without reopen or state change
  509. ticket = Ticket.create(
  510. :title => 'some title äöüß3',
  511. :group => Group.lookup( :name => 'Users'),
  512. :customer_id => 2,
  513. :state => Ticket::State.lookup( :name => 'pending' ),
  514. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  515. :created_at => '2013-06-04 09:00:00 UTC',
  516. :updated_at => '2013-06-04 09:00:00 UTC',
  517. :updated_by_id => 1,
  518. :created_by_id => 1,
  519. )
  520. assert( ticket, 'ticket created' )
  521. # set ticket from 11:30 to closed
  522. History.add(
  523. :history_type => 'updated',
  524. :history_object => 'Ticket',
  525. :history_attribute => 'state',
  526. :o_id => ticket.id,
  527. :id_to => 4,
  528. :id_from => 3,
  529. :value_from => 'pending',
  530. :value_to => 'closed',
  531. :created_by_id => 1,
  532. :created_at => '2013-06-04 12:00:00 UTC',
  533. :updated_at => '2013-06-04 12:00:00 UTC',
  534. )
  535. ticket.update_attributes(
  536. :close_time => '2013-06-04 12:00:00 UTC',
  537. )
  538. sla = Sla.create(
  539. :name => 'test sla 1',
  540. :condition => {},
  541. :data => {
  542. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  543. "beginning_of_workday" => "9:00",
  544. "end_of_workday" => "18:00",
  545. },
  546. :first_response_time => 120,
  547. :update_time => 180,
  548. :close_time => 240,
  549. :active => true,
  550. :updated_by_id => 1,
  551. :created_by_id => 1,
  552. )
  553. ticket = Ticket.find(ticket.id)
  554. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-06-04 14:00:00 UTC', 'ticket.escalation_time verify 1' )
  555. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-06-04 14:00:00 UTC', 'ticket.first_response_escal_date verify 1' )
  556. assert_equal( ticket.first_response_in_min, nil, 'ticket.first_response_in_min verify 3' )
  557. assert_equal( ticket.first_response_diff_in_min, nil, 'ticket.first_response_diff_in_min verify 3' )
  558. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-06-04 15:00:00 UTC', 'ticket.update_time_escal_date verify 1' )
  559. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-06-04 16:00:00 UTC', 'ticket.close_time_escal_date verify 1' )
  560. assert_equal( ticket.close_time_in_min, 0, 'ticket.close_time_in_min verify 3' )
  561. assert_equal( ticket.close_time_diff_in_min, 240, 'ticket.close_time_diff_in_min# verify 3' )
  562. delete = sla.destroy
  563. assert( delete, "sla destroy" )
  564. delete = ticket.destroy
  565. assert( delete, "ticket destroy" )
  566. # test Ticket created in state pending, changed state to openen, back to pending and closed
  567. ticket = Ticket.create(
  568. :title => 'some title äöüß3',
  569. :group => Group.lookup( :name => 'Users'),
  570. :customer_id => 2,
  571. :state => Ticket::State.lookup( :name => 'pending' ),
  572. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  573. :created_at => '2013-06-04 09:00:00 UTC',
  574. :updated_at => '2013-06-04 09:00:00 UTC',
  575. :updated_by_id => 1,
  576. :created_by_id => 1,
  577. )
  578. assert( ticket, 'ticket created' )
  579. # state change to open 10:30
  580. History.add(
  581. :history_type => 'updated',
  582. :history_object => 'Ticket',
  583. :history_attribute => 'state',
  584. :o_id => ticket.id,
  585. :id_to => 2,
  586. :id_from => 3,
  587. :value_from => 'pending',
  588. :value_to => 'open',
  589. :created_by_id => 1,
  590. :created_at => '2013-06-04 10:30:00 UTC',
  591. :updated_at => '2013-06-04 10:30:00 UTC',
  592. )
  593. # state change to pending 11:00
  594. History.add(
  595. :history_type => 'updated',
  596. :history_object => 'Ticket',
  597. :history_attribute => 'state',
  598. :o_id => ticket.id,
  599. :id_to => 3,
  600. :id_from => 2,
  601. :value_from => 'open',
  602. :value_to => 'pending',
  603. :created_by_id => 1,
  604. :created_at => '2013-06-04 11:00:00 UTC',
  605. :updated_at => '2013-06-04 11:00:00 UTC',
  606. )
  607. # set ticket from 12:00 to closed
  608. History.add(
  609. :history_type => 'updated',
  610. :history_object => 'Ticket',
  611. :history_attribute => 'state',
  612. :o_id => ticket.id,
  613. :id_to => 4,
  614. :id_from => 3,
  615. :value_from => 'pending',
  616. :value_to => 'closed',
  617. :created_by_id => 1,
  618. :created_at => '2013-06-04 12:00:00 UTC',
  619. :updated_at => '2013-06-04 12:00:00 UTC',
  620. )
  621. ticket.update_attributes(
  622. :close_time => '2013-06-04 12:00:00 UTC',
  623. )
  624. sla = Sla.create(
  625. :name => 'test sla 1',
  626. :condition => {},
  627. :data => {
  628. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  629. "beginning_of_workday" => "9:00",
  630. "end_of_workday" => "18:00",
  631. },
  632. :first_response_time => 120,
  633. :update_time => 180,
  634. :close_time => 240,
  635. :active => true,
  636. :updated_by_id => 1,
  637. :created_by_id => 1,
  638. )
  639. ticket = Ticket.find(ticket.id)
  640. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-06-04 13:30:00 UTC', 'ticket.escalation_time verify 1' )
  641. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-06-04 13:30:00 UTC', 'ticket.first_response_escal_date verify 1' )
  642. assert_equal( ticket.first_response_in_min, nil, 'ticket.first_response_in_min verify 3' )
  643. assert_equal( ticket.first_response_diff_in_min, nil, 'ticket.first_response_diff_in_min verify 3' )
  644. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-06-04 14:30:00 UTC', 'ticket.update_time_escal_date verify 1' )
  645. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-06-04 15:30:00 UTC', 'ticket.close_time_escal_date verify 1' )
  646. assert_equal( ticket.close_time_in_min, 30, 'ticket.close_time_in_min verify 3' )
  647. assert_equal( ticket.close_time_diff_in_min, 210, 'ticket.close_time_diff_in_min# verify 3' )
  648. delete = sla.destroy
  649. assert( delete, "sla destroy" )
  650. delete = ticket.destroy
  651. assert( delete, "ticket destroy" )
  652. ### Test Ticket created in state pending, changed state to openen, back to pending and back to open then
  653. ### close ticket
  654. ticket = Ticket.create(
  655. :title => 'some title äöüß3',
  656. :group => Group.lookup( :name => 'Users'),
  657. :customer_id => 2,
  658. :state => Ticket::State.lookup( :name => 'pending' ),
  659. :priority => Ticket::Priority.lookup( :name => '2 normal' ),
  660. :created_at => '2013-06-04 09:00:00 UTC',
  661. :updated_at => '2013-06-04 09:00:00 UTC',
  662. :updated_by_id => 1,
  663. :created_by_id => 1,
  664. )
  665. assert( ticket, 'ticket created' )
  666. # state change to open from pending
  667. History.add(
  668. :history_type => 'updated',
  669. :history_object => 'Ticket',
  670. :history_attribute => 'state',
  671. :o_id => ticket.id,
  672. :id_to => 2,
  673. :id_from => 3,
  674. :value_from => 'pending',
  675. :value_to => 'open',
  676. :created_by_id => 1,
  677. :created_at => '2013-06-04 10:30:00 UTC',
  678. :updated_at => '2013-06-04 10:30:00 UTC',
  679. )
  680. # state change to pending from open 11:00
  681. History.add(
  682. :history_type => 'updated',
  683. :history_object => 'Ticket',
  684. :history_attribute => 'state',
  685. :o_id => ticket.id,
  686. :id_to => 3,
  687. :id_from => 2,
  688. :value_from => 'open',
  689. :value_to => 'pending',
  690. :created_by_id => 1,
  691. :created_at => '2013-06-04 11:00:00 UTC',
  692. :updated_at => '2013-06-04 11:00:00 UTC',
  693. )
  694. # state change to open 11:30
  695. History.add(
  696. :history_type => 'updated',
  697. :history_object => 'Ticket',
  698. :history_attribute => 'state',
  699. :o_id => ticket.id,
  700. :id_to => 2,
  701. :id_from => 3,
  702. :value_from => 'pending',
  703. :value_to => 'open',
  704. :created_by_id => 1,
  705. :created_at => '2013-06-04 11:30:00 UTC',
  706. :updated_at => '2013-06-04 11:30:00 UTC',
  707. )
  708. # set ticket from open to closed 12:00
  709. History.add(
  710. :history_type => 'updated',
  711. :history_object => 'Ticket',
  712. :history_attribute => 'state',
  713. :o_id => ticket.id,
  714. :id_to => 4,
  715. :id_from => 3,
  716. :value_from => 'open',
  717. :value_to => 'closed',
  718. :created_by_id => 1,
  719. :created_at => '2013-06-04 12:00:00 UTC',
  720. :updated_at => '2013-06-04 12:00:00 UTC',
  721. )
  722. ticket.update_attributes(
  723. :close_time => '2013-06-04 12:00:00 UTC',
  724. )
  725. sla = Sla.create(
  726. :name => 'test sla 1',
  727. :condition => {},
  728. :data => {
  729. "Mon"=>"Mon", "Tue"=>"Tue", "Wed"=>"Wed", "Thu"=>"Thu", "Fri"=>"Fri", "Sat"=>"Sat", "Sun"=>"Sun",
  730. "beginning_of_workday" => "9:00",
  731. "end_of_workday" => "18:00",
  732. },
  733. :first_response_time => 120,
  734. :update_time => 180,
  735. :close_time => 240,
  736. :active => true,
  737. :updated_by_id => 1,
  738. :created_by_id => 1,
  739. )
  740. ticket = Ticket.find(ticket.id)
  741. assert_equal( ticket.escalation_time.gmtime.to_s, '2013-06-04 13:00:00 UTC', 'ticket.escalation_time verify 1' )
  742. assert_equal( ticket.first_response_escal_date.gmtime.to_s, '2013-06-04 13:00:00 UTC', 'ticket.first_response_escal_date verify 1' )
  743. assert_equal( ticket.first_response_in_min, nil, 'ticket.first_response_in_min verify 3' )
  744. assert_equal( ticket.first_response_diff_in_min, nil, 'ticket.first_response_diff_in_min verify 3' )
  745. assert_equal( ticket.update_time_escal_date.gmtime.to_s, '2013-06-04 14:00:00 UTC', 'ticket.update_time_escal_date verify 1' )
  746. assert_equal( ticket.close_time_escal_date.gmtime.to_s, '2013-06-04 15:00:00 UTC', 'ticket.close_time_escal_date verify 1' )
  747. assert_equal( ticket.close_time_in_min, 60, 'ticket.close_time_in_min verify 3' )
  748. assert_equal( ticket.close_time_diff_in_min, 180, 'ticket.close_time_diff_in_min# verify 3' )
  749. delete = sla.destroy
  750. assert( delete, "sla destroy" )
  751. delete = ticket.destroy
  752. assert( delete, "ticket destroy" )
  753. end
  754. end