commit: 037f96c5aeaa4b31e03ecc875a76450f2b7e8b24
parent: f54dca06a91c4adb8c916a1af9a699166502efa2
Author: René Klačan <rene@klacan.sk>
Date: Mon, 5 Jun 2017 03:24:18 +0200
Don't follow account if it's already followed (#3575)
Closes https://github.com/tootsuite/mastodon/issues/3102
Diffstat:
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb
@@ -12,6 +12,8 @@ class FollowService < BaseService
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)
+ return if source_account.following?(target_account)
+
if target_account.locked?
request_follow(source_account, target_account)
else
diff --git a/spec/services/follow_service_spec.rb b/spec/services/follow_service_spec.rb
@@ -29,6 +29,19 @@ RSpec.describe FollowService do
expect(sender.following?(bob)).to be true
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
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
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