8e75b3fc2a
fixes: chatwoot/product#493
45 lines
1.9 KiB
Ruby
45 lines
1.9 KiB
Ruby
require 'rails_helper'
|
|
|
|
describe OnlineStatusTracker do
|
|
let!(:account) { create(:account) }
|
|
let!(:user1) { create(:user, account: account) }
|
|
let!(:user2) { create(:user, account: account) }
|
|
let!(:user3) { create(:user, account: account) }
|
|
|
|
context 'when get_available_users' do
|
|
before do
|
|
described_class.update_presence(account.id, 'User', user1.id)
|
|
end
|
|
|
|
it 'returns only the online user ids with presence' do
|
|
expect(described_class.get_available_users(account.id).keys).to contain_exactly(user1.id.to_s)
|
|
expect(described_class.get_available_users(account.id).values).not_to include(user3.id)
|
|
end
|
|
|
|
it 'returns agents who have auto offline configured false' do
|
|
user2.account_users.first.update(auto_offline: false)
|
|
expect(described_class.get_available_users(account.id).keys).to contain_exactly(user1.id.to_s, user2.id.to_s)
|
|
end
|
|
end
|
|
|
|
context 'when get_available_contacts' do
|
|
let(:online_contact) { create(:contact, account: account) }
|
|
let(:offline_contact) { create(:contact, account: account) }
|
|
|
|
before do
|
|
described_class.update_presence(account.id, 'Contact', online_contact.id)
|
|
# creating a stale record for offline contact presence
|
|
::Redis::Alfred.zadd(format(::Redis::Alfred::ONLINE_PRESENCE_CONTACTS, account_id: account.id),
|
|
(Time.zone.now - (OnlineStatusTracker::PRESENCE_DURATION + 20)).to_i, offline_contact.id)
|
|
end
|
|
|
|
it 'returns only the online contact ids with presence' do
|
|
expect(described_class.get_available_contacts(account.id).keys).to contain_exactly(online_contact.id.to_s)
|
|
end
|
|
|
|
it 'flushes the stale records from sorted set after the duration' do
|
|
described_class.get_available_contacts(account.id)
|
|
expect(::Redis::Alfred.zscore(format(::Redis::Alfred::ONLINE_PRESENCE_CONTACTS, account_id: account.id), offline_contact.id)).to be_nil
|
|
end
|
|
end
|
|
end
|