Don't follow account if it's already followed (#3575)
Closes https://github.com/tootsuite/mastodon/issues/3102
This commit is contained in:
parent
f54dca06a9
commit
037f96c5ae
|
@ -12,6 +12,8 @@ class FollowService < BaseService
|
||||||
raise ActiveRecord::RecordNotFound if target_account.nil? || target_account.id == source_account.id || target_account.suspended?
|
raise ActiveRecord::RecordNotFound if target_account.nil? || target_account.id == source_account.id || target_account.suspended?
|
||||||
raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account)
|
raise Mastodon::NotPermittedError if target_account.blocking?(source_account) || source_account.blocking?(target_account)
|
||||||
|
|
||||||
|
return if source_account.following?(target_account)
|
||||||
|
|
||||||
if target_account.locked?
|
if target_account.locked?
|
||||||
request_follow(source_account, target_account)
|
request_follow(source_account, target_account)
|
||||||
else
|
else
|
||||||
|
|
|
@ -29,6 +29,19 @@ RSpec.describe FollowService do
|
||||||
expect(sender.following?(bob)).to be true
|
expect(sender.following?(bob)).to be true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'already followed account' do
|
||||||
|
let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob')).account }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sender.follow!(bob)
|
||||||
|
subject.call(sender, bob.acct)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeps a following relation' do
|
||||||
|
expect(sender.following?(bob)).to be true
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
context 'remote account' do
|
context 'remote account' do
|
||||||
|
@ -76,5 +89,26 @@ RSpec.describe FollowService do
|
||||||
expect(a_request(:post, "http://hub.example.com/")).to have_been_made.once
|
expect(a_request(:post, "http://hub.example.com/")).to have_been_made.once
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'already followed account' do
|
||||||
|
let(:bob) { Fabricate(:user, email: 'bob@example.com', account: Fabricate(:account, username: 'bob', domain: 'example.com', salmon_url: 'http://salmon.example.com', hub_url: 'http://hub.example.com')).account }
|
||||||
|
|
||||||
|
before do
|
||||||
|
sender.follow!(bob)
|
||||||
|
subject.call(sender, bob.acct)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'keeps a following relation' do
|
||||||
|
expect(sender.following?(bob)).to be true
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not send a follow salmon slap' do
|
||||||
|
expect(a_request(:post, "http://salmon.example.com/")).not_to have_been_made
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'does not subscribe to PuSH' do
|
||||||
|
expect(a_request(:post, "http://hub.example.com/")).not_to have_been_made
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Reference in a new issue