Refactoring: Migrate third test case in cti_caller_test.rb
This commit is contained in:
parent
39f769aa13
commit
590a8f7614
5 changed files with 122 additions and 129 deletions
|
@ -1,9 +1,9 @@
|
||||||
FactoryBot.define do
|
FactoryBot.define do
|
||||||
factory :cti_log, class: 'cti/log' do
|
factory :'cti/log', aliases: %i[cti_log] do
|
||||||
direction { %w[in out].sample }
|
direction { %w[in out].sample }
|
||||||
state { %w[newCall answer hangup].sample }
|
state { %w[newCall answer hangup].sample }
|
||||||
from '4930609854180'
|
from { '4930609854180' }
|
||||||
to '4930609811111'
|
to { '4930609811111' }
|
||||||
call_id { (Cti::Log.pluck(:call_id).max || '0').next } # has SQL UNIQUE constraint
|
call_id { (Cti::Log.pluck(:call_id).map(&:to_i).max || 0).next } # has SQL UNIQUE constraint
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -219,7 +219,7 @@ RSpec.describe Cti::CallerId do
|
||||||
let(:attributes) { attributes_for(:caller_id) }
|
let(:attributes) { attributes_for(:caller_id) }
|
||||||
|
|
||||||
it 'wraps .find_or_initialize_by (passing only five defining attributes)' do
|
it 'wraps .find_or_initialize_by (passing only five defining attributes)' do
|
||||||
expect(described_class)
|
expect(Cti::CallerId)
|
||||||
.to receive(:find_or_initialize_by)
|
.to receive(:find_or_initialize_by)
|
||||||
.with(attributes.slice(:caller_id, :level, :object, :o_id, :user_id))
|
.with(attributes.slice(:caller_id, :level, :object, :o_id, :user_id))
|
||||||
.and_call_original
|
.and_call_original
|
||||||
|
|
|
@ -1,46 +0,0 @@
|
||||||
require 'rails_helper'
|
|
||||||
|
|
||||||
RSpec.describe Cti::Log do
|
|
||||||
subject { create(:cti_log, **factory_attributes) }
|
|
||||||
let(:factory_attributes) { {} }
|
|
||||||
|
|
||||||
context 'with complete, E164 international numbers' do
|
|
||||||
let(:factory_attributes) { { from: '4930609854180', to: '4930609811111' } }
|
|
||||||
|
|
||||||
describe '#from_pretty' do
|
|
||||||
it 'gives the number in prettified format' do
|
|
||||||
expect(subject.from_pretty).to eq('+49 30 609854180')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#to_pretty' do
|
|
||||||
it 'gives the number in prettified format' do
|
|
||||||
expect(subject.to_pretty).to eq('+49 30 609811111')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
context 'with private network numbers' do
|
|
||||||
let(:factory_attributes) { { from: '007', to: '008' } }
|
|
||||||
|
|
||||||
describe '#from_pretty' do
|
|
||||||
it 'gives the number unaltered' do
|
|
||||||
expect(subject.from_pretty).to eq('007')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#to_pretty' do
|
|
||||||
it 'gives the number unaltered' do
|
|
||||||
expect(subject.to_pretty).to eq('008')
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
describe '#to_json' do
|
|
||||||
let(:virtual_attributes) { %w[from_pretty to_pretty] }
|
|
||||||
|
|
||||||
it 'includes virtual attributes' do
|
|
||||||
expect(subject.as_json).to include(*virtual_attributes)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
116
spec/models/cti/log_spec.rb
Normal file
116
spec/models/cti/log_spec.rb
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Cti::Log do
|
||||||
|
subject(:log) { create(:'cti/log') }
|
||||||
|
|
||||||
|
describe '.log' do
|
||||||
|
it 'returns a hash with :list and :assets keys' do
|
||||||
|
expect(Cti::Log.log).to be_a(Hash).and include(:list, :assets)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when over 60 Log records exist' do
|
||||||
|
subject!(:cti_logs) { create_list(:'cti/log', 61) }
|
||||||
|
|
||||||
|
it 'returns the 60 latest ones in the :list key' do
|
||||||
|
expect(Cti::Log.log[:list]).to match_array(cti_logs.last(60))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when Log records have arrays of CallerId attributes in #preferences[:to] / #preferences[:from]' do
|
||||||
|
subject!(:cti_log) { create(:'cti/log', preferences: { from: [caller_id] }) }
|
||||||
|
let(:caller_id) { create(:caller_id) }
|
||||||
|
let(:user) { User.find_by(id: caller_id.user_id) }
|
||||||
|
|
||||||
|
it 'returns a hash of the CallerId Users and their assets in the :assets key' do
|
||||||
|
expect(Cti::Log.log[:assets]).to eq(user.assets({}))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '.process' do
|
||||||
|
context 'for event "newCall"' do
|
||||||
|
let(:attributes) do
|
||||||
|
{
|
||||||
|
'cause' => '',
|
||||||
|
'event' => 'newCall',
|
||||||
|
'user' => 'user 1',
|
||||||
|
'from' => '49123456',
|
||||||
|
'to' => '49123457',
|
||||||
|
'callId' => '1',
|
||||||
|
'direction' => 'in',
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'creates a new Log record' do
|
||||||
|
expect { Cti::Log.process(attributes) }
|
||||||
|
.to change { Cti::Log.count }.by(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for direction "in", with a CallerId record matching the "from" number' do
|
||||||
|
let!(:caller_id) { create(:caller_id, caller_id: '49123456') }
|
||||||
|
before { attributes.merge!('direction' => 'in') }
|
||||||
|
|
||||||
|
it 'saves that CallerId’s attributes in the new Log’s #preferences[:from] attribute' do
|
||||||
|
Cti::Log.process(attributes)
|
||||||
|
|
||||||
|
expect(Cti::Log.last.preferences[:from].first)
|
||||||
|
.to include(caller_id.attributes.except('created_at')) # Checking equality of Time objects is error-prone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'for direction "out", with a CallerId record matching the "to" number' do
|
||||||
|
let!(:caller_id) { create(:caller_id, caller_id: '49123457') }
|
||||||
|
before { attributes.merge!('direction' => 'out') }
|
||||||
|
|
||||||
|
it 'saves that CallerId’s attributes in the new Log’s #preferences[:to] attribute' do
|
||||||
|
Cti::Log.process(attributes)
|
||||||
|
|
||||||
|
expect(Cti::Log.last.preferences[:to].first)
|
||||||
|
.to include(caller_id.attributes.except('created_at')) # Checking equality of Time objects is error-prone
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#from_pretty' do
|
||||||
|
context 'with complete, E164 international numbers' do
|
||||||
|
subject(:log) { create(:cti_log, from: '4930609854180') }
|
||||||
|
|
||||||
|
it 'gives the number in prettified format' do
|
||||||
|
expect(log.from_pretty).to eq('+49 30 609854180')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with private network numbers' do
|
||||||
|
subject(:log) { create(:cti_log, from: '007') }
|
||||||
|
|
||||||
|
it 'gives the number unaltered' do
|
||||||
|
expect(log.from_pretty).to eq('007')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#to_pretty' do
|
||||||
|
context 'with complete, E164 international numbers' do
|
||||||
|
subject(:log) { create(:cti_log, to: '4930609811111') }
|
||||||
|
|
||||||
|
it 'gives the number in prettified format' do
|
||||||
|
expect(log.to_pretty).to eq('+49 30 609811111')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'with private network numbers' do
|
||||||
|
subject(:log) { create(:cti_log, to: '008') }
|
||||||
|
|
||||||
|
it 'gives the number unaltered' do
|
||||||
|
expect(log.to_pretty).to eq('008')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe '#to_json' do
|
||||||
|
it 'includes virtual attributes' do
|
||||||
|
expect(log.as_json).to include('from_pretty', 'to_pretty')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -46,6 +46,7 @@ class CtiCallerIdTest < ActiveSupport::TestCase
|
||||||
firstname: 'CallerId',
|
firstname: 'CallerId',
|
||||||
lastname: 'Customer1',
|
lastname: 'Customer1',
|
||||||
email: 'ticket-caller_id-customer1@example.com',
|
email: 'ticket-caller_id-customer1@example.com',
|
||||||
|
phone: '+49 123 456',
|
||||||
active: true,
|
active: true,
|
||||||
updated_by_id: 1,
|
updated_by_id: 1,
|
||||||
created_by_id: 1,
|
created_by_id: 1,
|
||||||
|
@ -55,84 +56,6 @@ class CtiCallerIdTest < ActiveSupport::TestCase
|
||||||
Scheduler.worker(true)
|
Scheduler.worker(true)
|
||||||
end
|
end
|
||||||
|
|
||||||
test '3 process - log' do
|
|
||||||
|
|
||||||
ticket1 = Ticket.create!(
|
|
||||||
title: 'some caller id test 1',
|
|
||||||
group: Group.lookup(name: 'Users'),
|
|
||||||
customer: @customer1,
|
|
||||||
state: Ticket::State.lookup(name: 'new'),
|
|
||||||
priority: Ticket::Priority.lookup(name: '2 normal'),
|
|
||||||
updated_by_id: @agent1.id,
|
|
||||||
created_by_id: @agent1.id,
|
|
||||||
)
|
|
||||||
article1 = Ticket::Article.create!(
|
|
||||||
ticket_id: ticket1.id,
|
|
||||||
from: 'some_sender@example.com',
|
|
||||||
to: 'some_recipient@example.com',
|
|
||||||
subject: 'some subject',
|
|
||||||
message_id: 'some@id',
|
|
||||||
body: "some message\nFon (GEL): +49 111 366-1111 Mi-Fr
|
|
||||||
Fon (LIN): +49 222 6112222 Mo-Di
|
|
||||||
Mob: +49 333 8362222",
|
|
||||||
internal: false,
|
|
||||||
sender: Ticket::Article::Sender.where(name: 'Customer').first,
|
|
||||||
type: Ticket::Article::Type.where(name: 'email').first,
|
|
||||||
updated_by_id: @customer1.id,
|
|
||||||
created_by_id: @customer1.id,
|
|
||||||
)
|
|
||||||
assert(ticket1)
|
|
||||||
ticket2 = Ticket.create!(
|
|
||||||
title: 'some caller id test 2',
|
|
||||||
group: Group.lookup(name: 'Users'),
|
|
||||||
customer: @customer1,
|
|
||||||
state: Ticket::State.lookup(name: 'new'),
|
|
||||||
priority: Ticket::Priority.lookup(name: '2 normal'),
|
|
||||||
updated_by_id: @agent1.id,
|
|
||||||
created_by_id: @agent1.id,
|
|
||||||
)
|
|
||||||
article2 = Ticket::Article.create!(
|
|
||||||
ticket_id: ticket2.id,
|
|
||||||
from: 'some_sender@example.com',
|
|
||||||
to: 'some_recipient@example.com',
|
|
||||||
subject: 'some subject',
|
|
||||||
message_id: 'some@id',
|
|
||||||
body: "some message\nFon (GEL): +49 111 366-1111 Mi-Fr
|
|
||||||
Fon (LIN): +49 222 6112222 Mo-Di
|
|
||||||
Mob: +49 333 8362222",
|
|
||||||
internal: false,
|
|
||||||
sender: Ticket::Article::Sender.where(name: 'Customer').first,
|
|
||||||
type: Ticket::Article::Type.where(name: 'email').first,
|
|
||||||
updated_by_id: @customer1.id,
|
|
||||||
created_by_id: @customer1.id,
|
|
||||||
)
|
|
||||||
assert(ticket2)
|
|
||||||
|
|
||||||
Cti::CallerId.rebuild
|
|
||||||
|
|
||||||
Cti::Log.process(
|
|
||||||
'cause' => '',
|
|
||||||
'event' => 'newCall',
|
|
||||||
'user' => 'user 1',
|
|
||||||
'from' => '491113661111',
|
|
||||||
'to' => '4930600000000',
|
|
||||||
'callId' => '4991155921769858278-1',
|
|
||||||
'direction' => 'in',
|
|
||||||
)
|
|
||||||
|
|
||||||
log = Cti::Log.log
|
|
||||||
assert(log[:list])
|
|
||||||
assert(log[:assets])
|
|
||||||
assert(log[:list][0])
|
|
||||||
assert_not(log[:list][1])
|
|
||||||
assert(log[:list][0].preferences)
|
|
||||||
assert(log[:list][0].preferences[:from])
|
|
||||||
assert_equal(1, log[:list][0].preferences[:from].count)
|
|
||||||
assert_equal(@customer1.id, log[:list][0].preferences[:from][0][:user_id])
|
|
||||||
assert_equal('maybe', log[:list][0].preferences[:from][0][:level])
|
|
||||||
|
|
||||||
end
|
|
||||||
|
|
||||||
test '4 touch caller log / don\'t touch caller log' do
|
test '4 touch caller log / don\'t touch caller log' do
|
||||||
5.times do |count|
|
5.times do |count|
|
||||||
travel 2.seconds
|
travel 2.seconds
|
||||||
|
|
Loading…
Reference in a new issue