Improve Accounts CLI prune spec (#35302)

This commit is contained in:
Matt Jankowski 2025-07-10 03:23:09 -04:00 committed by GitHub
parent 4ecfbd3920
commit f9beecb343
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1288,49 +1288,64 @@ RSpec.describe Mastodon::CLI::Accounts do
describe '#prune' do describe '#prune' do
let(:action) { :prune } let(:action) { :prune }
let!(:local_account) { Fabricate(:account) } let(:viable_attrs) { { domain: 'example.com', bot: false, suspended: false, silenced: false } }
let!(:bot_account) { Fabricate(:account, bot: true, domain: 'example.com') } let!(:local_account) { Fabricate(:account) }
let!(:group_account) { Fabricate(:account, actor_type: 'Group', domain: 'example.com') } let!(:bot_account) { Fabricate(:account, bot: true, domain: 'example.com') }
let!(:mentioned_account) { Fabricate(:account, domain: 'example.com') } let!(:group_account) { Fabricate(:account, actor_type: 'Group', domain: 'example.com') }
let!(:prunable_accounts) do let!(:account_mentioned) { Fabricate(:account, viable_attrs) }
Fabricate.times(2, :account, domain: 'example.com', bot: false, suspended_at: nil, silenced_at: nil) let!(:account_with_favourite) { Fabricate(:account, viable_attrs) }
end let!(:account_with_status) { Fabricate(:account, viable_attrs) }
let!(:account_with_follow) { Fabricate(:account, viable_attrs) }
let!(:account_targeted_follow) { Fabricate(:account, viable_attrs) }
let!(:account_with_block) { Fabricate(:account, viable_attrs) }
let!(:account_targeted_block) { Fabricate(:account, viable_attrs) }
let!(:account_targeted_mute) { Fabricate(:account, viable_attrs) }
let!(:account_targeted_report) { Fabricate(:account, viable_attrs) }
let!(:account_with_follow_request) { Fabricate(:account, viable_attrs) }
let!(:account_targeted_follow_request) { Fabricate(:account, viable_attrs) }
let!(:prunable_accounts) { Fabricate.times(2, :account, viable_attrs) }
before do before do
Fabricate(:mention, account: mentioned_account, status: Fabricate(:status, account: Fabricate(:account))) Fabricate :mention, account: account_mentioned, status: Fabricate(:status, account: Fabricate(:account))
Fabricate :favourite, account: account_with_favourite
Fabricate :status, account: account_with_status
Fabricate :follow, account: account_with_follow
Fabricate :follow, target_account: account_targeted_follow
Fabricate :block, account: account_with_block
Fabricate :block, target_account: account_targeted_block
Fabricate :mute, target_account: account_targeted_mute
Fabricate :report, target_account: account_targeted_report
Fabricate :follow_request, account: account_with_follow_request
Fabricate :follow_request, target_account: account_targeted_follow_request
stub_parallelize_with_progress! stub_parallelize_with_progress!
end end
def expect_prune_remote_accounts_without_interaction
prunable_account_ids = prunable_accounts.pluck(:id)
expect(Account.where(id: prunable_account_ids).count).to eq(0)
end
it 'displays a successful message and handles accounts correctly' do it 'displays a successful message and handles accounts correctly' do
expect { subject } expect { subject }
.to output_results("OK, pruned #{prunable_accounts.size} accounts") .to output_results("OK, pruned #{prunable_accounts.size} accounts")
expect_prune_remote_accounts_without_interaction expect(prunable_account_records)
expect_not_prune_local_accounts .to have_attributes(count: eq(0))
expect_not_prune_bot_accounts expect(Account.all)
expect_not_prune_group_accounts .to include(local_account)
expect_not_prune_mentioned_accounts .and include(bot_account)
.and include(group_account)
.and include(account_mentioned)
.and include(account_with_favourite)
.and include(account_with_status)
.and include(account_with_follow)
.and include(account_targeted_follow)
.and include(account_with_block)
.and include(account_targeted_block)
.and include(account_targeted_mute)
.and include(account_targeted_report)
.and include(account_with_follow_request)
.and include(account_targeted_follow_request)
.and not_include(prunable_accounts.first)
.and not_include(prunable_accounts.last)
end end
def expect_not_prune_local_accounts def prunable_account_records
expect(Account.exists?(id: local_account.id)).to be(true) Account.where(id: prunable_accounts.pluck(:id))
end
def expect_not_prune_bot_accounts
expect(Account.exists?(id: bot_account.id)).to be(true)
end
def expect_not_prune_group_accounts
expect(Account.exists?(id: group_account.id)).to be(true)
end
def expect_not_prune_mentioned_accounts
expect(Account.exists?(id: mentioned_account.id)).to be true
end end
context 'with --dry-run option' do context 'with --dry-run option' do