[deploy] Fix badge count update after merge (#8210)

This commit is contained in:
Michael Kohl 2020-06-02 01:01:46 +07:00 committed by GitHub
parent 753cc49062
commit 780d254690
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 8 deletions

View file

@ -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

View file

@ -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

View file

@ -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