case @object['type']
when 'Announce'
undo_announce
+ when 'Accept'
+ undo_accept
when 'Follow'
undo_follow
when 'Like'
end
end
+ def undo_accept
+ ::Follow.find_by(target_account: @account, uri: target_uri)&.revoke_request!
+ end
+
def undo_follow
target_account = account_from_uri(target_uri)
false # Force uri_for to use uri attribute
end
+ def revoke_request!
+ FollowRequest.create!(account: account, target_account: target_account, show_reblogs: show_reblogs, uri: uri)
+ destroy!
+ end
+
before_validation :set_uri, only: :create
after_destroy :remove_endorsements
end
end
+ context 'with Accept' do
+ let(:recipient) { Fabricate(:account) }
+ let(:object_json) do
+ {
+ id: 'bar',
+ type: 'Accept',
+ actor: ActivityPub::TagManager.instance.uri_for(sender),
+ object: 'follow-to-revoke',
+ }
+ end
+
+ before do
+ recipient.follow!(sender, uri: 'follow-to-revoke')
+ end
+
+ it 'deletes follow from recipient to sender' do
+ subject.perform
+ expect(recipient.following?(sender)).to be false
+ end
+
+ it 'creates a follow request from recipient to sender' do
+ subject.perform
+ expect(recipient.requested?(sender)).to be true
+ end
+ end
+
context 'with Block' do
let(:recipient) { Fabricate(:account) }
expect(a[1]).to eq follow0
end
end
+
+ describe 'revoke_request!' do
+ let(:follow) { Fabricate(:follow, account: account, target_account: target_account) }
+ let(:account) { Fabricate(:account) }
+ let(:target_account) { Fabricate(:account) }
+
+ it 'revokes the follow relation' do
+ follow.revoke_request!
+ expect(account.following?(target_account)).to be false
+ end
+
+ it 'creates a follow request' do
+ follow.revoke_request!
+ expect(account.requested?(target_account)).to be true
+ end
+ end
end