ticket_sla_test.rb 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848
  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 reminder',
  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 reminder',
  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 reminder' ),
  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 reminder',
  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 reminder' ),
  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 reminder',
  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 reminder',
  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 reminder',
  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 reminder' ),
  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 reminder',
  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 reminder',
  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 reminder',
  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