From 83d11b122e40e93cbef6f5ddf9c3ce9b5eaaa63a Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Tue, 5 Sep 2017 21:53:37 +0200 Subject: [PATCH] Fixed issue #1253 - Duplicates in Caller Log (Sipgate). --- app/models/cti/caller_id.rb | 6 +- app/models/cti/log.rb | 17 +++- test/unit/cti_caller_id_test.rb | 137 +++++++++++++++++++++++++------- 3 files changed, 130 insertions(+), 30 deletions(-) diff --git a/app/models/cti/caller_id.rb b/app/models/cti/caller_id.rb index a34a2d8e3..bbfaa26a2 100644 --- a/app/models/cti/caller_id.rb +++ b/app/models/cti/caller_id.rb @@ -54,8 +54,10 @@ returns search_params[:level] = level end - result = Cti::CallerId.where(search_params).group(:user_id, :id).order(id: 'DESC').limit(20) - + caller_ids = Cti::CallerId.select('MAX(id) as caller_id').where(search_params).group(:user_id).order('caller_id DESC').limit(20).map(&:caller_id) + Cti::CallerId.where(id: caller_ids).order(id: :desc).each { |record| + result.push record + } break if result.present? } result diff --git a/app/models/cti/log.rb b/app/models/cti/log.rb index fa63b7d48..0d23718d7 100644 --- a/app/models/cti/log.rb +++ b/app/models/cti/log.rb @@ -266,7 +266,22 @@ returns } end - # processes a incoming event +=begin + +processes a incoming event + +Cti::Log.process( + 'cause' => '', + 'event' => 'newCall', + 'user' => 'user 1', + 'from' => '4912347114711', + 'to' => '4930600000000', + 'callId' => '4991155921769858278-1', + 'direction' => 'in', +) + +=end + def self.process(params) comment = params['cause'] event = params['event'] diff --git a/test/unit/cti_caller_id_test.rb b/test/unit/cti_caller_id_test.rb index 8619fd9b5..94c08c078 100644 --- a/test/unit/cti_caller_id_test.rb +++ b/test/unit/cti_caller_id_test.rb @@ -3,12 +3,12 @@ require 'test_helper' class CtiCallerIdTest < ActiveSupport::TestCase - test '2 lookups' do + setup do Ticket.destroy_all Cti::CallerId.destroy_all - agent1 = User.create_or_update( + @agent1 = User.create_or_update( login: 'ticket-caller_id-agent1@example.com', firstname: 'CallerId', lastname: 'Agent1', @@ -22,7 +22,7 @@ class CtiCallerIdTest < ActiveSupport::TestCase updated_by_id: 1, created_by_id: 1, ) - agent2 = User.create_or_update( + @agent2 = User.create_or_update( login: 'ticket-caller_id-agent2@example.com', firstname: 'CallerId', lastname: 'Agent2', @@ -34,7 +34,7 @@ class CtiCallerIdTest < ActiveSupport::TestCase updated_by_id: 1, created_by_id: 1, ) - agent3 = User.create_or_update( + @agent3 = User.create_or_update( login: 'ticket-caller_id-agent3@example.com', firstname: 'CallerId', lastname: 'Agent3', @@ -46,7 +46,7 @@ class CtiCallerIdTest < ActiveSupport::TestCase created_by_id: 1, ) - customer1 = User.create_or_update( + @customer1 = User.create_or_update( login: 'ticket-caller_id-customer1@example.com', firstname: 'CallerId', lastname: 'Customer1', @@ -57,6 +57,10 @@ class CtiCallerIdTest < ActiveSupport::TestCase created_by_id: 1, ) + end + + test '1 lookups' do + Cti::CallerId.rebuild caller_ids = Cti::CallerId.lookup('491111222277') @@ -64,27 +68,27 @@ class CtiCallerIdTest < ActiveSupport::TestCase caller_ids = Cti::CallerId.lookup('491111222223') assert_equal(1, caller_ids.length) - assert_equal(agent1.id, caller_ids[0].user_id) + assert_equal(@agent1.id, caller_ids[0].user_id) assert_equal('known', caller_ids[0].level) caller_ids = Cti::CallerId.lookup('492222222222') assert_equal(2, caller_ids.length) - assert_equal(agent3.id, caller_ids[0].user_id) + assert_equal(@agent3.id, caller_ids[0].user_id) assert_equal('known', caller_ids[0].level) - assert_equal(agent2.id, caller_ids[1].user_id) + assert_equal(@agent2.id, caller_ids[1].user_id) assert_equal('known', caller_ids[1].level) # create ticket in group - ticket1 = Ticket.create( + ticket1 = Ticket.create!( title: 'some caller id test 1', group: Group.lookup(name: 'Users'), - customer: customer1, + 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, + updated_by_id: @agent1.id, + created_by_id: @agent1.id, ) - article1 = Ticket::Article.create( + article1 = Ticket::Article.create!( ticket_id: ticket1.id, from: 'some_sender@example.com', to: 'some_recipient@example.com', @@ -96,22 +100,22 @@ 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, + updated_by_id: @customer1.id, + created_by_id: @customer1.id, ) assert(ticket1) # create ticket in group - ticket2 = Ticket.create( + ticket2 = Ticket.create!( title: 'some caller id test 2', group: Group.lookup(name: 'Users'), - customer: customer1, + 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, + updated_by_id: @agent1.id, + created_by_id: @agent1.id, ) - article2 = Ticket::Article.create( + article2 = Ticket::Article.create!( ticket_id: ticket2.id, from: 'some_sender@example.com', to: 'some_recipient@example.com', @@ -123,8 +127,8 @@ Mob: +49 333 1112222", internal: false, sender: Ticket::Article::Sender.where(name: 'Agent').first, type: Ticket::Article::Type.where(name: 'email').first, - updated_by_id: agent1.id, - created_by_id: agent1.id, + updated_by_id: @agent1.id, + created_by_id: @agent1.id, ) assert(ticket2) @@ -135,19 +139,19 @@ Mob: +49 333 1112222", caller_ids = Cti::CallerId.lookup('491111222223') assert_equal(1, caller_ids.length) - assert_equal(agent1.id, caller_ids[0].user_id) + assert_equal(@agent1.id, caller_ids[0].user_id) assert_equal('known', caller_ids[0].level) caller_ids = Cti::CallerId.lookup('492222222222') assert_equal(2, caller_ids.length) - assert_equal(agent3.id, caller_ids[0].user_id) + assert_equal(@agent3.id, caller_ids[0].user_id) assert_equal('known', caller_ids[0].level) - assert_equal(agent2.id, caller_ids[1].user_id) + assert_equal(@agent2.id, caller_ids[1].user_id) assert_equal('known', caller_ids[1].level) caller_ids = Cti::CallerId.lookup('492226112222') assert_equal(1, caller_ids.length) - assert_equal(customer1.id, caller_ids[0].user_id) + assert_equal(@customer1.id, caller_ids[0].user_id) assert_equal('maybe', caller_ids[0].level) caller_ids = Cti::CallerId.lookup('492221112222') @@ -155,7 +159,7 @@ Mob: +49 333 1112222", end - test '3 lookups' do + test '2 lookups' do Cti::CallerId.destroy_all @@ -244,4 +248,83 @@ Mob: +49 333 1112222", assert_nil(caller_ids[0].comment) 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 + end