Module: Chewy::Minitest::Helpers
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/chewy/minitest/helpers.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
- 
  
    
      #assert_elasticsearch_query(query, expected_query)  ⇒ Boolean 
    
    
  
  
  
  
  
  
  
  
  
    Check the assertion that actual Elasticsearch query is rendered to the expected query. 
- 
  
    
      #assert_indexes(index, strategy: :atomic, bypass_actual_index: true, &block)  ⇒ SearchIndexReceiver 
    
    
  
  
  
  
  
  
  
  
  
    Assert that an index changes during a block. 
- 
  
    
      #mock_elasticsearch_response(index, raw_response)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Mock Elasticsearch response Simple usage - just pass index, expected raw response and block with the query. 
- 
  
    
      #mock_elasticsearch_response_sources(index, hits, &block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Mock Elasticsearch response with defined sources Simple usage - just pass index, expected sources and block with the query. 
- 
  
    
      #run_indexing(strategy: :atomic, &block)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    Run indexing for the database changes during the block provided. 
Instance Method Details
#assert_elasticsearch_query(query, expected_query) ⇒ Boolean
Check the assertion that actual Elasticsearch query is rendered to the expected query
| 121 122 123 124 | # File 'lib/chewy/minitest/helpers.rb', line 121 def assert_elasticsearch_query(query, expected_query) actual_query = query.render assert_equal expected_query, actual_query, "got #{actual_query.inspect} instead of expected query." end | 
#assert_indexes(index, strategy: :atomic, bypass_actual_index: true, &block) ⇒ SearchIndexReceiver
Assert that an index changes during a block.
| 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # File 'lib/chewy/minitest/helpers.rb', line 17 def assert_indexes(index, strategy: :atomic, bypass_actual_index: true, &block) index_class = Chewy.derive_name index receiver = SearchIndexReceiver.new bulk_method = index_class.method :bulk # Manually mocking #bulk because we need to properly capture `self` bulk_mock = lambda do |*bulk_args| receiver.catch bulk_args, self bulk_method.call(*bulk_args) unless bypass_actual_index {} end index_class.define_singleton_method :bulk, bulk_mock Chewy.strategy(strategy, &block) index_class.define_singleton_method :bulk, bulk_method assert_includes receiver.updated_indexes, index, "Expected #{index} to be updated but it wasn't" receiver end | 
#mock_elasticsearch_response(index, raw_response) ⇒ Object
Mock Elasticsearch response Simple usage - just pass index, expected raw response and block with the query.
| 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | # File 'lib/chewy/minitest/helpers.rb', line 57 def mock_elasticsearch_response(index, raw_response) mocked_request = Chewy::Search::Request.new(index) original_new = Chewy::Search::Request.method(:new) Chewy::Search::Request.define_singleton_method(:new) { |*_args| mocked_request } original_perform = mocked_request.method(:perform) mocked_request.define_singleton_method(:perform) { raw_response } yield ensure mocked_request.define_singleton_method(:perform, original_perform) Chewy::Search::Request.define_singleton_method(:new, original_new) end | 
#mock_elasticsearch_response_sources(index, hits, &block) ⇒ Object
Mock Elasticsearch response with defined sources Simple usage - just pass index, expected sources and block with the query.
| 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | # File 'lib/chewy/minitest/helpers.rb', line 80 def mock_elasticsearch_response_sources(index, hits, &block) raw_response = { 'took' => 4, 'timed_out' => false, '_shards' => { 'total' => 1, 'successful' => 1, 'skipped' => 0, 'failed' => 0 }, 'hits' => { 'total' => { 'value' => hits.count, 'relation' => 'eq' }, 'max_score' => 1.0, 'hits' => hits.each_with_index.map do |hit, i| { '_index' => index.index_name, '_type' => '_doc', '_id' => hit[:id] || (i + 1).to_s, '_score' => 3.14, '_source' => hit } end } } mock_elasticsearch_response(index, raw_response, &block) end | 
#run_indexing(strategy: :atomic, &block) ⇒ Object
Run indexing for the database changes during the block provided. By default, indexing is run at the end of the block.
| 46 47 48 | # File 'lib/chewy/minitest/helpers.rb', line 46 def run_indexing(strategy: :atomic, &block) Chewy.strategy strategy, &block end |