bento_search 1.5.0 → 2.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +27 -24
- data/Rakefile +30 -11
- data/app/assets/javascripts/bento_search/ajax_load.js +54 -22
- data/app/controllers/bento_search/search_controller.rb +31 -30
- data/app/helpers/bento_search_helper.rb +72 -74
- data/app/models/bento_search/concurrent_searcher.rb +136 -0
- data/app/models/bento_search/result_item.rb +15 -12
- data/app/models/bento_search/results/serialization.rb +22 -13
- data/app/models/bento_search/search_engine.rb +170 -140
- data/app/search_engines/bento_search/doaj_articles_engine.rb +20 -20
- data/app/search_engines/bento_search/ebsco_host_engine.rb +3 -3
- data/app/search_engines/bento_search/eds_engine.rb +326 -206
- data/app/search_engines/bento_search/google_books_engine.rb +2 -2
- data/app/search_engines/bento_search/scopus_engine.rb +87 -87
- data/app/search_engines/bento_search/summon_engine.rb +1 -1
- data/app/views/bento_search/_ajax_loading.html.erb +17 -0
- data/app/views/bento_search/_item_title.html.erb +2 -4
- data/app/views/bento_search/_link.html.erb +3 -3
- data/lib/bento_search.rb +24 -9
- data/lib/bento_search/engine.rb +2 -0
- data/lib/bento_search/version.rb +1 -1
- data/lib/generators/bento_search/install/ajax_load_js_generator.rb +15 -0
- data/test/decorator/standard_decorator_test.rb +30 -30
- data/test/dummy/app/assets/config/manifest.js +4 -0
- data/test/dummy/config/application.rb +7 -0
- data/test/dummy/config/boot.rb +4 -9
- data/test/dummy/config/environments/development.rb +2 -0
- data/test/dummy/config/environments/production.rb +7 -1
- data/test/dummy/config/environments/test.rb +10 -3
- data/test/functional/bento_search/search_controller_test.rb +68 -58
- data/test/helper/bento_search_helper_test.rb +103 -103
- data/test/search_engines/doaj_articles_engine_test.rb +9 -9
- data/test/search_engines/eds_engine_test.rb +91 -59
- data/test/search_engines/google_site_search_test.rb +48 -48
- data/test/search_engines/scopus_engine_test.rb +51 -51
- data/test/search_engines/search_engine_base_test.rb +108 -86
- data/test/search_engines/search_engine_test.rb +68 -56
- data/test/support/atom.xsd.xml +3 -3
- data/test/support/xml.xsd +117 -0
- data/test/test_helper.rb +23 -12
- data/test/unit/concurrent_searcher_test.rb +75 -0
- data/test/unit/pagination_test.rb +12 -12
- data/test/vcr_cassettes/eds/FullText_CustomLink.yml +198 -0
- data/test/vcr_cassettes/eds/basic_search_smoke_test.yml +1036 -1729
- data/test/vcr_cassettes/eds/catalog_ebook_query.yml +218 -0
- data/test/vcr_cassettes/eds/catalog_query.yml +255 -0
- data/test/vcr_cassettes/eds/get_auth_token.yml +11 -44
- data/test/vcr_cassettes/eds/get_auth_token_failure.yml +10 -7
- data/test/vcr_cassettes/eds/get_with_auth.yml +144 -153
- data/test/vcr_cassettes/eds/get_with_auth_recovers_from_bad_auth.yml +167 -223
- data/test/view/atom_results_test.rb +94 -94
- metadata +36 -46
- data/app/assets/javascripts/bento_search.js +0 -3
- data/app/item_decorators/bento_search/ebscohost/conditional_openurl_main_link.rb +0 -36
- data/app/item_decorators/bento_search/only_premade_openurl.rb +0 -20
- data/app/item_decorators/bento_search/openurl_add_other_link.rb +0 -39
- data/app/item_decorators/bento_search/openurl_main_link.rb +0 -34
- data/app/models/bento_search/multi_searcher.rb +0 -131
- data/test/dummy/config/initializers/secret_token.rb +0 -8
- data/test/unit/multi_searcher_test.rb +0 -49
    
        data/lib/bento_search.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ require 'confstruct' | |
| 2 2 |  | 
| 3 3 | 
             
            module BentoSearch
         | 
| 4 4 | 
             
              class Error < ::StandardError ; end
         | 
| 5 | 
            -
            end | 
| 5 | 
            +
            end
         | 
| 6 6 |  | 
| 7 7 | 
             
            require "bento_search/engine"
         | 
| 8 8 | 
             
            require 'bento_search/routes'
         | 
| @@ -14,36 +14,51 @@ require File.dirname(__FILE__) + '/../app/models/bento_search/registrar' | |
| 14 14 |  | 
| 15 15 | 
             
            # Crazy workaround to the fact that some versions of Hashie::Mash,
         | 
| 16 16 | 
             
            # when used with SafeAssignment as Confstruct does, don't let
         | 
| 17 | 
            -
            # you use :id as a key. | 
| 17 | 
            +
            # you use :id as a key.
         | 
| 18 18 | 
             
            # https://github.com/intridea/hashie/issues/290
         | 
| 19 19 | 
             
            # We fix by removing the unused method with vary hacky meta programming
         | 
| 20 | 
            -
            # sorry. | 
| 20 | 
            +
            # sorry.
         | 
| 21 21 | 
             
            require 'hashie/mash'
         | 
| 22 22 | 
             
            if Hashie::Mash.instance_methods(false).include?(:id)
         | 
| 23 23 | 
             
              Hashie::Mash.send(:remove_method, :id)
         | 
| 24 24 | 
             
            end
         | 
| 25 25 |  | 
| 26 26 |  | 
| 27 | 
            -
            module BentoSearch | 
| 27 | 
            +
            module BentoSearch
         | 
| 28 28 | 
             
              def self.global_registrar
         | 
| 29 29 | 
             
                @@global_registrar ||= BentoSearch::Registrar.new
         | 
| 30 30 | 
             
              end
         | 
| 31 | 
            -
             | 
| 31 | 
            +
             | 
| 32 32 | 
             
              # See BentoSearch::Registrar#register_engine, this is a
         | 
| 33 | 
            -
              # default global registrar. | 
| 33 | 
            +
              # default global registrar.
         | 
| 34 34 | 
             
              def self.register_engine(id, data = nil, &block)
         | 
| 35 | 
            -
                global_registrar.register_engine(id, data, &block) | 
| 35 | 
            +
                global_registrar.register_engine(id, data, &block)
         | 
| 36 36 | 
             
              end
         | 
| 37 | 
            -
             | 
| 37 | 
            +
             | 
| 38 38 | 
             
              def self.get_engine(id)
         | 
| 39 39 | 
             
                global_registrar.get_engine(id)
         | 
| 40 40 | 
             
              end
         | 
| 41 | 
            -
             | 
| 41 | 
            +
             | 
| 42 42 | 
             
              # Mostly just used for testing
         | 
| 43 43 | 
             
              def self.reset_engine_registrations!
         | 
| 44 44 | 
             
                global_registrar.reset_engine_registrations!
         | 
| 45 45 | 
             
              end
         | 
| 46 46 |  | 
| 47 | 
            +
              # Avoid deprecation warnings in ruby 2.3.0
         | 
| 48 | 
            +
              RubyTimeoutClass = (defined?(Timeout::Error) ? Timeout::Error : TimeoutError)
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              @@defaults = Confstruct::Configuration.new(
         | 
| 51 | 
            +
                error_partial: 'bento_search/search_error',
         | 
| 52 | 
            +
                item_partial: 'bento_search/std_item',
         | 
| 53 | 
            +
                no_results_partial: 'bento_search/no_results',
         | 
| 54 | 
            +
                ajax_loading_partial: 'bento_search/ajax_loading'
         | 
| 55 | 
            +
              )
         | 
| 56 | 
            +
              def self.set_defaults(hash)
         | 
| 57 | 
            +
                @@defaults.merge!(hash)
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              def self.defaults
         | 
| 60 | 
            +
                @@defaults
         | 
| 61 | 
            +
              end
         | 
| 47 62 | 
             
            end
         | 
| 48 63 |  | 
| 49 64 |  | 
    
        data/lib/bento_search/engine.rb
    CHANGED
    
    
    
        data/lib/bento_search/version.rb
    CHANGED
    
    
| @@ -0,0 +1,15 @@ | |
| 1 | 
            +
            require 'rails/generators'
         | 
| 2 | 
            +
            module BentoSearch
         | 
| 3 | 
            +
              module Install
         | 
| 4 | 
            +
                class AjaxLoadJsGenerator < ::Rails::Generators::Base
         | 
| 5 | 
            +
                  source_root BentoSearch::Engine.root.to_s
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                  desc "Copy ajax_load.js file to local .app/javascript/src/js/"
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                  def generate
         | 
| 10 | 
            +
                    copy_file 'app/assets/javascripts/bento_search/ajax_load.js',
         | 
| 11 | 
            +
                    (Rails.root + "app/javascript/src/js/bento_search_ajax_load.js")
         | 
| 12 | 
            +
                  end
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
              end
         | 
| 15 | 
            +
            end
         | 
| @@ -4,74 +4,74 @@ require 'test_helper' | |
| 4 4 |  | 
| 5 5 | 
             
            class StandardDecoratorTest < ActionView::TestCase
         | 
| 6 6 | 
             
              include BentoSearch
         | 
| 7 | 
            -
             | 
| 8 | 
            -
              def decorator(hash = {}) | 
| 7 | 
            +
             | 
| 8 | 
            +
              def decorator(hash = {})
         | 
| 9 9 | 
             
                StandardDecorator.new(
         | 
| 10 10 | 
             
                  ResultItem.new(hash), view
         | 
| 11 11 | 
             
                )
         | 
| 12 12 | 
             
              end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 13 | 
            +
             | 
| 14 | 
            +
             | 
| 15 15 | 
             
              test "author with first and last" do
         | 
| 16 16 | 
             
                author = Author.new(:last => "Smith", :first => "John")
         | 
| 17 | 
            -
             | 
| 17 | 
            +
             | 
| 18 18 | 
             
                str = decorator.author_display(author)
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                assert_equal "Smith, J", str | 
| 19 | 
            +
             | 
| 20 | 
            +
                assert_equal "Smith, J", str
         | 
| 21 21 | 
             
              end
         | 
| 22 | 
            -
             | 
| 22 | 
            +
             | 
| 23 23 | 
             
              test "author with display form and just last" do
         | 
| 24 24 | 
             
                author = Author.new(:last => "Smith", :display => "Display Form")
         | 
| 25 | 
            -
             | 
| 25 | 
            +
             | 
| 26 26 | 
             
                str = decorator.author_display(author)
         | 
| 27 | 
            -
             | 
| 27 | 
            +
             | 
| 28 28 | 
             
                assert_equal "Display Form", str
         | 
| 29 29 | 
             
              end
         | 
| 30 | 
            -
             | 
| 30 | 
            +
             | 
| 31 31 | 
             
              test "Author with just last" do
         | 
| 32 32 | 
             
                author = Author.new(:last => "Johnson")
         | 
| 33 | 
            -
             | 
| 33 | 
            +
             | 
| 34 34 | 
             
                str = decorator.author_display(author)
         | 
| 35 | 
            -
             | 
| 35 | 
            +
             | 
| 36 36 | 
             
                assert_equal "Johnson", str
         | 
| 37 | 
            -
             | 
| 37 | 
            +
             | 
| 38 38 | 
             
              end
         | 
| 39 | 
            -
             | 
| 39 | 
            +
             | 
| 40 40 | 
             
              test "Missing title" do
         | 
| 41 41 | 
             
                assert_equal I18n.translate("bento_search.missing_title"), decorator.complete_title
         | 
| 42 42 | 
             
              end
         | 
| 43 | 
            -
             | 
| 43 | 
            +
             | 
| 44 44 | 
             
              test "language label nil if default" do
         | 
| 45 45 | 
             
                I18n.with_locale(:'en-GB') do
         | 
| 46 | 
            -
                  item = decorator(:language_code => 'en') | 
| 46 | 
            +
                  item = decorator(:language_code => 'en')
         | 
| 47 47 | 
             
                  assert_nil item.display_language
         | 
| 48 | 
            -
             | 
| 48 | 
            +
             | 
| 49 49 | 
             
                  item = decorator(:language_code => 'es')
         | 
| 50 | 
            -
                  assert_equal "Spanish", item.display_language | 
| 50 | 
            +
                  assert_equal "Spanish", item.display_language
         | 
| 51 51 | 
             
                end
         | 
| 52 52 | 
             
              end
         | 
| 53 53 |  | 
| 54 54 | 
             
              test "display_language works with just langauge_str" do
         | 
| 55 | 
            -
                 item = decorator(:language_str => 'German') | 
| 55 | 
            +
                 item = decorator(:language_str => 'German')
         | 
| 56 56 | 
             
                 assert_equal "German", item.display_language
         | 
| 57 57 | 
             
              end
         | 
| 58 | 
            -
             | 
| 58 | 
            +
             | 
| 59 59 | 
             
              test "display_format with nil format" do
         | 
| 60 60 | 
             
                item = decorator(:format => nil, :format_str => nil)
         | 
| 61 | 
            -
             | 
| 61 | 
            +
             | 
| 62 62 | 
             
                display_format = item.display_format
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                assert_nil display_format | 
| 63 | 
            +
             | 
| 64 | 
            +
                assert_nil display_format
         | 
| 65 65 | 
             
              end
         | 
| 66 | 
            -
             | 
| 66 | 
            +
             | 
| 67 67 | 
             
              test "display_date" do
         | 
| 68 | 
            -
                item = decorator(:year => 1900) | 
| 68 | 
            +
                item = decorator(:year => 1900)
         | 
| 69 69 | 
             
                assert_equal "1900", item.display_date
         | 
| 70 | 
            -
             | 
| 70 | 
            +
             | 
| 71 71 | 
             
                d = Date.new(2010, 5, 5)
         | 
| 72 72 | 
             
                item = decorator(:publication_date => d)
         | 
| 73 73 | 
             
                assert_equal I18n.l(d, :format => "%d %b %Y"), item.display_date
         | 
| 74 | 
            -
             | 
| 74 | 
            +
             | 
| 75 75 | 
             
                # if volume and issue, only prints out year
         | 
| 76 76 | 
             
                item = decorator(:publication_date => d, :volume => "101", :issue => "2")
         | 
| 77 77 | 
             
                assert_equal I18n.l(d, :format => "%Y"), item.display_date
         | 
| @@ -112,7 +112,7 @@ class StandardDecoratorTest < ActionView::TestCase | |
| 112 112 | 
             
                assert_equal "snippet", item.render_summary, "use snippet if that's all that's there, even when configured for abstract"
         | 
| 113 113 |  | 
| 114 114 | 
             
                item = decorator()
         | 
| 115 | 
            -
                 | 
| 115 | 
            +
                assert_nil item.render_summary, "Okay with no snippet or abstract"
         | 
| 116 116 | 
             
              end
         | 
| 117 | 
            -
             | 
| 117 | 
            +
             | 
| 118 118 | 
             
            end
         | 
| @@ -46,6 +46,13 @@ module Dummy | |
| 46 46 |  | 
| 47 47 | 
             
                # Version of your assets, change this if you want to expire all your assets
         | 
| 48 48 | 
             
                config.assets.version = '1.0'
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                # Avoid Rails deprecation warning
         | 
| 51 | 
            +
                if Gem::Version.new(Rails.version).release >= Gem::Version.new("5.2.0") && Gem::Version.new(Rails.version).release < Gem::Version.new("6.0.0")
         | 
| 52 | 
            +
                  config.active_record.sqlite3.represent_boolean_as_integer = true
         | 
| 53 | 
            +
                end
         | 
| 54 | 
            +
             | 
| 55 | 
            +
                config.secret_key_base = '60f73d25f61301b1ea3119011efb9fd9a741fcc010757599341d45765fbda7676daf5d602fb17bb5085c3163a04e20c0750ad02562ee9cb7f03f813d1b62c639'
         | 
| 49 56 | 
             
              end
         | 
| 50 57 | 
             
            end
         | 
| 51 58 |  | 
    
        data/test/dummy/config/boot.rb
    CHANGED
    
    | @@ -1,10 +1,5 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
             | 
| 1 | 
            +
            # Set up gems listed in the Gemfile.
         | 
| 2 | 
            +
            ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__)
         | 
| 3 3 |  | 
| 4 | 
            -
            if File.exist?( | 
| 5 | 
            -
             | 
| 6 | 
            -
              require 'bundler'
         | 
| 7 | 
            -
              Bundler.setup
         | 
| 8 | 
            -
            end
         | 
| 9 | 
            -
             | 
| 10 | 
            -
            $:.unshift File.expand_path('../../../../lib', __FILE__)
         | 
| 4 | 
            +
            require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
         | 
| 5 | 
            +
            $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__)
         | 
| @@ -9,7 +9,11 @@ Dummy::Application.configure do | |
| 9 9 | 
             
              config.action_controller.perform_caching = true
         | 
| 10 10 |  | 
| 11 11 | 
             
              # Disable Rails's static asset server (Apache or nginx will already do this)
         | 
| 12 | 
            -
               | 
| 12 | 
            +
              if Rails::VERSION::MAJOR < 5
         | 
| 13 | 
            +
                config.serve_static_files = false
         | 
| 14 | 
            +
              else
         | 
| 15 | 
            +
                config.public_file_server.enabled = false
         | 
| 16 | 
            +
              end
         | 
| 13 17 |  | 
| 14 18 | 
             
              # Compress JavaScripts and CSS
         | 
| 15 19 | 
             
              config.assets.compress = true
         | 
| @@ -60,4 +64,6 @@ Dummy::Application.configure do | |
| 60 64 |  | 
| 61 65 | 
             
              # Send deprecation notices to registered listeners
         | 
| 62 66 | 
             
              config.active_support.deprecation = :notify
         | 
| 67 | 
            +
             | 
| 68 | 
            +
              config.eager_load = true
         | 
| 63 69 | 
             
            end
         | 
| @@ -8,11 +8,16 @@ Dummy::Application.configure do | |
| 8 8 | 
             
              config.cache_classes = true
         | 
| 9 9 |  | 
| 10 10 | 
             
              # Configure static asset server for tests with Cache-Control for performance
         | 
| 11 | 
            -
               | 
| 12 | 
            -
             | 
| 11 | 
            +
              if Rails::VERSION::MAJOR < 5
         | 
| 12 | 
            +
                config.serve_static_files = true
         | 
| 13 | 
            +
                config.static_cache_control = "public, max-age=3600"
         | 
| 14 | 
            +
              else
         | 
| 15 | 
            +
                config.public_file_server.enabled = true
         | 
| 16 | 
            +
                config.public_file_server.headers = { 'Cache-Control' => 'public, max-age=3600' }
         | 
| 17 | 
            +
              end
         | 
| 13 18 |  | 
| 14 19 | 
             
              config.eager_load = false
         | 
| 15 | 
            -
             | 
| 20 | 
            +
             | 
| 16 21 | 
             
              # Show full error reports and disable caching
         | 
| 17 22 | 
             
              config.consider_all_requests_local       = true
         | 
| 18 23 | 
             
              config.action_controller.perform_caching = false
         | 
| @@ -32,4 +37,6 @@ Dummy::Application.configure do | |
| 32 37 | 
             
              config.active_support.deprecation = :stderr
         | 
| 33 38 |  | 
| 34 39 | 
             
              config.active_support.test_order = :random
         | 
| 40 | 
            +
             | 
| 41 | 
            +
              config.eager_load = false
         | 
| 35 42 | 
             
            end
         | 
| @@ -7,23 +7,23 @@ module BentoSearch | |
| 7 7 | 
             
                    config.engine = "MockEngine"
         | 
| 8 8 | 
             
                    config.allow_routable_results = true
         | 
| 9 9 | 
             
                  end
         | 
| 10 | 
            -
             | 
| 10 | 
            +
             | 
| 11 11 | 
             
                  BentoSearch.register_engine("failed_response") do |config|
         | 
| 12 12 | 
             
                    config.engine = "MockEngine"
         | 
| 13 13 | 
             
                    config.allow_routable_results = true
         | 
| 14 14 | 
             
                    config.error = {:message => "faked error"}
         | 
| 15 15 | 
             
                  end
         | 
| 16 | 
            -
             | 
| 16 | 
            +
             | 
| 17 17 | 
             
                  BentoSearch.register_engine("not_routable") do |config|
         | 
| 18 18 | 
             
                    config.engine = "MockEngine"
         | 
| 19 19 | 
             
                    # no allow_routable_results
         | 
| 20 20 | 
             
                  end
         | 
| 21 | 
            -
             | 
| 21 | 
            +
             | 
| 22 22 | 
             
                  BentoSearch.register_engine("with_layout_config") do |config|
         | 
| 23 23 | 
             
                    config.engine = "MockEngine"
         | 
| 24 | 
            -
             | 
| 24 | 
            +
             | 
| 25 25 | 
             
                    config.allow_routable_results = true
         | 
| 26 | 
            -
             | 
| 26 | 
            +
             | 
| 27 27 | 
             
                    config.for_display do |display|
         | 
| 28 28 | 
             
                      display.ajax do |ajax|
         | 
| 29 29 | 
             
                        ajax.wrapper_template = "bento_search/wrap_with_count"
         | 
| @@ -31,119 +31,129 @@ module BentoSearch | |
| 31 31 | 
             
                    end
         | 
| 32 32 | 
             
                  end
         | 
| 33 33 | 
             
                end
         | 
| 34 | 
            -
             | 
| 35 | 
            -
                def teardown | 
| 34 | 
            +
             | 
| 35 | 
            +
                def teardown
         | 
| 36 36 | 
             
                  BentoSearch.reset_engine_registrations!
         | 
| 37 37 | 
             
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 38 | 
            +
             | 
| 39 | 
            +
             | 
| 40 40 | 
             
                test "search" do
         | 
| 41 | 
            -
                   | 
| 41 | 
            +
                  get_search_with_params :engine_id => "mock", :query => "my search"
         | 
| 42 42 | 
             
                  assert_response :success
         | 
| 43 43 | 
             
                  assert_not_nil assigns(:results)
         | 
| 44 | 
            -
             | 
| 44 | 
            +
             | 
| 45 45 | 
             
                  assert_template "bento_search/search/search"
         | 
| 46 | 
            -
             | 
| 46 | 
            +
             | 
| 47 47 | 
             
                  # meta tag with count
         | 
| 48 48 | 
             
                  meta_tag = assert_select("meta[itemprop=total_items][content]", :count => 1 )
         | 
| 49 | 
            -
                  assert_match | 
| 49 | 
            +
                  assert_match(/^\d+$/, meta_tag.attribute("content").text)
         | 
| 50 50 | 
             
                end
         | 
| 51 | 
            -
             | 
| 51 | 
            +
             | 
| 52 52 | 
             
                test "failed search" do
         | 
| 53 | 
            -
                   | 
| 54 | 
            -
             | 
| 53 | 
            +
                  get_search_with_params :engine_id => "failed_response", :query => "my search"
         | 
| 54 | 
            +
             | 
| 55 55 | 
             
                  # should this really be a success? Yes, I think so, we don't
         | 
| 56 56 | 
             
                  # want to stop ajax from getting it, it'll just have an error
         | 
| 57 57 | 
             
                  # message in the HTML. Should it maybe have an html5 meta microdata
         | 
| 58 58 | 
             
                  # warning?
         | 
| 59 59 | 
             
                  assert_response :success
         | 
| 60 | 
            -
             | 
| 60 | 
            +
             | 
| 61 61 | 
             
                  assert_template "bento_search/search/search"
         | 
| 62 62 | 
             
                  assert_template "bento_search/_search_error"
         | 
| 63 | 
            -
             | 
| 63 | 
            +
             | 
| 64 64 | 
             
                  assert_select("meta[itemprop=total_items]", :count => 0)
         | 
| 65 65 | 
             
                end
         | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 69 | 
            -
             | 
| 70 | 
            -
             | 
| 66 | 
            +
             | 
| 67 | 
            +
             | 
| 68 | 
            +
             | 
| 69 | 
            +
             | 
| 70 | 
            +
             | 
| 71 71 | 
             
                test "custom layout config" do
         | 
| 72 | 
            -
                   | 
| 73 | 
            -
             | 
| 72 | 
            +
                  get_search_with_params :engine_id => "with_layout_config", :query => "my search"
         | 
| 73 | 
            +
             | 
| 74 74 | 
             
                  assert_response :success
         | 
| 75 | 
            -
             | 
| 75 | 
            +
             | 
| 76 76 | 
             
                  assert_not_nil assigns(:partial_wrapper)
         | 
| 77 | 
            -
             | 
| 77 | 
            +
             | 
| 78 78 | 
             
                  assert_template "bento_search/_wrap_with_count"
         | 
| 79 79 | 
             
                  assert_template "bento_search/search/search"
         | 
| 80 80 | 
             
                end
         | 
| 81 | 
            -
             | 
| 81 | 
            +
             | 
| 82 82 | 
             
                test "non-routable engine" do
         | 
| 83 | 
            -
                   | 
| 84 | 
            -
             | 
| 83 | 
            +
                  get_search_with_params :engine_id => "not_routable", :query => "my search"
         | 
| 84 | 
            +
             | 
| 85 85 | 
             
                  assert_response 403
         | 
| 86 86 | 
             
                end
         | 
| 87 | 
            -
             | 
| 87 | 
            +
             | 
| 88 88 | 
             
                test "non-existent engine" do
         | 
| 89 | 
            -
                   | 
| 90 | 
            -
             | 
| 89 | 
            +
                  get_search_with_params :engine_id => "not_existing", :query => "my search"
         | 
| 90 | 
            +
             | 
| 91 91 | 
             
                  assert_response 404
         | 
| 92 92 | 
             
                end
         | 
| 93 | 
            -
             | 
| 94 | 
            -
             | 
| 93 | 
            +
             | 
| 94 | 
            +
             | 
| 95 95 | 
             
                test "respects public_settable_search_args" do
         | 
| 96 | 
            -
                   | 
| 97 | 
            -
                      'query' => "query", 'sort' => "sort", 'per_page' => "15", | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 96 | 
            +
                  get_search_with_params :engine_id => "mock",
         | 
| 97 | 
            +
                      'query' => "query", 'sort' => "sort", 'per_page' => "15",
         | 
| 98 | 
            +
                      'page' => "6", 'search_field' => "title", 'not_allowed' => "not allowed"
         | 
| 99 | 
            +
             | 
| 100 | 
            +
             | 
| 101 101 | 
             
                  search_args = assigns[:engine].last_args
         | 
| 102 | 
            -
             | 
| 102 | 
            +
             | 
| 103 103 | 
             
                  [:query, :sort, :per_page, :page, :search_field].each do |allowed_key|
         | 
| 104 104 | 
             
                    assert search_args.has_key?(allowed_key)
         | 
| 105 105 | 
             
                  end
         | 
| 106 106 | 
             
                  assert ! search_args.has_key?(:not_allowed)
         | 
| 107 107 | 
             
                  assert ! search_args.has_key?("not_allowed")
         | 
| 108 108 | 
             
                end
         | 
| 109 | 
            -
             | 
| 109 | 
            +
             | 
| 110 110 | 
             
                test "custom before filter" do
         | 
| 111 111 | 
             
                  # Okay, we're going to do a weird thing with a custom controller subclass
         | 
| 112 | 
            -
                  # we can add a custom before filter like a local app might. | 
| 112 | 
            +
                  # we can add a custom before filter like a local app might.
         | 
| 113 113 | 
             
                  #
         | 
| 114 | 
            -
                  # SUPER HACKY, but I dunno what else to do. | 
| 115 | 
            -
             | 
| 114 | 
            +
                  # SUPER HACKY, but I dunno what else to do.
         | 
| 115 | 
            +
             | 
| 116 116 | 
             
                  class CustomSearchController < BentoSearch::SearchController
         | 
| 117 | 
            -
                     | 
| 118 | 
            -
             | 
| 117 | 
            +
                    if respond_to?(:before_action)
         | 
| 118 | 
            +
                      before_action :deny_everyone
         | 
| 119 | 
            +
                    else
         | 
| 120 | 
            +
                      before_filter :deny_everyone
         | 
| 121 | 
            +
                    end
         | 
| 122 | 
            +
             | 
| 119 123 | 
             
                    def deny_everyone
         | 
| 120 124 | 
             
                      raise BentoSearch::SearchController::AccessDenied
         | 
| 121 125 | 
             
                    end
         | 
| 122 126 | 
             
                  end
         | 
| 123 | 
            -
                  
         | 
| 124 127 |  | 
| 125 | 
            -
             | 
| 128 | 
            +
             | 
| 129 | 
            +
             | 
| 126 130 | 
             
                  orig_controller = @controller
         | 
| 127 | 
            -
             | 
| 131 | 
            +
             | 
| 128 132 | 
             
                  begin
         | 
| 129 133 | 
             
                    Rails.application.routes.draw do
         | 
| 130 134 | 
             
                      get "/custom_search" => "bento_search/search_controller_test/custom_search#search"
         | 
| 131 135 | 
             
                    end
         | 
| 132 136 | 
             
                    @controller = CustomSearchController.new
         | 
| 133 | 
            -
             | 
| 134 | 
            -
                     | 
| 135 | 
            -
             | 
| 137 | 
            +
             | 
| 138 | 
            +
                    get_search_with_params :engine_id => "mock", :query => "my search"
         | 
| 139 | 
            +
             | 
| 136 140 | 
             
                    assert_response 403
         | 
| 137 141 | 
             
                  ensure
         | 
| 138 142 | 
             
                    @controller = orig_controller
         | 
| 139 143 | 
             
                    Rails.application.reload_routes!
         | 
| 140 144 | 
             
                  end
         | 
| 141 | 
            -
             | 
| 145 | 
            +
             | 
| 146 | 
            +
                end
         | 
| 147 | 
            +
             | 
| 148 | 
            +
             | 
| 149 | 
            +
                # Do rails4 or rails5
         | 
| 150 | 
            +
                def get_search_with_params(params)
         | 
| 151 | 
            +
                  if Gem::Version.new(Rails.version) >= Gem::Version.new(5.0)
         | 
| 152 | 
            +
                    get :search, params: params
         | 
| 153 | 
            +
                  else
         | 
| 154 | 
            +
                    get :search, params
         | 
| 155 | 
            +
                  end
         | 
| 142 156 | 
             
                end
         | 
| 143 | 
            -
                
         | 
| 144 157 |  | 
| 145 | 
            -
                
         | 
| 146 | 
            -
                    
         | 
| 147 | 
            -
                
         | 
| 148 158 | 
             
              end
         | 
| 149 159 | 
             
            end
         |