@@ -17,12 +17,16 @@ class SuspendAccountService < BaseService | |||||
RemoveStatusService.new.call(status) | RemoveStatusService.new.call(status) | ||||
end | end | ||||
@account.media_attachments.destroy_all | |||||
@account.stream_entries.destroy_all | |||||
@account.notifications.destroy_all | |||||
@account.favourites.destroy_all | |||||
@account.active_relationships.destroy_all | |||||
@account.passive_relationships.destroy_all | |||||
[ | |||||
@account.media_attachments, | |||||
@account.stream_entries, | |||||
@account.notifications, | |||||
@account.favourites, | |||||
@account.active_relationships, | |||||
@account.passive_relationships | |||||
].each do |association| | |||||
destroy_all(association) | |||||
end | |||||
end | end | ||||
def purge_profile | def purge_profile | ||||
@@ -35,6 +39,10 @@ class SuspendAccountService < BaseService | |||||
end | end | ||||
def unsubscribe_push_subscribers | def unsubscribe_push_subscribers | ||||
@account.subscriptions.destroy_all | |||||
destroy_all(@account.subscriptions) | |||||
end | |||||
def destroy_all(association) | |||||
association.in_batches.destroy_all | |||||
end | end | ||||
end | end |
@@ -1,3 +1,4 @@ | |||||
Fabricator(:favourite) do | Fabricator(:favourite) do | ||||
account | |||||
status | |||||
end | end |
@@ -0,0 +1,33 @@ | |||||
require 'rails_helper' | |||||
RSpec.describe SuspendAccountService do | |||||
describe '#call' do | |||||
subject do | |||||
-> { described_class.new.call(account) } | |||||
end | |||||
let!(:account) { Fabricate(:account) } | |||||
let!(:status) { Fabricate(:status, account: account) } | |||||
let!(:media_attachment) { Fabricate(:media_attachment, account: account) } | |||||
let!(:notification) { Fabricate(:notification, account: account) } | |||||
let!(:favourite) { Fabricate(:favourite, account: account) } | |||||
let!(:active_relationship) { Fabricate(:follow, account: account) } | |||||
let!(:passive_relationship) { Fabricate(:follow, target_account: account) } | |||||
let!(:subscription) { Fabricate(:subscription, account: account) } | |||||
it 'deletes associated records' do | |||||
is_expected.to change { | |||||
[ | |||||
account.statuses, | |||||
account.media_attachments, | |||||
account.stream_entries, | |||||
account.notifications, | |||||
account.favourites, | |||||
account.active_relationships, | |||||
account.passive_relationships, | |||||
account.subscriptions | |||||
].map(&:count) | |||||
}.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0]) | |||||
end | |||||
end | |||||
end |