Add Account.matches_uri_prefix scope and use in activitypub/followers_synchronizations controller (#28820)
				
					
				
			This commit is contained in:
		
							parent
							
								
									7ecf7f5403
								
							
						
					
					
						commit
						18004bf227
					
				| @ -24,7 +24,7 @@ class ActivityPub::FollowersSynchronizationsController < ActivityPub::BaseContro | |||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def set_items |   def set_items | ||||||
|     @items = @account.followers.where(Account.arel_table[:uri].matches("#{Account.sanitize_sql_like(uri_prefix)}/%", false, true)).or(@account.followers.where(uri: uri_prefix)).pluck(:uri) |     @items = @account.followers.matches_uri_prefix(uri_prefix).pluck(:uri) | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   def collection_presenter |   def collection_presenter | ||||||
|  | |||||||
| @ -123,6 +123,7 @@ class Account < ApplicationRecord | |||||||
|   scope :bots, -> { where(actor_type: %w(Application Service)) } |   scope :bots, -> { where(actor_type: %w(Application Service)) } | ||||||
|   scope :groups, -> { where(actor_type: 'Group') } |   scope :groups, -> { where(actor_type: 'Group') } | ||||||
|   scope :alphabetic, -> { order(domain: :asc, username: :asc) } |   scope :alphabetic, -> { order(domain: :asc, username: :asc) } | ||||||
|  |   scope :matches_uri_prefix, ->(value) { where(arel_table[:uri].matches("#{sanitize_sql_like(value)}/%", false, true)).or(where(uri: value)) } | ||||||
|   scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") } |   scope :matches_username, ->(value) { where('lower((username)::text) LIKE lower(?)', "#{value}%") } | ||||||
|   scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) } |   scope :matches_display_name, ->(value) { where(arel_table[:display_name].matches("#{value}%")) } | ||||||
|   scope :without_unapproved, -> { left_outer_joins(:user).merge(User.approved.confirmed).or(remote) } |   scope :without_unapproved, -> { left_outer_joins(:user).merge(User.approved.confirmed).or(remote) } | ||||||
|  | |||||||
| @ -835,6 +835,31 @@ RSpec.describe Account do | |||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe 'scopes' do |   describe 'scopes' do | ||||||
|  |     describe 'matches_uri_prefix' do | ||||||
|  |       let!(:alice) { Fabricate :account, domain: 'host.example', uri: 'https://host.example/user/a' } | ||||||
|  |       let!(:bob) { Fabricate :account, domain: 'top-level.example', uri: 'https://top-level.example' } | ||||||
|  | 
 | ||||||
|  |       it 'returns accounts which start with the value' do | ||||||
|  |         results = described_class.matches_uri_prefix('https://host.example') | ||||||
|  | 
 | ||||||
|  |         expect(results.size) | ||||||
|  |           .to eq(1) | ||||||
|  |         expect(results) | ||||||
|  |           .to include(alice) | ||||||
|  |           .and not_include(bob) | ||||||
|  |       end | ||||||
|  | 
 | ||||||
|  |       it 'returns accounts which equal the value' do | ||||||
|  |         results = described_class.matches_uri_prefix('https://top-level.example') | ||||||
|  | 
 | ||||||
|  |         expect(results.size) | ||||||
|  |           .to eq(1) | ||||||
|  |         expect(results) | ||||||
|  |           .to include(bob) | ||||||
|  |           .and not_include(alice) | ||||||
|  |       end | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     describe 'auditable' do |     describe 'auditable' do | ||||||
|       let!(:alice) { Fabricate :account } |       let!(:alice) { Fabricate :account } | ||||||
|       let!(:bob) { Fabricate :account } |       let!(:bob) { Fabricate :account } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user