Fixed issue#277 - chat history wrong on app/page reload.
This commit is contained in:
parent
c6ab14817a
commit
c58a73f684
2 changed files with 62 additions and 8 deletions
|
@ -41,7 +41,7 @@ class Chat::Session < ApplicationModel
|
|||
def position
|
||||
return if state != 'waiting'
|
||||
position = 0
|
||||
Chat::Session.where(state: 'waiting').order('created_at ASC').each { |chat_session|
|
||||
Chat::Session.where(state: 'waiting').order(created_at: :asc).each { |chat_session|
|
||||
position += 1
|
||||
break if chat_session.id == id
|
||||
}
|
||||
|
@ -52,7 +52,7 @@ class Chat::Session < ApplicationModel
|
|||
chat_session = Chat::Session.find_by(session_id: session_id)
|
||||
return if !chat_session
|
||||
session_attributes = []
|
||||
Chat::Message.where(chat_session_id: chat_session.id).each { |message|
|
||||
Chat::Message.where(chat_session_id: chat_session.id).order(created_at: :asc).each { |message|
|
||||
session_attributes.push message.attributes
|
||||
}
|
||||
session_attributes
|
||||
|
@ -60,10 +60,10 @@ class Chat::Session < ApplicationModel
|
|||
|
||||
def self.active_chats_by_user_id(user_id)
|
||||
actice_sessions = []
|
||||
Chat::Session.where(state: 'running', user_id: user_id).order('created_at ASC').each { |session|
|
||||
Chat::Session.where(state: 'running', user_id: user_id).order(created_at: :asc).each { |session|
|
||||
session_attributes = session.attributes
|
||||
session_attributes['messages'] = []
|
||||
Chat::Message.where(chat_session_id: session.id).each { |message|
|
||||
Chat::Message.where(chat_session_id: session.id).order(created_at: :asc).each { |message|
|
||||
session_attributes['messages'].push message.attributes
|
||||
}
|
||||
actice_sessions.push session_attributes
|
||||
|
|
|
@ -199,18 +199,64 @@ class ChatTest < ActiveSupport::TestCase
|
|||
assert_equal(6, agent_state[:seads_total])
|
||||
assert_equal(true, agent_state[:active])
|
||||
|
||||
chat_session6.user_id = agent1.id
|
||||
chat_session6.state = 'running'
|
||||
chat_session6.save
|
||||
|
||||
Chat::Message.create(
|
||||
chat_session_id: chat_session6.id,
|
||||
content: 'message 1',
|
||||
created_by_id: agent1.id,
|
||||
)
|
||||
sleep 1
|
||||
Chat::Message.create(
|
||||
chat_session_id: chat_session6.id,
|
||||
content: 'message 2',
|
||||
created_by_id: agent1.id,
|
||||
)
|
||||
sleep 1
|
||||
Chat::Message.create(
|
||||
chat_session_id: chat_session6.id,
|
||||
content: 'message 3',
|
||||
created_by_id: agent1.id,
|
||||
)
|
||||
sleep 1
|
||||
Chat::Message.create(
|
||||
chat_session_id: chat_session6.id,
|
||||
content: 'message 4',
|
||||
created_by_id: nil,
|
||||
)
|
||||
|
||||
# check customer state
|
||||
assert_equal('no_seats_available', chat.customer_state[:state])
|
||||
assert_equal(5, chat.customer_state[:queue])
|
||||
customer_state = chat.customer_state
|
||||
assert_equal('no_seats_available', customer_state[:state])
|
||||
assert_equal(5, customer_state[:queue])
|
||||
|
||||
# customer chat state
|
||||
customer_state = chat.customer_state(chat_session6.session_id)
|
||||
assert_equal('reconnect', customer_state[:state])
|
||||
assert(customer_state[:session])
|
||||
assert_equal(Array, customer_state[:session].class)
|
||||
assert_equal('message 1', customer_state[:session][0]['content'])
|
||||
assert_equal('message 2', customer_state[:session][1]['content'])
|
||||
assert_equal('message 3', customer_state[:session][2]['content'])
|
||||
assert_equal('message 4', customer_state[:session][3]['content'])
|
||||
assert_equal('Notification Agent1', customer_state[:agent][:name])
|
||||
assert_equal(nil, customer_state[:agent][:avatar])
|
||||
|
||||
# check agent1 state
|
||||
agent_state = Chat.agent_state_with_sessions(agent1.id)
|
||||
assert_equal(5, agent_state[:waiting_chat_count])
|
||||
assert_equal(1, agent_state[:running_chat_count])
|
||||
assert_equal([], agent_state[:active_sessions])
|
||||
assert_equal(Array, agent_state[:active_sessions].class)
|
||||
assert_equal(chat.id, agent_state[:active_sessions][0]['chat_id'])
|
||||
assert_equal(agent1.id, agent_state[:active_sessions][0]['user_id'])
|
||||
assert(agent_state[:active_sessions][0]['messages'])
|
||||
assert_equal(Array, agent_state[:active_sessions][0]['messages'].class)
|
||||
assert_equal('message 1', agent_state[:active_sessions][0]['messages'][0]['content'])
|
||||
assert_equal('message 2', agent_state[:active_sessions][0]['messages'][1]['content'])
|
||||
assert_equal('message 3', agent_state[:active_sessions][0]['messages'][2]['content'])
|
||||
assert_equal('message 4', agent_state[:active_sessions][0]['messages'][3]['content'])
|
||||
assert_equal(0, agent_state[:seads_available])
|
||||
assert_equal(6, agent_state[:seads_total])
|
||||
assert_equal(true, agent_state[:active])
|
||||
|
@ -235,7 +281,15 @@ class ChatTest < ActiveSupport::TestCase
|
|||
agent_state = Chat.agent_state_with_sessions(agent1.id)
|
||||
assert_equal(5, agent_state[:waiting_chat_count])
|
||||
assert_equal(1, agent_state[:running_chat_count])
|
||||
assert_equal([], agent_state[:active_sessions])
|
||||
assert_equal(Array, agent_state[:active_sessions].class)
|
||||
assert_equal(chat.id, agent_state[:active_sessions][0]['chat_id'])
|
||||
assert_equal(agent1.id, agent_state[:active_sessions][0]['user_id'])
|
||||
assert(agent_state[:active_sessions][0]['messages'])
|
||||
assert_equal(Array, agent_state[:active_sessions][0]['messages'].class)
|
||||
assert_equal('message 1', agent_state[:active_sessions][0]['messages'][0]['content'])
|
||||
assert_equal('message 2', agent_state[:active_sessions][0]['messages'][1]['content'])
|
||||
assert_equal('message 3', agent_state[:active_sessions][0]['messages'][2]['content'])
|
||||
assert_equal('message 4', agent_state[:active_sessions][0]['messages'][3]['content'])
|
||||
assert_equal(-2, agent_state[:seads_available])
|
||||
assert_equal(4, agent_state[:seads_total])
|
||||
assert_equal(true, agent_state[:active])
|
||||
|
|
Loading…
Reference in a new issue