2020-07-07 18:44:07 +00:00
|
|
|
require 'rails_helper'
|
|
|
|
|
|
|
|
describe RoundRobin::ManageService do
|
2021-10-14 08:27:01 +00:00
|
|
|
subject(:round_robin_manage_service) { ::RoundRobin::ManageService.new(inbox: inbox) }
|
|
|
|
|
2020-07-07 18:44:07 +00:00
|
|
|
let!(:account) { create(:account) }
|
|
|
|
let!(:inbox) { create(:inbox, account: account) }
|
|
|
|
let!(:inbox_members) { create_list(:inbox_member, 5, inbox: inbox) }
|
|
|
|
|
|
|
|
describe '#available_agent' do
|
|
|
|
it 'gets the first available agent and move agent to end of the list' do
|
|
|
|
expected_queue = [inbox_members[0].user_id, inbox_members[4].user_id, inbox_members[3].user_id, inbox_members[2].user_id,
|
|
|
|
inbox_members[1].user_id].map(&:to_s)
|
2021-10-14 08:27:01 +00:00
|
|
|
round_robin_manage_service.available_agent
|
|
|
|
expect(round_robin_manage_service.send(:queue)).to eq(expected_queue)
|
2020-07-07 18:44:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'gets intersection of priority list and agent queue. get and move agent to the end of the list' do
|
|
|
|
expected_queue = [inbox_members[2].user_id, inbox_members[4].user_id, inbox_members[3].user_id, inbox_members[1].user_id,
|
|
|
|
inbox_members[0].user_id].map(&:to_s)
|
2021-10-14 08:27:01 +00:00
|
|
|
expect(round_robin_manage_service.available_agent(priority_list: [inbox_members[3].user_id,
|
|
|
|
inbox_members[2].user_id])).to eq inbox_members[2].user
|
|
|
|
expect(round_robin_manage_service.send(:queue)).to eq(expected_queue)
|
2020-07-07 18:44:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'constructs round_robin_queue if queue is not present' do
|
2021-10-14 08:27:01 +00:00
|
|
|
round_robin_manage_service.clear_queue
|
|
|
|
expect(round_robin_manage_service.send(:queue)).to eq([])
|
|
|
|
round_robin_manage_service.available_agent
|
2020-07-07 18:44:07 +00:00
|
|
|
# the service constructed the redis queue before performing
|
2021-10-14 08:27:01 +00:00
|
|
|
expect(round_robin_manage_service.send(:queue).sort.map(&:to_i)).to eq(inbox_members.map(&:user_id).sort)
|
2020-07-07 18:44:07 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'validates the queue and correct it before performing round robin' do
|
|
|
|
# adding some invalid ids to queue
|
2021-10-14 08:27:01 +00:00
|
|
|
round_robin_manage_service.add_agent_to_queue([2, 3, 5, 9])
|
|
|
|
expect(round_robin_manage_service.send(:queue).sort.map(&:to_i)).not_to eq(inbox_members.map(&:user_id).sort)
|
|
|
|
round_robin_manage_service.available_agent
|
2020-07-07 18:44:07 +00:00
|
|
|
# the service have refreshed the redis queue before performing
|
2021-10-14 08:27:01 +00:00
|
|
|
expect(round_robin_manage_service.send(:queue).sort.map(&:to_i)).to eq(inbox_members.map(&:user_id).sort)
|
2020-07-07 18:44:07 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|