Don't follow account if it's already followed (#3575)
Closes https://github.com/tootsuite/mastodon/issues/3102
This commit is contained in:
		
				
					committed by
					
						 Eugen Rochko
						Eugen Rochko
					
				
			
			
				
	
			
			
			
						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 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 | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user