78 lines
1.7 KiB
Ruby
78 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
|