diff --git a/app/services/contacts/filter_service.rb b/app/services/contacts/filter_service.rb index 7f2d6a0b8..9d017ea75 100644 --- a/app/services/contacts/filter_service.rb +++ b/app/services/contacts/filter_service.rb @@ -21,7 +21,7 @@ class Contacts::FilterService < FilterService def filter_values(query_hash) current_val = query_hash['values'][0] if query_hash['attribute_key'] == 'phone_number' - "+#{current_val}" + "+#{current_val&.delete('+')}" elsif query_hash['attribute_key'] == 'country_code' current_val.downcase else diff --git a/spec/services/contacts/filter_service_spec.rb b/spec/services/contacts/filter_service_spec.rb index 22882ae81..77d3a49f3 100644 --- a/spec/services/contacts/filter_service_spec.rb +++ b/spec/services/contacts/filter_service_spec.rb @@ -9,7 +9,7 @@ describe Contacts::FilterService do let!(:inbox) { create(:inbox, account: account, enable_auto_assignment: false) } let!(:en_contact) { create(:contact, account: account, additional_attributes: { 'country_code': 'uk' }) } let!(:el_contact) { create(:contact, account: account, additional_attributes: { 'country_code': 'gr' }) } - let!(:cs_contact) { create(:contact, account: account, additional_attributes: { 'country_code': 'cz' }) } + let!(:cs_contact) { create(:contact, :with_phone_number, account: account, additional_attributes: { 'country_code': 'cz' }) } before do create(:inbox_member, user: first_user, inbox: inbox) @@ -65,6 +65,42 @@ describe Contacts::FilterService do end end + context 'with standard attributes - phone' do + it 'filter contacts by name' do + params[:payload] = [ + { + attribute_key: 'phone_number', + filter_operator: 'equal_to', + values: [cs_contact.phone_number], + query_operator: nil + }.with_indifferent_access + ] + + result = filter_service.new(account, first_user, params).perform + expect(result[:count]).to be 1 + expect(result[:contacts].length).to be 1 + expect(result[:contacts].first.name).to eq(cs_contact.name) + end + end + + context 'with standard attributes - phone (without +)' do + it 'filter contacts by name' do + params[:payload] = [ + { + attribute_key: 'phone_number', + filter_operator: 'equal_to', + values: [cs_contact.phone_number[1..]], + query_operator: nil + }.with_indifferent_access + ] + + result = filter_service.new(account, first_user, params).perform + expect(result[:count]).to be 1 + expect(result[:contacts].length).to be 1 + expect(result[:contacts].first.name).to eq(cs_contact.name) + end + end + context 'with standard attributes - blocked' do it 'filter contacts by blocked' do blocked_contact = create(:contact, account: account, blocked: true)