79 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			1.7 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, :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?
 | |
|     RSpec.world.filtered_examples.values.flatten.any? { |example| example.metadata[:search] == true }
 | |
|   end
 | |
| end
 |