diff options
author | René Klačan <rene@klacan.sk> | 2017-06-05 03:24:18 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2017-06-05 03:24:18 +0200 |
commit | 037f96c5aeaa4b31e03ecc875a76450f2b7e8b24 (patch) | |
tree | 1a2ee1daa35c7c8e6838ce2510840eb3933088bd | |
parent | f54dca06a91c4adb8c916a1af9a699166502efa2 (diff) |
Don't follow account if it's already followed (#3575)
Closes https://github.com/tootsuite/mastodon/issues/3102
-rw-r--r-- | app/services/follow_service.rb | 2 | ||||
-rw-r--r-- | spec/services/follow_service_spec.rb | 34 |
2 files changed, 36 insertions, 0 deletions
diff --git a/app/services/follow_service.rb b/app/services/follow_service.rb index 23e721fac..4de75e98d 100644 --- 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 index bda5daee1..32dedb3ad 100644 --- 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 |