79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
class SearchDataManager
 | 
						|
  def prepare_test_data
 | 
						|
    4.times do |i|
 | 
						|
      username = "search_test_account_#{i}"
 | 
						|
      account = Fabricate.create(:account, username: username, indexable: i.even?, discoverable: i.even?, note: "Lover of #{i}.")
 | 
						|
      2.times do |j|
 | 
						|
        Fabricate.create(:status, account: account, text: "#{username}'s #{j} post", visibility: j.even? ? :public : :private)
 | 
						|
      end
 | 
						|
    end
 | 
						|
 | 
						|
    3.times do |i|
 | 
						|
      Fabricate.create(:tag, name: "search_test_tag_#{i}")
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def indexes
 | 
						|
    [
 | 
						|
      AccountsIndex,
 | 
						|
      PublicStatusesIndex,
 | 
						|
      StatusesIndex,
 | 
						|
      TagsIndex,
 | 
						|
    ]
 | 
						|
  end
 | 
						|
 | 
						|
  def populate_indexes
 | 
						|
    indexes.each do |index_class|
 | 
						|
      index_class.purge!
 | 
						|
      index_class.import!
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def remove_indexes
 | 
						|
    indexes.each(&:delete!)
 | 
						|
  end
 | 
						|
 | 
						|
  def cleanup_test_data
 | 
						|
    Status.destroy_all
 | 
						|
    Account.destroy_all
 | 
						|
    Tag.destroy_all
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
RSpec.configure do |config|
 | 
						|
  config.before :suite do
 | 
						|
    if search_examples_present?
 | 
						|
      # Configure chewy to use `urgent` strategy to index documents
 | 
						|
      Chewy.strategy(:urgent)
 | 
						|
 | 
						|
      # Create search data
 | 
						|
      search_data_manager.prepare_test_data
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  config.after :suite do
 | 
						|
    if search_examples_present?
 | 
						|
      # Clean up after search data
 | 
						|
      search_data_manager.cleanup_test_data
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  config.around :each, type: :search do |example|
 | 
						|
    search_data_manager.populate_indexes
 | 
						|
    example.run
 | 
						|
    search_data_manager.remove_indexes
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
 | 
						|
  def search_data_manager
 | 
						|
    @search_data_manager ||= SearchDataManager.new
 | 
						|
  end
 | 
						|
 | 
						|
  def search_examples_present?
 | 
						|
    RUN_SEARCH_SPECS
 | 
						|
  end
 | 
						|
end
 |