Add test coverage for Mastodon::CLI::Accounts#prune (#25204)

This commit is contained in:
Daniel M Brasil 2023-10-18 05:20:50 -03:00 committed by GitHub
parent e9dc30cdba
commit 091a21e1bc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1356,4 +1356,77 @@ describe Mastodon::CLI::Accounts do
end
end
end
describe '#prune' do
let!(:local_account) { Fabricate(:account) }
let!(:bot_account) { Fabricate(:account, bot: true, domain: 'example.com') }
let!(:group_account) { Fabricate(:account, actor_type: 'Group', domain: 'example.com') }
let!(:mentioned_account) { Fabricate(:account, domain: 'example.com') }
let!(:prunable_accounts) do
Fabricate.times(3, :account, domain: 'example.com', bot: false, suspended_at: nil, silenced_at: nil)
end
before do
Fabricate(:mention, account: mentioned_account, status: Fabricate(:status, account: Fabricate(:account)))
stub_parallelize_with_progress!
end
it 'prunes all remote accounts with no interactions with local users' do
cli.prune
prunable_account_ids = prunable_accounts.pluck(:id)
expect(Account.where(id: prunable_account_ids).count).to eq(0)
end
it 'displays a successful message' do
expect { cli.prune }.to output(
a_string_including("OK, pruned #{prunable_accounts.size} accounts")
).to_stdout
end
it 'does not prune local accounts' do
cli.prune
expect(Account.exists?(id: local_account.id)).to be(true)
end
it 'does not prune bot accounts' do
cli.prune
expect(Account.exists?(id: bot_account.id)).to be(true)
end
it 'does not prune group accounts' do
cli.prune
expect(Account.exists?(id: group_account.id)).to be(true)
end
it 'does not prune accounts that have been mentioned' do
cli.prune
expect(Account.exists?(id: mentioned_account.id)).to be true
end
context 'with --dry-run option' do
before do
cli.options = { dry_run: true }
end
it 'does not prune any account' do
cli.prune
prunable_account_ids = prunable_accounts.pluck(:id)
expect(Account.where(id: prunable_account_ids).count).to eq(prunable_accounts.size)
end
it 'displays a successful message with (DRY RUN)' do
expect { cli.prune }.to output(
a_string_including("OK, pruned #{prunable_accounts.size} accounts (DRY RUN)")
).to_stdout
end
end
end
end