From 3a5e34fccb23b2c3f7054b00ba22a635fb4cacb3 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Tue, 26 Apr 2022 15:13:28 +0530 Subject: [PATCH] fix: Check `phone_number` and `email` changes are exist before validation (#4551) --- app/models/contact.rb | 4 ++-- spec/models/contact_spec.rb | 40 ++++++++++++++++++++++++++++++++++++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/app/models/contact.rb b/app/models/contact.rb index 304edf681..53dc9d281 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -145,13 +145,13 @@ class Contact < ApplicationRecord def phone_number_format return if phone_number.blank? - self.phone_number = changes['phone_number'].first unless phone_number.match?(/\+[1-9]\d{1,14}\z/) + self.phone_number = phone_number_was unless phone_number.match?(/\+[1-9]\d{1,14}\z/) end def email_format return if email.blank? - self.email = changes['email'].first unless email.match(Devise.email_regexp) + self.email = email_was unless email.match(Devise.email_regexp) end def prepare_contact_attributes diff --git a/spec/models/contact_spec.rb b/spec/models/contact_spec.rb index f8b701a3a..416e0e68d 100644 --- a/spec/models/contact_spec.rb +++ b/spec/models/contact_spec.rb @@ -12,7 +12,7 @@ RSpec.describe Contact do it { is_expected.to have_many(:conversations).dependent(:destroy_async) } end - context 'pepare contact attributes before validation' do + context 'prepare contact attributes before validation' do it 'sets email to lowercase' do contact = create(:contact, email: 'Test@test.com') expect(contact.email).to eq('test@test.com') @@ -43,4 +43,42 @@ RSpec.describe Contact do expect(contact.additional_attributes).to eq({}) end end + + # rubocop:disable Rails/SkipsModelValidations + context 'when phone number format' do + it 'will not throw error for existing invalid phone number' do + contact = create(:contact) + contact.update_column(:phone_number, '344234') + contact.reload + expect(contact.update!(name: 'test')).to eq true + expect(contact.phone_number).to eq '344234' + end + + it 'updates phone number when adding valid phone number' do + contact = create(:contact) + contact.update_column(:phone_number, '344234') + contact.reload + expect(contact.update!(phone_number: '+12312312321')).to eq true + expect(contact.phone_number).to eq '+12312312321' + end + end + + context 'when email format' do + it 'will not throw error for existing invalid email' do + contact = create(:contact) + contact.update_column(:email, 'ssfdasdf