chat_test.rb 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class ChatTest < ActiveSupport::TestCase
  4. # create base
  5. groups = Group.all
  6. roles = Role.where( name: %w(Agent Chat) )
  7. agent1 = User.create_or_update(
  8. login: 'ticket-chat-agent1@example.com',
  9. firstname: 'Notification',
  10. lastname: 'Agent1',
  11. email: 'ticket-chat-agent1@example.com',
  12. password: 'agentpw',
  13. active: true,
  14. roles: roles,
  15. groups: groups,
  16. updated_at: '2015-02-05 16:37:00',
  17. updated_by_id: 1,
  18. created_by_id: 1,
  19. )
  20. agent2 = User.create_or_update(
  21. login: 'ticket-chat-agent2@example.com',
  22. firstname: 'Notification',
  23. lastname: 'Agent2',
  24. email: 'ticket-chat-agent2@example.com',
  25. password: 'agentpw',
  26. active: true,
  27. roles: roles,
  28. groups: groups,
  29. updated_at: '2015-02-05 16:38:00',
  30. updated_by_id: 1,
  31. created_by_id: 1,
  32. )
  33. test 'default test' do
  34. Chat.delete_all
  35. Chat::Session.delete_all
  36. Chat::Message.delete_all
  37. Chat::Agent.delete_all
  38. Setting.set('chat', false)
  39. chat = Chat.create_or_update(
  40. name: 'default',
  41. max_queue: 5,
  42. note: '',
  43. active: true,
  44. updated_by_id: 1,
  45. created_by_id: 1,
  46. )
  47. # check if feature is disabled
  48. assert_equal('chat_disabled', chat.customer_state[:state])
  49. assert_equal('chat_disabled', Chat.agent_state(agent1.id)[:state])
  50. Setting.set('chat', true)
  51. # check customer state
  52. assert_equal('offline', chat.customer_state[:state])
  53. # check agent state
  54. agent_state = Chat.agent_state_with_sessions(agent1.id)
  55. assert_equal(0, agent_state[:waiting_chat_count])
  56. assert_equal(0, agent_state[:running_chat_count])
  57. assert_equal([], agent_state[:active_sessions])
  58. assert_equal(0, agent_state[:seads_available])
  59. assert_equal(0, agent_state[:seads_total])
  60. assert_equal(false, agent_state[:active])
  61. # set agent 1 to active
  62. chat_agent1 = Chat::Agent.create_or_update(
  63. active: true,
  64. concurrent: 4,
  65. updated_by_id: agent1.id,
  66. created_by_id: agent1.id,
  67. )
  68. # check customer state
  69. assert_equal('online', chat.customer_state[:state])
  70. # check agent state
  71. agent_state = Chat.agent_state_with_sessions(agent1.id)
  72. assert_equal(0, agent_state[:waiting_chat_count])
  73. assert_equal(0, agent_state[:running_chat_count])
  74. assert_equal([], agent_state[:active_sessions])
  75. assert_equal(4, agent_state[:seads_available])
  76. assert_equal(4, agent_state[:seads_total])
  77. assert_equal(true, agent_state[:active])
  78. # start session
  79. chat_session1 = Chat::Session.create(
  80. chat_id: chat.id,
  81. user_id: agent1.id,
  82. )
  83. assert(chat_session1.session_id)
  84. # check customer state
  85. assert_equal('online', chat.customer_state[:state])
  86. # check agent state
  87. agent_state = Chat.agent_state_with_sessions(agent1.id)
  88. assert_equal(1, agent_state[:waiting_chat_count])
  89. assert_equal(0, agent_state[:running_chat_count])
  90. assert_equal([], agent_state[:active_sessions])
  91. assert_equal(3, agent_state[:seads_available])
  92. assert_equal(4, agent_state[:seads_total])
  93. assert_equal(true, agent_state[:active])
  94. # activate second agent
  95. chat_agent2 = Chat::Agent.create_or_update(
  96. active: true,
  97. concurrent: 2,
  98. updated_by_id: agent2.id,
  99. created_by_id: agent2.id,
  100. )
  101. # check customer state
  102. assert_equal('online', chat.customer_state[:state])
  103. # check agent1 state
  104. agent_state = Chat.agent_state_with_sessions(agent1.id)
  105. assert_equal(1, agent_state[:waiting_chat_count])
  106. assert_equal(0, agent_state[:running_chat_count])
  107. assert_equal([], agent_state[:active_sessions])
  108. assert_equal(5, agent_state[:seads_available])
  109. assert_equal(6, agent_state[:seads_total])
  110. assert_equal(true, agent_state[:active])
  111. # check agent2 state
  112. agent_state = Chat.agent_state_with_sessions(agent2.id)
  113. assert_equal(1, agent_state[:waiting_chat_count])
  114. assert_equal(0, agent_state[:running_chat_count])
  115. assert_equal([], agent_state[:active_sessions])
  116. assert_equal(5, agent_state[:seads_available])
  117. assert_equal(6, agent_state[:seads_total])
  118. assert_equal(true, agent_state[:active])
  119. # start next chat
  120. chat_session2 = Chat::Session.create(
  121. chat_id: chat.id,
  122. )
  123. # check customer state
  124. assert_equal('online', chat.customer_state[:state])
  125. # check agent1 state
  126. agent_state = Chat.agent_state_with_sessions(agent1.id)
  127. assert_equal(2, agent_state[:waiting_chat_count])
  128. assert_equal(0, agent_state[:running_chat_count])
  129. assert_equal([], agent_state[:active_sessions])
  130. assert_equal(4, agent_state[:seads_available])
  131. assert_equal(6, agent_state[:seads_total])
  132. assert_equal(true, agent_state[:active])
  133. # check agent2 state
  134. agent_state = Chat.agent_state_with_sessions(agent2.id)
  135. assert_equal(2, agent_state[:waiting_chat_count])
  136. assert_equal(0, agent_state[:running_chat_count])
  137. assert_equal([], agent_state[:active_sessions])
  138. assert_equal(4, agent_state[:seads_available])
  139. assert_equal(6, agent_state[:seads_total])
  140. assert_equal(true, agent_state[:active])
  141. # start new chats
  142. chat_session3 = Chat::Session.create(
  143. chat_id: chat.id,
  144. )
  145. chat_session4 = Chat::Session.create(
  146. chat_id: chat.id,
  147. )
  148. chat_session5 = Chat::Session.create(
  149. chat_id: chat.id,
  150. )
  151. chat_session6 = Chat::Session.create(
  152. chat_id: chat.id,
  153. )
  154. # check customer state
  155. assert_equal('no_seats_available', chat.customer_state[:state])
  156. # check agent1 state
  157. agent_state = Chat.agent_state_with_sessions(agent1.id)
  158. assert_equal(6, agent_state[:waiting_chat_count])
  159. assert_equal(0, agent_state[:running_chat_count])
  160. assert_equal([], agent_state[:active_sessions])
  161. assert_equal(0, agent_state[:seads_available])
  162. assert_equal(6, agent_state[:seads_total])
  163. assert_equal(true, agent_state[:active])
  164. # check agent2 state
  165. agent_state = Chat.agent_state_with_sessions(agent2.id)
  166. assert_equal(6, agent_state[:waiting_chat_count])
  167. assert_equal(0, agent_state[:running_chat_count])
  168. assert_equal([], agent_state[:active_sessions])
  169. assert_equal(0, agent_state[:seads_available])
  170. assert_equal(6, agent_state[:seads_total])
  171. assert_equal(true, agent_state[:active])
  172. chat_session6.state = 'running'
  173. chat_session6.save
  174. # check customer state
  175. assert_equal('no_seats_available', chat.customer_state[:state])
  176. assert_equal(5, chat.customer_state[:queue])
  177. # check agent1 state
  178. agent_state = Chat.agent_state_with_sessions(agent1.id)
  179. assert_equal(5, agent_state[:waiting_chat_count])
  180. assert_equal(1, agent_state[:running_chat_count])
  181. assert_equal([], agent_state[:active_sessions])
  182. assert_equal(0, agent_state[:seads_available])
  183. assert_equal(6, agent_state[:seads_total])
  184. assert_equal(true, agent_state[:active])
  185. # check agent2 state
  186. agent_state = Chat.agent_state_with_sessions(agent2.id)
  187. assert_equal(5, agent_state[:waiting_chat_count])
  188. assert_equal(1, agent_state[:running_chat_count])
  189. assert_equal([], agent_state[:active_sessions])
  190. assert_equal(0, agent_state[:seads_available])
  191. assert_equal(6, agent_state[:seads_total])
  192. assert_equal(true, agent_state[:active])
  193. chat_agent2.active = false
  194. chat_agent2.save
  195. # check customer state
  196. assert_equal('no_seats_available', chat.customer_state[:state])
  197. assert_equal(5, chat.customer_state[:queue])
  198. # check agent1 state
  199. agent_state = Chat.agent_state_with_sessions(agent1.id)
  200. assert_equal(5, agent_state[:waiting_chat_count])
  201. assert_equal(1, agent_state[:running_chat_count])
  202. assert_equal([], agent_state[:active_sessions])
  203. assert_equal(-2, agent_state[:seads_available])
  204. assert_equal(4, agent_state[:seads_total])
  205. assert_equal(true, agent_state[:active])
  206. # check agent2 state
  207. agent_state = Chat.agent_state_with_sessions(agent2.id)
  208. assert_equal(5, agent_state[:waiting_chat_count])
  209. assert_equal(1, agent_state[:running_chat_count])
  210. assert_equal([], agent_state[:active_sessions])
  211. assert_equal(-2, agent_state[:seads_available])
  212. assert_equal(4, agent_state[:seads_total])
  213. assert_equal(false, agent_state[:active])
  214. chat_session6.state = 'closed'
  215. chat_session6.save
  216. # check customer state
  217. assert_equal('no_seats_available', chat.customer_state[:state])
  218. assert_equal(5, chat.customer_state[:queue])
  219. # check agent1 state
  220. agent_state = Chat.agent_state_with_sessions(agent1.id)
  221. assert_equal(5, agent_state[:waiting_chat_count])
  222. assert_equal(0, agent_state[:running_chat_count])
  223. assert_equal([], agent_state[:active_sessions])
  224. assert_equal(-1, agent_state[:seads_available])
  225. assert_equal(4, agent_state[:seads_total])
  226. assert_equal(true, agent_state[:active])
  227. # check agent2 state
  228. agent_state = Chat.agent_state_with_sessions(agent2.id)
  229. assert_equal(5, agent_state[:waiting_chat_count])
  230. assert_equal(0, agent_state[:running_chat_count])
  231. assert_equal([], agent_state[:active_sessions])
  232. assert_equal(-1, agent_state[:seads_available])
  233. assert_equal(4, agent_state[:seads_total])
  234. assert_equal(false, agent_state[:active])
  235. chat_session5.destroy
  236. chat_session4.destroy
  237. # check customer state
  238. assert_equal('online', chat.customer_state[:state])
  239. # check agent1 state
  240. agent_state = Chat.agent_state_with_sessions(agent1.id)
  241. assert_equal(3, agent_state[:waiting_chat_count])
  242. assert_equal(0, agent_state[:running_chat_count])
  243. assert_equal([], agent_state[:active_sessions])
  244. assert_equal(1, agent_state[:seads_available])
  245. assert_equal(4, agent_state[:seads_total])
  246. assert_equal(true, agent_state[:active])
  247. # check agent2 state
  248. agent_state = Chat.agent_state_with_sessions(agent2.id)
  249. assert_equal(3, agent_state[:waiting_chat_count])
  250. assert_equal(0, agent_state[:running_chat_count])
  251. assert_equal([], agent_state[:active_sessions])
  252. assert_equal(1, agent_state[:seads_available])
  253. assert_equal(4, agent_state[:seads_total])
  254. assert_equal(false, agent_state[:active])
  255. end
  256. end