Prevent suspended accounts from appearing in AccountSearchService (#7246)
This commit is contained in:
		
							parent
							
								
									53b1d88873
								
							
						
					
					
						commit
						495303d9b8
					
				| @ -117,6 +117,7 @@ class Account < ApplicationRecord | |||||||
|   scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } |   scope :partitioned, -> { order(Arel.sql('row_number() over (partition by domain)')) } | ||||||
|   scope :silenced, -> { where(silenced: true) } |   scope :silenced, -> { where(silenced: true) } | ||||||
|   scope :suspended, -> { where(suspended: true) } |   scope :suspended, -> { where(suspended: true) } | ||||||
|  |   scope :without_suspended, -> { where(suspended: false) } | ||||||
|   scope :recent, -> { reorder(id: :desc) } |   scope :recent, -> { reorder(id: :desc) } | ||||||
|   scope :alphabetic, -> { order(domain: :asc, username: :asc) } |   scope :alphabetic, -> { order(domain: :asc, username: :asc) } | ||||||
|   scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } |   scope :by_domain_accounts, -> { group(:domain).select(:domain, 'COUNT(*) AS accounts_count').order('accounts_count desc') } | ||||||
|  | |||||||
| @ -65,9 +65,9 @@ class AccountSearchService < BaseService | |||||||
|   def exact_match |   def exact_match | ||||||
|     @_exact_match ||= begin |     @_exact_match ||= begin | ||||||
|       if domain_is_local? |       if domain_is_local? | ||||||
|         search_from.find_local(query_username) |         search_from.without_suspended.find_local(query_username) | ||||||
|       else |       else | ||||||
|         search_from.find_remote(query_username, query_domain) |         search_from.without_suspended.find_remote(query_username, query_domain) | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  | |||||||
| @ -137,5 +137,24 @@ describe AccountSearchService do | |||||||
|         expect(service).not_to have_received(:call) |         expect(service).not_to have_received(:call) | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  | 
 | ||||||
|  |     describe 'should not include suspended accounts' do | ||||||
|  |       it 'returns the fuzzy match first, and does not return suspended exacts' do | ||||||
|  |         partial = Fabricate(:account, username: 'exactness') | ||||||
|  |         exact = Fabricate(:account, username: 'exact', suspended: true) | ||||||
|  | 
 | ||||||
|  |         results = subject.call('exact', 10) | ||||||
|  |         expect(results.size).to eq 1 | ||||||
|  |         expect(results).to eq [partial] | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it "does not return suspended remote accounts" do | ||||||
|  |         remote = Fabricate(:account, username: 'a', domain: 'remote', display_name: 'e', suspended: true) | ||||||
|  | 
 | ||||||
|  |         results = subject.call('a@example.com', 2) | ||||||
|  |         expect(results.size).to eq 0 | ||||||
|  |         expect(results).to eq [] | ||||||
|  |       end | ||||||
|  |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user