diff --git a/app/controllers/concerns/accountable_concern.rb b/app/controllers/concerns/accountable_concern.rb index c1349915f84..7eb0fe1f8b0 100644 --- a/app/controllers/concerns/accountable_concern.rb +++ b/app/controllers/concerns/accountable_concern.rb @@ -4,6 +4,8 @@ module AccountableConcern extend ActiveSupport::Concern def log_action(action, target) + return unless target.previous_changes.any? || target.destroyed? + Admin::ActionLog.create( account: current_account, action: action, diff --git a/app/models/admin/account_action.rb b/app/models/admin/account_action.rb index 3700ce4cd6c..0a448b68a9a 100644 --- a/app/models/admin/account_action.rb +++ b/app/models/admin/account_action.rb @@ -124,26 +124,26 @@ class Admin::AccountAction def handle_disable! authorize(target_account.user, :disable?) - log_action(:disable, target_account.user) target_account.user&.disable! + log_action(:disable, target_account.user) end def handle_sensitive! authorize(target_account, :sensitive?) - log_action(:sensitive, target_account) target_account.sensitize! + log_action(:sensitive, target_account) end def handle_silence! authorize(target_account, :silence?) - log_action(:silence, target_account) target_account.silence! + log_action(:silence, target_account) end def handle_suspend! authorize(target_account, :suspend?) - log_action(:suspend, target_account) target_account.suspend!(origin: :local) + log_action(:suspend, target_account) end def text_for_warning diff --git a/spec/controllers/concerns/accountable_concern_spec.rb b/spec/controllers/concerns/accountable_concern_spec.rb index cd06d872bb5..95086d4336a 100644 --- a/spec/controllers/concerns/accountable_concern_spec.rb +++ b/spec/controllers/concerns/accountable_concern_spec.rb @@ -19,10 +19,24 @@ RSpec.describe AccountableConcern do let(:hoge) { hoge_class.new(user) } describe '#log_action' do - it 'creates Admin::ActionLog' do - expect do - hoge.log_action(:create, target) - end.to change(Admin::ActionLog, :count).by(1) + subject { hoge.log_action(:create, target) } + + before { target.reload } # Ensure changes from creation cleared + + context 'when target has changed' do + before { target.update!(username: 'new_value') } + + it 'creates Admin::ActionLog' do + expect { subject } + .to change(Admin::ActionLog, :count).by(1) + end + end + + context 'when target has not changed' do + it 'does not create Admin::ActionLog' do + expect { subject } + .to_not change(Admin::ActionLog, :count) + end end end end