Skip to content

Commit

Permalink
Fixes #5042 - User merge does not work if both users mentioned the sa…
Browse files Browse the repository at this point in the history
…me ticket.

Co-authored-by: Florian Liebe <fl@zammad.com>
  • Loading branch information
rolfschmidt and fliebe92 committed Feb 6, 2024
1 parent ea27c83 commit 73575c6
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 0 deletions.
10 changes: 10 additions & 0 deletions app/models/user.rb
Expand Up @@ -731,6 +731,16 @@ def merge(user_id_of_duplicate_user)
# to prevent any unexpected regressions.)
User.find(user_id_of_duplicate_user)

# mentions can not merged easily because the new user could have mentioned
# the same ticket so we delete duplicates beforehand
Mention.where(user_id: user_id_of_duplicate_user).find_each do |mention|
if Mention.exists?(mentionable: mention.mentionable, user_id: id)
mention.destroy
else
mention.update(user_id: id)
end
end

# merge missing attributes
Models.merge('User', id, user_id_of_duplicate_user)

Expand Down
24 changes: 24 additions & 0 deletions spec/models/user/merge_spec.rb
@@ -0,0 +1,24 @@
# Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/

require 'rails_helper'

RSpec.describe '.merge', searchindex: true, type: :model do
let(:user_1) { create(:agent, groups: Group.all) }
let(:user_2) { create(:agent, groups: Group.all) }
let(:ticket_1) do
ticket = create(:ticket, owner: user_1, group: Group.first)
create(:mention, mentionable: ticket, user: user_1)
create(:mention, mentionable: ticket, user: user_2)
ticket
end

before do
user_1
user_2
ticket_1
end

it 'does merge users' do
expect { user_2.merge(user_1.id) }.not_to raise_error
end
end

0 comments on commit 73575c6

Please sign in to comment.