diff --git a/app/builders/contact_builder.rb b/app/builders/contact_builder.rb index 92c706a8a..ac24aca34 100644 --- a/app/builders/contact_builder.rb +++ b/app/builders/contact_builder.rb @@ -38,17 +38,30 @@ class ContactBuilder end def find_contact - contact = nil - - contact = account.contacts.find_by(identifier: contact_attributes[:identifier]) if contact_attributes[:identifier].present? - - contact ||= account.contacts.find_by(email: contact_attributes[:email]) if contact_attributes[:email].present? - - contact ||= account.contacts.find_by(phone_number: contact_attributes[:phone_number]) if contact_attributes[:phone_number].present? - + contact = find_contact_by_identifier(contact_attributes[:identifier]) + contact ||= find_contact_by_email(contact_attributes[:email]) + contact ||= find_contact_by_phone_number(contact_attributes[:phone_number]) contact end + def find_contact_by_identifier(identifier) + return if identifier.blank? + + account.contacts.find_by(identifier: identifier) + end + + def find_contact_by_email(email) + return if email.blank? + + account.contacts.find_by(email: email.downcase) + end + + def find_contact_by_phone_number(phone_number) + return if phone_number.blank? + + account.contacts.find_by(phone_number: phone_number) + end + def build_contact_inbox ActiveRecord::Base.transaction do contact = find_contact || create_contact @@ -57,6 +70,7 @@ class ContactBuilder contact_inbox rescue StandardError => e Rails.logger.info e + raise e end end end diff --git a/app/presenters/mail_presenter.rb b/app/presenters/mail_presenter.rb index 846d50694..7a2bde9b5 100644 --- a/app/presenters/mail_presenter.rb +++ b/app/presenters/mail_presenter.rb @@ -77,6 +77,11 @@ class MailPresenter < SimpleDelegator } end + def from + # changing to downcase to avoid case mismatch while finding contact + @mail.from.map(&:downcase) + end + private # forcing the encoding of the content to UTF-8 so as to be compatible with database and serializers diff --git a/spec/builders/contact_builder_spec.rb b/spec/builders/contact_builder_spec.rb index d4345032e..b5249ada4 100644 --- a/spec/builders/contact_builder_spec.rb +++ b/spec/builders/contact_builder_spec.rb @@ -66,6 +66,20 @@ describe ::ContactBuilder do expect(contact_inbox.contact.id).to be(contact.id) end + it 'doesnot create contact when an uppercase email is passed for an already existing contact email' do + contact_inbox = described_class.new( + source_id: '123456', + inbox: inbox, + contact_attributes: { + name: 'Contact', + phone_number: '+1234567890', + email: contact.email.upcase + } + ).perform + + expect(contact_inbox.contact.id).to be(contact.id) + end + it 'doesnot create contact if it already exist with phone number' do contact_inbox = described_class.new( source_id: '123456', diff --git a/spec/fixtures/files/welcome.eml b/spec/fixtures/files/welcome.eml index e013e4c8e..196025afa 100644 --- a/spec/fixtures/files/welcome.eml +++ b/spec/fixtures/files/welcome.eml @@ -1,4 +1,4 @@ -From: Sony Mathew +From: Sony Mathew Mime-Version: 1.0 (Apple Message framework v1244.3) Content-Type: multipart/alternative; boundary="Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74" Subject: Discussion: Let's debate these attachments @@ -628,4 +628,4 @@ r/Fxp3Y0d2/4tvsR95f/AAH7Gvwmn9rUHsOgUCg//9k= --Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1-- ---Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74-- \ No newline at end of file +--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74-- diff --git a/spec/presenters/mail_presenter_spec.rb b/spec/presenters/mail_presenter_spec.rb index 2a2b278f6..e3f535bda 100644 --- a/spec/presenters/mail_presenter_spec.rb +++ b/spec/presenters/mail_presenter_spec.rb @@ -52,5 +52,9 @@ RSpec.describe MailPresenter do expect(data[:multipart]).to eq(true) expect(data[:subject]).to eq(decorated_mail.subject) end + + it 'give email from in downcased format' do + expect(decorated_mail.from.first.eql?(mail.from.first.downcase)).to eq true + end end end