stats_ticket_waiting_time_test.rb 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. # encoding: utf-8
  2. require 'test_helper'
  3. require 'stats/ticket_waiting_time'
  4. class StatsTicketWaitingTimeTest < ActiveSupport::TestCase
  5. test 'single ticket' do
  6. ticket1 = Ticket.create(
  7. title: 'com test 1',
  8. group: Group.lookup(name: 'Users'),
  9. customer_id: 2,
  10. state: Ticket::State.lookup(name: 'new'),
  11. priority: Ticket::Priority.lookup(name: '2 normal'),
  12. updated_by_id: 1,
  13. created_by_id: 1,
  14. )
  15. # communication 1: waiting time 2 hours (BUT too old yesterday)
  16. Ticket::Article.create(
  17. ticket_id: ticket1.id,
  18. from: 'a@example.com',
  19. to: 'a@example.com',
  20. subject: 'com test 1',
  21. message_id: 'some@id_com_1',
  22. body: 'some message 123',
  23. internal: false,
  24. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  25. type: Ticket::Article::Type.find_by(name: 'email'),
  26. updated_by_id: 1,
  27. created_by_id: 1,
  28. created_at: '2017-04-12 08:00',
  29. updated_at: '2017-04-12 08:00',
  30. )
  31. Ticket::Article.create(
  32. ticket_id: ticket1.id,
  33. from: 'a@example.com',
  34. to: 'a@example.com',
  35. subject: 'com test 1',
  36. message_id: 'some@id_com_1',
  37. body: 'some message 123',
  38. internal: false,
  39. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  40. type: Ticket::Article::Type.find_by(name: 'email'),
  41. updated_by_id: 1,
  42. created_by_id: 1,
  43. created_at: '2017-04-12 10:00',
  44. updated_at: '2017-04-12 10:00',
  45. )
  46. # communication 2: waiting time 2 hours
  47. Ticket::Article.create(
  48. ticket_id: ticket1.id,
  49. from: 'a@example.com',
  50. to: 'a@example.com',
  51. subject: 'com test 1',
  52. message_id: 'some@id_com_1',
  53. body: 'some message 123',
  54. internal: false,
  55. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  56. type: Ticket::Article::Type.find_by(name: 'email'),
  57. updated_by_id: 1,
  58. created_by_id: 1,
  59. created_at: '2017-04-13 08:00',
  60. updated_at: '2017-04-13 08:00',
  61. )
  62. Ticket::Article.create(
  63. ticket_id: ticket1.id,
  64. from: 'a@example.com',
  65. to: 'a@example.com',
  66. subject: 'com test 1',
  67. message_id: 'some@id_com_1',
  68. body: 'some message 123',
  69. internal: false,
  70. sender: Ticket::Article::Sender.find_by(name: 'Agent'),
  71. type: Ticket::Article::Type.find_by(name: 'email'),
  72. updated_by_id: 1,
  73. created_by_id: 1,
  74. created_at: '2017-04-13 10:00',
  75. updated_at: '2017-04-13 10:00',
  76. )
  77. # communication 3: waiting time 4 hours
  78. Ticket::Article.create(
  79. ticket_id: ticket1.id,
  80. from: 'a@example.com',
  81. to: 'a@example.com',
  82. subject: 'com test 1',
  83. message_id: 'some@id_com_1',
  84. body: 'some message 123',
  85. internal: false,
  86. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  87. type: Ticket::Article::Type.find_by(name: 'email'),
  88. updated_by_id: 1,
  89. created_by_id: 1,
  90. created_at: '2017-04-13 11:00',
  91. updated_at: '2017-04-13 11:00',
  92. )
  93. Ticket::Article.create(
  94. ticket_id: ticket1.id,
  95. from: 'a@example.com',
  96. to: 'a@example.com',
  97. subject: 'com test 1',
  98. message_id: 'some@id_com_1',
  99. body: 'some message 123',
  100. internal: false,
  101. sender: Ticket::Article::Sender.find_by(name: 'System'),
  102. type: Ticket::Article::Type.find_by(name: 'email'),
  103. updated_by_id: 1,
  104. created_by_id: 1,
  105. created_at: '2017-04-13 15:00',
  106. updated_at: '2017-04-13 15:00',
  107. )
  108. # communication 4: INVALID waiting time 1 hour (because internal)
  109. Ticket::Article.create(
  110. ticket_id: ticket1.id,
  111. from: 'a@example.com',
  112. to: 'a@example.com',
  113. subject: 'com test 1',
  114. message_id: 'some@id_com_1',
  115. body: 'some message 123',
  116. internal: true,
  117. sender: Ticket::Article::Sender.find_by(name: 'Customer'),
  118. type: Ticket::Article::Type.find_by(name: 'email'),
  119. updated_by_id: 1,
  120. created_by_id: 1,
  121. created_at: '2017-04-13 15:00',
  122. updated_at: '2017-04-13 15:00',
  123. )
  124. Ticket::Article.create(
  125. ticket_id: ticket1.id,
  126. from: 'a@example.com',
  127. to: 'a@example.com',
  128. subject: 'com test 1',
  129. message_id: 'some@id_com_1',
  130. body: 'some message 123',
  131. internal: true,
  132. sender: Ticket::Article::Sender.find_by(name: 'System'),
  133. type: Ticket::Article::Type.find_by(name: 'email'),
  134. updated_by_id: 1,
  135. created_by_id: 1,
  136. created_at: '2017-04-13 15:10',
  137. updated_at: '2017-04-13 15:10',
  138. )
  139. average_time = Stats::TicketWaitingTime.calculate_average([ticket1, ticket1], '2017-04-13 00:00:00')
  140. expected_average_time = 60 * 60 * 2 # for communication 2
  141. expected_average_time += 60 * 60 * 4 # for communication 3
  142. expected_average_time = expected_average_time / 2 # for average
  143. assert_equal(expected_average_time, average_time)
  144. end
  145. end