diff --git a/app/controllers/internal/users_controller.rb b/app/controllers/internal/users_controller.rb index fb92171f4..70c6cb936 100644 --- a/app/controllers/internal/users_controller.rb +++ b/app/controllers/internal/users_controller.rb @@ -65,7 +65,7 @@ class Internal::UsersController < Internal::ApplicationController def merge @user = User.find(params[:id]) begin - Moderator::MergeUser.call_merge(admin: current_user, keep_user: @user, delete_user_id: user_params["merge_user_id"]) + Moderator::MergeUser.call(admin: current_user, keep_user: @user, delete_user_id: user_params["merge_user_id"]) rescue StandardError => e flash[:danger] = e.message end diff --git a/app/services/moderator/merge_user.rb b/app/services/moderator/merge_user.rb index d2cb9bd5d..7b1cdecc2 100644 --- a/app/services/moderator/merge_user.rb +++ b/app/services/moderator/merge_user.rb @@ -1,5 +1,9 @@ module Moderator class MergeUser < ManageActivityAndRoles + def self.call(admin:, keep_user:, delete_user_id:) + new(keep_user: keep_user, admin: admin, delete_user_id: delete_user_id).merge + end + attr_reader :keep_user, :admin, :delete_user_id def initialize(admin:, keep_user:, delete_user_id:) @@ -8,10 +12,6 @@ module Moderator @delete_user = User.find(delete_user_id.to_i) end - def self.call_merge(admin:, keep_user:, delete_user_id:) - new(keep_user: keep_user, admin: admin, delete_user_id: delete_user_id).merge - end - def merge raise "You cannot merge the same two user id#s" if @delete_user.id == @keep_user.id @@ -56,7 +56,7 @@ module Moderator end if @delete_user.badge_achievements.any? @delete_user.badge_achievements.update_all(user_id: @keep_user.id) - @keep_user.badge_achievements_count = @keep_user.badge_achievements.size + BadgeAchievement.counter_culture_fix_counts(where: { users: { id: @keep_user.id } }) end @keep_user.update_columns(created_at: @delete_user.created_at) if @delete_user.created_at < @keep_user.created_at diff --git a/spec/services/moderator/merge_user_spec.rb b/spec/services/moderator/merge_user_spec.rb index 0b0f85eb9..51e9e50d6 100644 --- a/spec/services/moderator/merge_user_spec.rb +++ b/spec/services/moderator/merge_user_spec.rb @@ -17,7 +17,7 @@ RSpec.describe Moderator::MergeUser, type: :service do it "deletes delete_user_id and keeps keep_user" do sidekiq_perform_enqueued_jobs do - described_class.call_merge(admin: admin, keep_user: keep_user, delete_user_id: delete_user.id) + described_class.call(admin: admin, keep_user: keep_user, delete_user_id: delete_user.id) end expect(User.find_by(id: delete_user_id)).to be_nil expect(User.find_by(id: keep_user.id)).not_to be_nil @@ -32,7 +32,7 @@ RSpec.describe Moderator::MergeUser, type: :service do expect(article_reaction.elasticsearch_doc.dig("_source", "reactable", "user", "id")).to eq(delete_user_id) sidekiq_perform_enqueued_jobs do - described_class.call_merge(admin: admin, keep_user: keep_user, delete_user_id: delete_user.id) + described_class.call(admin: admin, keep_user: keep_user, delete_user_id: delete_user.id) end drain_all_sidekiq_jobs expect(article.reload.elasticsearch_doc.dig("_source", "user", "id")).to eq(keep_user.id) @@ -40,5 +40,15 @@ RSpec.describe Moderator::MergeUser, type: :service do expect(reaction.reload.elasticsearch_doc.dig("_source", "user_id")).to eq(keep_user.id) expect(article_reaction.reload.elasticsearch_doc.dig("_source", "reactable", "user", "id")).to eq(keep_user.id) end + + it "updates badge_achievements_count" do + create_list(:badge_achievement, 2, user: delete_user) + + sidekiq_perform_enqueued_jobs do + described_class.call(admin: admin, keep_user: keep_user, delete_user_id: delete_user.id) + end + + expect(keep_user.reload.badge_achievements_count).to eq(2) + end end end