| @ -23,9 +23,7 @@ class SuspendAccountService < BaseService | ||||
|  | ||||
|   def purge_content! | ||||
|     if @account.local? | ||||
|       ActivityPub::RawDistributionWorker.perform_async(delete_actor_json, @account.id) | ||||
|  | ||||
|       ActivityPub::DeliveryWorker.push_bulk(Relay.enabled.pluck(:inbox_url)) do |inbox_url| | ||||
|       ActivityPub::DeliveryWorker.push_bulk(delivery_inboxes) do |inbox_url| | ||||
|         [delete_actor_json, @account.id, inbox_url] | ||||
|       end | ||||
|     end | ||||
| @ -75,4 +73,8 @@ class SuspendAccountService < BaseService | ||||
|  | ||||
|     @delete_actor_json = Oj.dump(ActivityPub::LinkedDataSignature.new(payload).sign!(@account)) | ||||
|   end | ||||
|  | ||||
|   def delivery_inboxes | ||||
|     Account.inboxes + Relay.enabled.pluck(:inbox_url) | ||||
|   end | ||||
| end | ||||
|  | ||||
| @ -2,6 +2,11 @@ require 'rails_helper' | ||||
|  | ||||
| RSpec.describe SuspendAccountService, type: :service do | ||||
|   describe '#call' do | ||||
|     before do | ||||
|       stub_request(:post, "https://alice.com/inbox").to_return(status: 201) | ||||
|       stub_request(:post, "https://bob.com/inbox").to_return(status: 201) | ||||
|     end | ||||
|  | ||||
|     subject do | ||||
|       -> { described_class.new.call(account) } | ||||
|     end | ||||
| @ -14,6 +19,8 @@ RSpec.describe SuspendAccountService, type: :service do | ||||
|     let!(:active_relationship) { Fabricate(:follow, account: account) } | ||||
|     let!(:passive_relationship) { Fabricate(:follow, target_account: account) } | ||||
|     let!(:subscription) { Fabricate(:subscription, account: account) } | ||||
|     let!(:remote_alice) { Fabricate(:account, inbox_url: 'https://alice.com/inbox', protocol: :activitypub) } | ||||
|     let!(:remote_bob) { Fabricate(:account, inbox_url: 'https://bob.com/inbox', protocol: :activitypub) } | ||||
|  | ||||
|     it 'deletes associated records' do | ||||
|       is_expected.to change { | ||||
| @ -29,5 +36,11 @@ RSpec.describe SuspendAccountService, type: :service do | ||||
|         ].map(&:count) | ||||
|       }.from([1, 1, 1, 1, 1, 1, 1, 1]).to([0, 0, 0, 0, 0, 0, 0, 0]) | ||||
|     end | ||||
|  | ||||
|     it 'sends a delete actor activity to all known inboxes' do | ||||
|       subject.call | ||||
|       expect(a_request(:post, "https://alice.com/inbox")).to have_been_made.once | ||||
|       expect(a_request(:post, "https://bob.com/inbox")).to have_been_made.once | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  | ||||
		Reference in New Issue
	
	Block a user