Bug: Migrate messages while merging contact (#624)

Bug: Migrate messages while merging contact
This commit is contained in:
Pranav Raj S 2020-03-19 01:52:38 +05:30 committed by GitHub
parent 9d170fc727
commit 1c4566df66
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 14 additions and 0 deletions

View file

@ -5,6 +5,7 @@ class ContactMergeAction
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
validate_contacts validate_contacts
merge_conversations merge_conversations
merge_messages
merge_contact_inboxes merge_contact_inboxes
remove_mergee_contact remove_mergee_contact
end end
@ -26,6 +27,10 @@ class ContactMergeAction
Conversation.where(contact_id: @mergee_contact.id).update(contact_id: @base_contact.id) Conversation.where(contact_id: @mergee_contact.id).update(contact_id: @base_contact.id)
end end
def merge_messages
Message.where(contact_id: @mergee_contact.id).update(contact_id: @base_contact.id)
end
def merge_contact_inboxes def merge_contact_inboxes
ContactInbox.where(contact_id: @mergee_contact.id).update(contact_id: @base_contact.id) ContactInbox.where(contact_id: @mergee_contact.id).update(contact_id: @base_contact.id)
end end

View file

@ -28,6 +28,7 @@ class Contact < ApplicationRecord
has_many :conversations, dependent: :destroy has_many :conversations, dependent: :destroy
has_many :contact_inboxes, dependent: :destroy has_many :contact_inboxes, dependent: :destroy
has_many :inboxes, through: :contact_inboxes has_many :inboxes, through: :contact_inboxes
has_many :messages, dependent: :destroy
def get_source_id(inbox_id) def get_source_id(inbox_id)
contact_inboxes.find_by!(inbox_id: inbox_id).source_id contact_inboxes.find_by!(inbox_id: inbox_id).source_id

View file

@ -10,6 +10,7 @@ describe ::ContactMergeAction do
before do before do
2.times.each { create(:conversation, contact: base_contact) } 2.times.each { create(:conversation, contact: base_contact) }
2.times.each { create(:conversation, contact: mergee_contact) } 2.times.each { create(:conversation, contact: mergee_contact) }
2.times.each { create(:message, contact: mergee_contact) }
end end
describe '#perform' do describe '#perform' do
@ -32,6 +33,13 @@ describe ::ContactMergeAction do
end end
end end
context 'when mergee contact has messages' do
it 'moves the messages to base contact' do
contact_merge
expect(base_contact.messages.count).to be 2
end
end
context 'when contacts belong to a different account' do context 'when contacts belong to a different account' do
it 'throws an exception' do it 'throws an exception' do
new_account = create(:account) new_account = create(:account)