Advertisement
ChildrenofkoRn

ThinkingSphinx SQL indexes & Rspec Acceptance Testing w Chrome headless

Apr 11th, 2023
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # spec/sphinx_helper.rb
  2. # frozen_string_literal: true
  3.  
  4. require 'rails_helper'
  5.  
  6. RSpec.configure do |config|
  7.   config.use_transactional_fixtures = false
  8.  
  9.   # DatabaseCleaner settings
  10.   config.before(:suite) do
  11.     DatabaseCleaner.clean_with(:truncation)
  12.     # Ensure sphinx directories exist for the test environment
  13.     ThinkingSphinx::Test.init
  14.     # Configure and start Sphinx, and automatically stop Sphinx at the end of the test suite.
  15.     ThinkingSphinx::Test.start_with_autostop
  16.   end
  17.  
  18.   config.before(:each) do
  19.     DatabaseCleaner.strategy = :transaction
  20.   end
  21.  
  22.   config.before(:each, sphinx: true) do
  23.     DatabaseCleaner.strategy = :truncation
  24.     # Index data when running an acceptance spec.
  25.     ThinkingSphinx::Test.index
  26.   end
  27.  
  28.   config.before(:each) do
  29.     DatabaseCleaner.start
  30.   end
  31.  
  32.   config.after(:each) do
  33.     DatabaseCleaner.clean
  34.   end
  35. end
  36.  
  37. # spec/features/search/search_spec.rb
  38. require 'sphinx_helper'
  39.  
  40. feature 'user can search on the site', %q{
  41.   As an user
  42.   Id like to be able to search on site materials
  43. } do
  44.  
  45.   given!(:user) { create(:user, username: 'Reality') }
  46.   given!(:review) { create(:review, author: user, title: 'My Nightmares Turned into Reality') }
  47.   given!(:reviews) { create_list(:review, 2) }
  48.  
  49.   background do
  50.     visit root_path
  51.   end
  52.  
  53.   scenario 'by everywhere', sphinx: true, js: true do
  54.     ThinkingSphinx::Test.run do
  55.       search(user.username)
  56.  
  57.       within('.results') do
  58.         expect(page).to have_content(user.username, count: 2)
  59.  
  60.         reviews.each do |review|
  61.           expect(page).to_not have_content(review.title)
  62.         end
  63.       end
  64.     end
  65.   end
  66.  
  67.   private
  68.  
  69.   def search(query, by: 'site')
  70.     within('.search') do
  71.       fill_in :search_query, with: query
  72.       select by, from: :search_type
  73.       click_on 'go'
  74.     end
  75.   end
  76. end
  77.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement