stats_ticket_waiting_time_test.rb 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. require 'test_helper'
  2. require 'stats/ticket_waiting_time'
  3. class StatsTicketWaitingTimeTest < ActiveSupport::TestCase
  4. test 'single ticket' do
  5. group1 = Group.create!(
  6. name: 'Group 1',
  7. active: true,
  8. email_address: EmailAddress.first,
  9. created_by_id: 1,
  10. updated_by_id: 1,
  11. )
  12. roles = Role.where(name: 'Agent')
  13. user1 = User.create!(
  14. login: 'assets_stats1@example.org',
  15. firstname: 'assets_stats1',
  16. lastname: 'assets_stats1',
  17. email: 'assets_stats1@example.org',
  18. password: 'some_pass',
  19. active: true,
  20. groups: [group1],
  21. roles: roles,
  22. created_by_id: 1,
  23. updated_by_id: 1,
  24. )
  25. user2 = User.create!(
  26. login: 'assets_stats2@example.org',
  27. firstname: 'assets_stats2',
  28. lastname: 'assets_stats2',
  29. email: 'assets_sla2@example.org',
  30. password: 'some_pass',
  31. active: true,
  32. groups: [group1],
  33. roles: roles,
  34. created_by_id: 1,
  35. updated_by_id: 1,
  36. )
  37. result = Stats::TicketWaitingTime.generate(user1)
  38. assert_equal(0, result[:handling_time])
  39. assert_equal('supergood', result[:state])
  40. assert_equal(0, result[:average_per_agent])
  41. assert_equal(0, result[:percent])
  42. ticket1 = Ticket.create!(
  43. title: 'com test 1',
  44. group: group1,
  45. customer_id: 2,
  46. state: Ticket::State.lookup(name: 'new'),
  47. priority: Ticket::Priority.lookup(name: '2 normal'),
  48. updated_by_id: 1,
  49. created_by_id: 1,
  50. )
  51. # communication 1: waiting time 2 hours (BUT too old yesterday)
  52. Ticket::Article.create!(
  53. ticket_id: ticket1.id,
  54. from: 'a@example.com',
  55. to: 'a@example.com',
  56. subject: 'com test 1',
  57. message_id: 'some@id_com_1',
  58. body: 'some message 123',
  59. internal: false,
  60. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  61. type: Ticket::Article::Type.find_by(name: 'email'),
  62. updated_by_id: 1,
  63. created_by_id: 1,
  64. created_at: '2017-04-12 08:00',
  65. updated_at: '2017-04-12 08:00',
  66. )
  67. Ticket::Article.create!(
  68. ticket_id: ticket1.id,
  69. from: 'a@example.com',
  70. to: 'a@example.com',
  71. subject: 'com test 1',
  72. message_id: 'some@id_com_1',
  73. body: 'some message 123',
  74. internal: false,
  75. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  76. type: Ticket::Article::Type.find_by(name: 'email'),
  77. updated_by_id: 1,
  78. created_by_id: 1,
  79. created_at: '2017-04-12 10:00',
  80. updated_at: '2017-04-12 10:00',
  81. )
  82. # communication 2: waiting time 2 hours
  83. Ticket::Article.create!(
  84. ticket_id: ticket1.id,
  85. from: 'a@example.com',
  86. to: 'a@example.com',
  87. subject: 'com test 1',
  88. message_id: 'some@id_com_1',
  89. body: 'some message 123',
  90. internal: false,
  91. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  92. type: Ticket::Article::Type.find_by(name: 'email'),
  93. updated_by_id: 1,
  94. created_by_id: 1,
  95. created_at: '2017-04-13 08:00',
  96. updated_at: '2017-04-13 08:00',
  97. )
  98. Ticket::Article.create!(
  99. ticket_id: ticket1.id,
  100. from: 'a@example.com',
  101. to: 'a@example.com',
  102. subject: 'com test 1',
  103. message_id: 'some@id_com_1',
  104. body: 'some message 123',
  105. internal: false,
  106. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  107. type: Ticket::Article::Type.find_by(name: 'email'),
  108. updated_by_id: 1,
  109. created_by_id: 1,
  110. created_at: '2017-04-13 10:00',
  111. updated_at: '2017-04-13 10:00',
  112. )
  113. # communication 3: waiting time 4 hours
  114. Ticket::Article.create!(
  115. ticket_id: ticket1.id,
  116. from: 'a@example.com',
  117. to: 'a@example.com',
  118. subject: 'com test 1',
  119. message_id: 'some@id_com_1',
  120. body: 'some message 123',
  121. internal: false,
  122. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  123. type: Ticket::Article::Type.find_by(name: 'email'),
  124. updated_by_id: 1,
  125. created_by_id: 1,
  126. created_at: '2017-04-13 11:00',
  127. updated_at: '2017-04-13 11:00',
  128. )
  129. Ticket::Article.create!(
  130. ticket_id: ticket1.id,
  131. from: 'a@example.com',
  132. to: 'a@example.com',
  133. subject: 'com test 1',
  134. message_id: 'some@id_com_1',
  135. body: 'some message 123',
  136. internal: false,
  137. sender: Ticket::Article::Sender.find_by(name: 'System'),
  138. type: Ticket::Article::Type.find_by(name: 'email'),
  139. updated_by_id: 1,
  140. created_by_id: 1,
  141. created_at: '2017-04-13 15:00',
  142. updated_at: '2017-04-13 15:00',
  143. )
  144. # communication 4: INVALID waiting time 1 hour (because internal)
  145. Ticket::Article.create!(
  146. ticket_id: ticket1.id,
  147. from: 'a@example.com',
  148. to: 'a@example.com',
  149. subject: 'com test 1',
  150. message_id: 'some@id_com_1',
  151. body: 'some message 123',
  152. internal: true,
  153. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  154. type: Ticket::Article::Type.find_by(name: 'email'),
  155. updated_by_id: 1,
  156. created_by_id: 1,
  157. created_at: '2017-04-13 15:00',
  158. updated_at: '2017-04-13 15:00',
  159. )
  160. Ticket::Article.create!(
  161. ticket_id: ticket1.id,
  162. from: 'a@example.com',
  163. to: 'a@example.com',
  164. subject: 'com test 1',
  165. message_id: 'some@id_com_1',
  166. body: 'some message 123',
  167. internal: true,
  168. sender: Ticket::Article::Sender.find_by(name: 'System'),
  169. type: Ticket::Article::Type.find_by(name: 'email'),
  170. updated_by_id: 1,
  171. created_by_id: 1,
  172. created_at: '2017-04-13 15:10',
  173. updated_at: '2017-04-13 15:10',
  174. )
  175. ticket2 = Ticket.create!(
  176. title: 'com test 2',
  177. group: group1,
  178. customer_id: 2,
  179. state: Ticket::State.lookup(name: 'new'),
  180. priority: Ticket::Priority.lookup(name: '2 normal'),
  181. updated_by_id: 1,
  182. created_by_id: 1,
  183. )
  184. average_time = Stats::TicketWaitingTime.calculate_average([ticket1.id, ticket2.id], '2017-04-13 00:00:00')
  185. expected_average_time = 60 * 60 * 2 # for communication 2
  186. expected_average_time += 60 * 60 * 4 # for communication 3
  187. expected_average_time = expected_average_time / 2 # for average
  188. travel_to Time.zone.local(2017, 0o4, 13, 23, 0o0, 44)
  189. assert_equal(expected_average_time, average_time)
  190. result = Stats::TicketWaitingTime.generate(user1)
  191. assert_equal(0, result[:handling_time])
  192. assert_equal('supergood', result[:state])
  193. assert_equal(180, result[:average_per_agent])
  194. assert_equal(0.0, result[:percent])
  195. ticket3 = Ticket.create!(
  196. title: 'com test 3',
  197. group: group1,
  198. customer_id: 2,
  199. owner: user1,
  200. state: Ticket::State.lookup(name: 'new'),
  201. priority: Ticket::Priority.lookup(name: '2 normal'),
  202. updated_by_id: 1,
  203. created_by_id: 1,
  204. )
  205. # communication 1: waiting time 2 hours (BUT too old yesterday)
  206. Ticket::Article.create!(
  207. ticket_id: ticket3.id,
  208. from: 'a@example.com',
  209. to: 'a@example.com',
  210. subject: 'com test 3',
  211. message_id: 'some@id_com_1',
  212. body: 'some message 123',
  213. internal: false,
  214. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  215. type: Ticket::Article::Type.find_by(name: 'email'),
  216. updated_by_id: 1,
  217. created_by_id: 1,
  218. created_at: '2017-04-13 08:00',
  219. updated_at: '2017-04-13 08:00',
  220. )
  221. Ticket::Article.create!(
  222. ticket_id: ticket3.id,
  223. from: 'a@example.com',
  224. to: 'a@example.com',
  225. subject: 'com test 3',
  226. message_id: 'some@id_com_1',
  227. body: 'some message 123',
  228. internal: false,
  229. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  230. type: Ticket::Article::Type.find_by(name: 'email'),
  231. updated_by_id: 1,
  232. created_by_id: 1,
  233. created_at: '2017-04-13 09:00',
  234. updated_at: '2017-04-13 09:00',
  235. )
  236. result = Stats::TicketWaitingTime.generate(user1)
  237. assert_equal(60, result[:handling_time])
  238. assert_equal('supergood', result[:state])
  239. assert_equal(140, result[:average_per_agent])
  240. assert_equal(1.0, result[:percent])
  241. travel_back
  242. end
  243. end