diff --git a/app/controllers/concerns/blacklight/catalog.rb b/app/controllers/concerns/blacklight/catalog.rb index 7ac9677e78..47b6682c82 100644 --- a/app/controllers/concerns/blacklight/catalog.rb +++ b/app/controllers/concerns/blacklight/catalog.rb @@ -165,7 +165,7 @@ def render_sms_action?(_config, _options) end def search_service - search_service_class.new(blacklight_config, search_state.to_h) + search_service_class.new(config: blacklight_config, user_params: search_state.to_h) end ## diff --git a/app/services/blacklight/search_service.rb b/app/services/blacklight/search_service.rb index 700859a83f..c45c6d87a9 100644 --- a/app/services/blacklight/search_service.rb +++ b/app/services/blacklight/search_service.rb @@ -2,17 +2,15 @@ # SearchService returns search results from the repository module Blacklight class SearchService - def initialize(blacklight_config, user_params = {}) - @blacklight_config = blacklight_config + def initialize(config:, user_params: {}, search_builder_class: config.search_builder_class) + @blacklight_config = config @user_params = user_params + @search_builder_class = search_builder_class end - # TODO: Can this be private? + # The blacklight_config is accessed by the search_builder attr_reader :blacklight_config - # Override this method to use a search builder other than the one in the config - delegate :search_builder_class, to: :blacklight_config - def search_builder search_builder_class.new(self) end @@ -86,11 +84,10 @@ def opensearch_response(field = nil, extra_controller_params = {}) [user_params[:q], response.documents.flat_map { |doc| doc[field] }.uniq] end - delegate :repository, to: :blacklight_config - private - attr_reader :user_params + attr_reader :search_builder_class, :user_params + delegate :repository, to: :blacklight_config ## # The key to use to retrieve the grouped field to display diff --git a/spec/services/blacklight/search_service_spec.rb b/spec/services/blacklight/search_service_spec.rb index 1afac86e5f..130e5d9af2 100644 --- a/spec/services/blacklight/search_service_spec.rb +++ b/spec/services/blacklight/search_service_spec.rb @@ -11,7 +11,7 @@ RSpec.describe Blacklight::SearchService, api: true do subject { service } - let(:service) { described_class.new(blacklight_config, user_params) } + let(:service) { described_class.new(config: blacklight_config, user_params: user_params) } let(:repository) { Blacklight::Solr::Repository.new(blacklight_config) } let(:user_params) { {} } @@ -29,6 +29,24 @@ service.repository.connection = blacklight_solr end + describe '#search_builder_class' do + subject { service.send(:search_builder_class) } + + it 'defaults to the value in the config' do + expect(subject).to eq SearchBuilder + end + + context 'when the search_builder_class is passed in' do + let(:klass) { double("Search builder") } + + let(:service) { described_class.new(config: blacklight_config, user_params: user_params, search_builder_class: klass) } + + it 'uses the passed value' do + expect(subject).to eq klass + end + end + end + # SPECS FOR SEARCH RESULTS FOR QUERY describe 'Search Results', integration: true do let(:blacklight_config) { copy_of_catalog_config }