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 |