ticket_test.rb 44 KB

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