85 lines
2.8 KiB
Ruby
85 lines
2.8 KiB
Ruby
|
require 'rails_helper'
|
||
|
|
||
|
RSpec.describe Sessions::Event::ChatTransfer do
|
||
|
let(:client_id) { rand(123_456_789) }
|
||
|
let(:chat) { Chat.first }
|
||
|
let(:chat_transfer_into) { Chat.create!(name: 'chat 2', updated_by_id: 1, created_by_id: 1) }
|
||
|
let(:chat_session) do
|
||
|
Sessions.create('customer_session_id', { 'id' => customer.id }, {})
|
||
|
Sessions.queue('customer_session_id')
|
||
|
Chat::Session.create(
|
||
|
chat_id: chat.id,
|
||
|
user_id: nil,
|
||
|
preferences: { participants: ['customer_session_id'] },
|
||
|
state: 'running',
|
||
|
)
|
||
|
end
|
||
|
let!(:agent) do
|
||
|
create(:agent_user, preferences: { chat: { active: { chat.id.to_s => 'on' } } })
|
||
|
end
|
||
|
let!(:customer) { create(:customer_user) }
|
||
|
let(:subject_as_agent) do
|
||
|
Sessions.create(client_id, { 'id' => agent.id }, {})
|
||
|
Sessions.queue(client_id)
|
||
|
described_class.new(
|
||
|
payload: { 'data' => { 'session_id' => chat_session.session_id }, 'session_id' => chat_session.id, 'chat_id' => chat_transfer_into.id },
|
||
|
user_id: agent.id,
|
||
|
client_id: client_id,
|
||
|
clients: {},
|
||
|
session: { 'id' => agent.id },
|
||
|
)
|
||
|
end
|
||
|
|
||
|
before do
|
||
|
Setting.set('chat', true)
|
||
|
end
|
||
|
|
||
|
context 'when transfering a chat session as customer' do
|
||
|
let(:subject_as_customer) do
|
||
|
Sessions.create(client_id, { 'id' => customer.id }, {})
|
||
|
Sessions.queue(client_id)
|
||
|
described_class.new(
|
||
|
payload: { 'data' => { 'session_id' => chat_session.session_id }, 'chat_id' => chat_transfer_into.id },
|
||
|
user_id: customer.id,
|
||
|
client_id: client_id,
|
||
|
clients: {},
|
||
|
session: { 'id' => customer.id },
|
||
|
)
|
||
|
end
|
||
|
|
||
|
context 'without chat.agent permissions' do
|
||
|
it 'send out no_permission event to user' do
|
||
|
expect(subject_as_customer.run).to eq(nil)
|
||
|
messages = Sessions.queue(client_id)
|
||
|
expect(messages.count).to eq(1)
|
||
|
expect(messages).to eq([
|
||
|
'event' => 'chat_error',
|
||
|
'data' => {
|
||
|
'state' => 'no_permission'
|
||
|
}
|
||
|
])
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
context 'when transfering a chat session as agent' do
|
||
|
it 'send out chat_session_notice to customer and agent and set chat session to waiting' do
|
||
|
expect(subject_as_agent.run).to eq(nil)
|
||
|
|
||
|
messages_to_customer = Sessions.queue('customer_session_id')
|
||
|
expect(messages_to_customer.count).to eq(1)
|
||
|
expect(messages_to_customer[0]).to eq(
|
||
|
'event' => 'chat_session_notice',
|
||
|
'data' => {
|
||
|
'message' => 'Conversation transfered into other chat. Please stay tuned.',
|
||
|
'session_id' => chat_session.session_id,
|
||
|
},
|
||
|
)
|
||
|
|
||
|
messages_to_agent = Sessions.queue(client_id)
|
||
|
expect(messages_to_agent.count).to eq(0)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
end
|