Fix inability to locally suspend remotely-suspended accounts in moderation interface (#31899)
This commit is contained in:
parent
a2c4f5f5c0
commit
ba81e4e019
5 changed files with 38 additions and 5 deletions
|
@ -259,6 +259,10 @@ class Account < ApplicationRecord
|
|||
suspended_at.present? && !instance_actor?
|
||||
end
|
||||
|
||||
def suspended_locally?
|
||||
suspended? && suspension_origin_local?
|
||||
end
|
||||
|
||||
def suspended_permanently?
|
||||
suspended? && deletion_request.nil?
|
||||
end
|
||||
|
|
|
@ -74,7 +74,7 @@ class Admin::AccountAction
|
|||
end
|
||||
|
||||
def disabled_types_for_account(account)
|
||||
if account.suspended?
|
||||
if account.suspended_locally?
|
||||
%w(silence suspend)
|
||||
elsif account.silenced?
|
||||
%w(silence)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
- content_for :page_title do
|
||||
= t('admin.account_actions.title', acct: @account.pretty_acct)
|
||||
|
||||
- if @account.suspended?
|
||||
- if @account.suspended_locally?
|
||||
.flash-message.alert
|
||||
= t('admin.account_actions.already_suspended')
|
||||
- elsif @account.silenced?
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
= form.button t('admin.accounts.silence'),
|
||||
name: :silence,
|
||||
class: 'button button--destructive',
|
||||
disabled: report.target_account.silenced? || report.target_account.suspended?,
|
||||
disabled: report.target_account.silenced? || report.target_account.suspended_locally?,
|
||||
title: report.target_account.silenced? ? t('admin.account_actions.already_silenced') : ''
|
||||
.report-actions__item__description
|
||||
= t('admin.reports.actions.silence_description_html')
|
||||
|
@ -36,8 +36,8 @@
|
|||
= form.button t('admin.accounts.suspend'),
|
||||
name: :suspend,
|
||||
class: 'button button--destructive',
|
||||
disabled: report.target_account.suspended?,
|
||||
title: report.target_account.suspended? ? t('admin.account_actions.already_suspended') : ''
|
||||
disabled: report.target_account.suspended_locally?,
|
||||
title: report.target_account.suspended_locally? ? t('admin.account_actions.already_suspended') : ''
|
||||
.report-actions__item__description
|
||||
= t('admin.reports.actions.suspend_description_html')
|
||||
.report-actions__item
|
||||
|
|
|
@ -10,10 +10,39 @@ RSpec.describe Account do
|
|||
|
||||
let(:bob) { Fabricate(:account, username: 'bob') }
|
||||
|
||||
describe '#suspended_locally?' do
|
||||
context 'when the account is not suspended' do
|
||||
it 'returns false' do
|
||||
expect(subject.suspended_locally?).to be false
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the account is suspended locally' do
|
||||
before do
|
||||
subject.update!(suspended_at: 1.day.ago, suspension_origin: :local)
|
||||
end
|
||||
|
||||
it 'returns true' do
|
||||
expect(subject.suspended_locally?).to be true
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the account is suspended remotely' do
|
||||
before do
|
||||
subject.update!(suspended_at: 1.day.ago, suspension_origin: :remote)
|
||||
end
|
||||
|
||||
it 'returns false' do
|
||||
expect(subject.suspended_locally?).to be false
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#suspend!' do
|
||||
it 'marks the account as suspended and creates a deletion request' do
|
||||
expect { subject.suspend! }
|
||||
.to change(subject, :suspended?).from(false).to(true)
|
||||
.and change(subject, :suspended_locally?).from(false).to(true)
|
||||
.and(change { AccountDeletionRequest.exists?(account: subject) }.from(false).to(true))
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue