Add coverage for `CLI::Accounts#fix_duplications` task (#30639)
parent
e1fa456c7c
commit
2f0d0fc127
|
@ -145,6 +145,7 @@ class Account < ApplicationRecord
|
|||
scope :with_username, ->(value) { where arel_table[:username].lower.eq(value.to_s.downcase) }
|
||||
scope :with_domain, ->(value) { where arel_table[:domain].lower.eq(value&.to_s&.downcase) }
|
||||
scope :without_memorial, -> { where(memorial: false) }
|
||||
scope :duplicate_uris, -> { select(:uri, Arel.star.count).group(:uri).having(Arel.star.count.gt(1)) }
|
||||
|
||||
after_update_commit :trigger_update_webhooks
|
||||
|
||||
|
|
|
@ -252,7 +252,7 @@ module Mastodon::CLI
|
|||
domain configuration.
|
||||
LONG_DESC
|
||||
def fix_duplicates
|
||||
Account.remote.select(:uri, 'count(*)').group(:uri).having('count(*) > 1').pluck(:uri).each do |uri|
|
||||
Account.remote.duplicate_uris.pluck(:uri).each do |uri|
|
||||
say("Duplicates found for #{uri}")
|
||||
begin
|
||||
ActivityPub::FetchRemoteAccountService.new.call(uri) unless dry_run?
|
||||
|
|
|
@ -613,6 +613,25 @@ describe Mastodon::CLI::Accounts do
|
|||
end
|
||||
end
|
||||
|
||||
describe '#fix_duplicates' do
|
||||
let(:action) { :fix_duplicates }
|
||||
let(:service_double) { instance_double(ActivityPub::FetchRemoteAccountService, call: nil) }
|
||||
let(:uri) { 'https://host.example/same/value' }
|
||||
|
||||
context 'when there are duplicate URI accounts' do
|
||||
before do
|
||||
Fabricate.times(2, :account, domain: 'host.example', uri: uri)
|
||||
allow(ActivityPub::FetchRemoteAccountService).to receive(:new).and_return(service_double)
|
||||
end
|
||||
|
||||
it 'finds the duplicates and calls fetch remote account service' do
|
||||
expect { subject }
|
||||
.to output_results('Duplicates found')
|
||||
expect(service_double).to have_received(:call).with(uri)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#backup' do
|
||||
let(:action) { :backup }
|
||||
|
||||
|
|
Loading…
Reference in New Issue