blacklight 9.0.0.beta1 → 9.0.0.beta2
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 +4 -4
- data/.github/matrix.json +47 -0
- data/.github/workflows/build.yml +16 -0
- data/.github/workflows/lint.yml +25 -0
- data/.github/workflows/main.yml +22 -0
- data/.github/workflows/release_7_x_scheduled.yml +39 -0
- data/.github/workflows/release_8_x_scheduled.yml +39 -0
- data/.github/workflows/test.yml +53 -0
- data/.rubocop.yml +70 -2
- data/.rubocop_todo.yml +43 -67
- data/.solr_wrapper.yml +2 -0
- data/VERSION +1 -1
- data/app/assets/builds/blacklight.css +19 -15
- data/app/assets/javascripts/blacklight/blacklight.esm.js +31 -69
- data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
- data/app/assets/javascripts/blacklight/blacklight.js +31 -69
- data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
- data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +4 -0
- data/app/assets/stylesheets/blacklight/_facets.scss +2 -2
- data/app/assets/stylesheets/blacklight/_header.scss +4 -0
- data/app/assets/stylesheets/blacklight/_modal.scss +9 -8
- data/app/assets/stylesheets/blacklight/_pagination.scss +1 -3
- data/app/assets/stylesheets/blacklight/_search_history.scss +0 -4
- data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +3 -0
- data/app/components/blacklight/advanced_search_form_component.rb +2 -2
- data/app/components/blacklight/constraints_component.rb +2 -2
- data/app/components/blacklight/document/action_component.rb +1 -3
- data/app/components/blacklight/document/bookmark_component.rb +2 -2
- data/app/components/blacklight/document/more_like_this_component.rb +2 -2
- data/app/components/blacklight/document/page_header_component.rb +2 -2
- data/app/components/blacklight/document/thumbnail_component.html.erb +3 -7
- data/app/components/blacklight/document/thumbnail_component.rb +7 -6
- data/app/components/blacklight/document_component.rb +3 -3
- data/app/components/blacklight/document_title_component.rb +3 -10
- data/app/components/blacklight/facet_field_checkboxes_component.rb +2 -20
- data/app/components/blacklight/facet_field_component.rb +2 -17
- data/app/components/blacklight/facet_field_filter_component.rb +2 -21
- data/app/components/blacklight/facet_field_inclusive_constraint_component.rb +4 -25
- data/app/components/blacklight/facet_field_list_component.rb +2 -32
- data/app/components/blacklight/facet_field_no_layout_component.rb +2 -10
- data/app/components/blacklight/facet_field_pagination_component.html.erb +2 -2
- data/app/components/blacklight/facet_item_component.rb +2 -74
- data/app/components/blacklight/facet_item_pivot_component.rb +1 -1
- data/app/components/blacklight/facets/checkboxes_component.rb +26 -0
- data/app/components/blacklight/facets/count_component.rb +23 -0
- data/app/components/blacklight/{facet_field_component.html.erb → facets/field_component.html.erb} +1 -1
- data/app/components/blacklight/facets/field_component.rb +23 -0
- data/app/components/blacklight/facets/filters_component.html.erb +4 -0
- data/app/components/blacklight/facets/filters_component.rb +27 -0
- data/app/components/blacklight/{facet_field_inclusive_constraint_component.html.erb → facets/inclusive_constraint_component.html.erb} +1 -1
- data/app/components/blacklight/facets/inclusive_constraint_component.rb +31 -0
- data/app/components/blacklight/{facet_field_filter_component.html.erb → facets/index_navigation_component.html.erb} +1 -1
- data/app/components/blacklight/facets/index_navigation_component.rb +32 -0
- data/app/components/blacklight/facets/item_component.rb +73 -0
- data/app/components/blacklight/facets/list_component.html.erb +11 -0
- data/app/components/blacklight/facets/list_component.rb +38 -0
- data/app/components/blacklight/facets/no_layout_component.rb +16 -0
- data/app/components/blacklight/facets/selected_value_component.rb +29 -0
- data/app/components/blacklight/facets/suggest_component.html.erb +12 -0
- data/app/components/blacklight/facets/suggest_component.rb +22 -0
- data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +2 -2
- data/app/components/blacklight/response/facet_group_component.html.erb +1 -1
- data/app/components/blacklight/response/facet_group_component.rb +5 -1
- data/app/components/blacklight/system/dropdown_component.html.erb +1 -1
- data/app/components/blacklight/system/dropdown_component.rb +1 -1
- data/app/components/blacklight/top_navbar_component.html.erb +1 -1
- data/app/controllers/concerns/blacklight/bookmarks.rb +3 -3
- data/app/controllers/concerns/blacklight/catalog.rb +10 -25
- data/app/controllers/concerns/blacklight/controller.rb +1 -1
- data/app/controllers/concerns/blacklight/facetable.rb +34 -0
- data/app/controllers/concerns/blacklight/search_context.rb +1 -1
- data/app/controllers/concerns/blacklight/searchable.rb +1 -1
- data/app/helpers/blacklight/configuration_helper_behavior.rb +2 -2
- data/app/helpers/blacklight/document_helper_behavior.rb +3 -1
- data/app/helpers/blacklight/facets_helper_behavior.rb +9 -0
- data/app/helpers/blacklight/icon_helper_behavior.rb +2 -2
- data/app/javascript/blacklight-frontend/checkbox_submit.js +3 -0
- data/app/javascript/blacklight-frontend/debounce.js +1 -1
- data/app/javascript/blacklight-frontend/facet_suggest.js +23 -3
- data/app/javascript/blacklight-frontend/index.js +0 -2
- data/app/javascript/blacklight-frontend/modal.js +1 -4
- data/app/javascript/blacklight-frontend/search_context.js +3 -2
- data/app/models/facet_search_builder.rb +5 -0
- data/app/presenters/blacklight/facet_field_presenter.rb +1 -1
- data/app/presenters/blacklight/json_presenter.rb +1 -3
- data/app/presenters/blacklight/rendering/helper_method.rb +4 -4
- data/app/presenters/blacklight/rendering/join.rb +2 -2
- data/app/services/blacklight/facet_search_service.rb +44 -0
- data/app/services/blacklight/field_retriever.rb +1 -1
- data/app/services/blacklight/search_service.rb +6 -6
- data/app/values/blacklight/types.rb +2 -2
- data/app/views/catalog/_facet_pivot.html.erb +1 -1
- data/app/views/catalog/_home_text.html.erb +2 -2
- data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
- data/app/views/catalog/facet.html.erb +8 -10
- data/config/locales/blacklight.ar.yml +2 -2
- data/config/locales/blacklight.es.yml +2 -2
- data/config/locales/blacklight.fr.yml +2 -2
- data/config/locales/blacklight.hu.yml +2 -2
- data/config/locales/blacklight.it.yml +2 -2
- data/config/locales/blacklight.nl.yml +1 -1
- data/config/locales/blacklight.pt-BR.yml +2 -2
- data/config/locales/blacklight.sq.yml +2 -2
- data/config/locales/blacklight.zh.yml +2 -2
- data/lib/blacklight/abstract_repository.rb +2 -2
- data/lib/blacklight/abstract_search_builder.rb +154 -0
- data/lib/blacklight/configuration/context.rb +3 -3
- data/lib/blacklight/configuration/facet_field.rb +6 -6
- data/lib/blacklight/configuration/field.rb +4 -4
- data/lib/blacklight/configuration/fields.rb +0 -1
- data/lib/blacklight/configuration/search_field.rb +1 -1
- data/lib/blacklight/configuration/view_config.rb +2 -2
- data/lib/blacklight/configuration.rb +6 -7
- data/lib/blacklight/facet_search_builder.rb +18 -0
- data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -1
- data/lib/blacklight/open_struct_with_hash_access.rb +2 -2
- data/lib/blacklight/search_builder.rb +1 -159
- data/lib/blacklight/search_state/filter_field.rb +4 -4
- data/lib/blacklight/search_state/pivot_filter_field.rb +4 -4
- data/lib/blacklight/solr/abstract_filter_query_builder.rb +77 -0
- data/lib/blacklight/solr/default_filter_query_builder.rb +20 -0
- data/lib/blacklight/solr/facet_search_builder_behavior.rb +62 -0
- data/lib/blacklight/solr/repository.rb +8 -9
- data/lib/blacklight/solr/response/facets.rb +2 -2
- data/lib/blacklight/solr/response/params.rb +0 -4
- data/lib/blacklight/solr/response.rb +5 -1
- data/lib/blacklight/solr/search_builder_behavior.rb +17 -132
- data/lib/blacklight.rb +1 -1
- data/lib/generators/blacklight/assets/importmap_generator.rb +3 -5
- data/lib/generators/blacklight/assets_generator.rb +1 -1
- data/lib/generators/blacklight/search_builder_generator.rb +1 -1
- data/lib/generators/blacklight/templates/.solr_wrapper.yml +2 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +3 -1
- data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +0 -4
- data/package.json +3 -3
- data/spec/components/blacklight/advanced_search_form_component_spec.rb +18 -22
- data/spec/components/blacklight/constraint_layout_component_spec.rb +8 -8
- data/spec/components/blacklight/constraints_component_spec.rb +11 -11
- data/spec/components/blacklight/document/action_component_spec.rb +23 -15
- data/spec/components/blacklight/document/group_component_spec.rb +10 -15
- data/spec/components/blacklight/document/page_header_component_spec.rb +35 -28
- data/spec/components/blacklight/document/sidebar_component_spec.rb +5 -11
- data/spec/components/blacklight/document_component_spec.rb +98 -65
- data/spec/components/blacklight/facet_component_spec.rb +12 -8
- data/spec/components/blacklight/facet_item_pivot_component_spec.rb +12 -12
- data/spec/components/blacklight/{facet_field_checkboxes_component_spec.rb → facets/checkboxes_component_spec.rb} +13 -13
- data/spec/components/blacklight/facets/filters_component_spec.rb +36 -0
- data/spec/components/blacklight/facets/index_navigation_component_spec.rb +40 -0
- data/spec/components/blacklight/{facet_item_component_spec.rb → facets/item_component_spec.rb} +10 -10
- data/spec/components/blacklight/{facet_field_list_component_spec.rb → facets/list_component_spec.rb} +23 -23
- data/spec/components/blacklight/facets/suggest_component_spec.rb +68 -0
- data/spec/components/blacklight/header_component_spec.rb +2 -4
- data/spec/components/blacklight/hidden_search_state_component_spec.rb +7 -7
- data/spec/components/blacklight/metadata_field_component_spec.rb +17 -15
- data/spec/components/blacklight/response/facet_group_component_spec.rb +37 -0
- data/spec/components/blacklight/response/pagination_component_spec.rb +1 -1
- data/spec/components/blacklight/response/spellcheck_component_spec.rb +1 -1
- data/spec/components/blacklight/search_bar_component_spec.rb +4 -4
- data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +2 -2
- data/spec/components/blacklight/search_context/server_item_pagination_component_spec.rb +3 -5
- data/spec/components/blacklight/skip_link_component_spec.rb +8 -11
- data/spec/components/blacklight/start_over_button_component_spec.rb +4 -4
- data/spec/components/blacklight/system/dropdown_component_spec.rb +26 -0
- data/spec/components/blacklight/system/flash_message_component_spec.rb +7 -11
- data/spec/controllers/catalog_controller_spec.rb +12 -20
- data/spec/features/facets_spec.rb +70 -7
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +10 -0
- data/spec/lib/blacklight/configuration/facet_field_spec.rb +2 -2
- data/spec/lib/blacklight/parameters_spec.rb +12 -1
- data/spec/lib/blacklight/search_state/filter_field_spec.rb +18 -0
- data/spec/models/blacklight/configuration_spec.rb +32 -28
- data/spec/models/blacklight/facet_search_builder_spec.rb +19 -0
- data/spec/models/blacklight/search_builder_spec.rb +1 -11
- data/spec/models/blacklight/solr/default_filter_query_builder_spec.rb +72 -0
- data/spec/models/blacklight/solr/document_spec.rb +0 -4
- data/spec/models/blacklight/solr/facet_search_builder_behavior_spec.rb +929 -0
- data/spec/models/blacklight/solr/repository_spec.rb +31 -29
- data/spec/models/blacklight/solr/response/facets_spec.rb +86 -40
- data/spec/models/blacklight/solr/response/group_response_spec.rb +8 -5
- data/spec/models/blacklight/solr/response/group_spec.rb +9 -5
- data/spec/models/blacklight/solr/response_spec.rb +96 -64
- data/spec/models/blacklight/solr/search_builder_behavior_spec.rb +2 -227
- data/spec/models/solr_document_spec.rb +5 -1
- data/spec/services/blacklight/search_service_spec.rb +6 -27
- data/spec/spec_helper.rb +0 -1
- data/spec/support/view_component_test_helpers.rb +0 -18
- data/spec/views/catalog/facet.html.erb_spec.rb +10 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +6 -3
- data/spec/views/catalog/index.html.erb_spec.rb +3 -1
- metadata +58 -29
- data/.github/workflows/ruby.yml +0 -98
- data/app/components/blacklight/facet_field_list_component.html.erb +0 -19
- data/app/components/blacklight/search/facet_suggest_input.html.erb +0 -9
- data/app/components/blacklight/search/facet_suggest_input.rb +0 -16
- data/app/javascript/blacklight-frontend/modalForm.js +0 -60
- data/app/views/catalog/_facet_index_navigation.html.erb +0 -1
- data/app/views/catalog/_facet_layout.html.erb +0 -8
- data/app/views/catalog/_facet_pagination.html.erb +0 -1
- data/spec/components/blacklight/document_metadata_component_spec.rb +0 -0
- data/spec/components/blacklight/search/facet_suggest_input_spec.rb +0 -33
- data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +0 -43
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +0 -41
- /data/app/components/blacklight/{facet_field_checkboxes_component.html.erb → facets/checkboxes_component.html.erb} +0 -0
@@ -43,7 +43,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, :api do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
context "with a complex parameter environment" do
|
46
|
-
subject { search_builder.with(user_params).processed_parameters }
|
46
|
+
subject { search_builder.with(user_params).send(:processed_parameters) }
|
47
47
|
|
48
48
|
let(:user_params) do
|
49
49
|
{ :search_field => "test_field", :q => "test query", "facet.field" => "extra_facet" }
|
@@ -90,7 +90,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, :api do
|
|
90
90
|
# SPECS for actual search parameter generation
|
91
91
|
describe "#processed_parameters" do
|
92
92
|
subject do
|
93
|
-
search_builder.with(user_params).processed_parameters
|
93
|
+
search_builder.with(user_params).send(:processed_parameters)
|
94
94
|
end
|
95
95
|
|
96
96
|
context "when search_params_logic is customized" do
|
@@ -523,71 +523,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, :api do
|
|
523
523
|
end
|
524
524
|
end
|
525
525
|
|
526
|
-
describe "#facet_value_to_fq_string" do
|
527
|
-
it "uses the configured field name" do
|
528
|
-
blacklight_config.add_facet_field :facet_key, field: "facet_name"
|
529
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_key", "my value")).to eq "{!term f=facet_name}my value"
|
530
|
-
end
|
531
|
-
|
532
|
-
it "uses the raw handler for strings" do
|
533
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name}my value"
|
534
|
-
end
|
535
|
-
|
536
|
-
it "passes booleans through" do
|
537
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq '{!term f=facet_name}true'
|
538
|
-
end
|
539
|
-
|
540
|
-
it "passes boolean-like strings through" do
|
541
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "true")).to eq '{!term f=facet_name}true'
|
542
|
-
end
|
543
|
-
|
544
|
-
it "passes integers through" do
|
545
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1)).to eq '{!term f=facet_name}1'
|
546
|
-
end
|
547
|
-
|
548
|
-
it "passes integer-like strings through" do
|
549
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1")).to eq '{!term f=facet_name}1'
|
550
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", -1)).to eq '{!term f=facet_name}-1'
|
551
|
-
end
|
552
|
-
|
553
|
-
it "passes floats through" do
|
554
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1.11)).to eq '{!term f=facet_name}1.11'
|
555
|
-
end
|
556
|
-
|
557
|
-
it "passes floats in strings through" do
|
558
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1.11")).to eq '{!term f=facet_name}1.11'
|
559
|
-
end
|
560
|
-
|
561
|
-
context 'date handling' do
|
562
|
-
before { allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: true, query: nil, tag: nil, field: 'facet_name')) }
|
563
|
-
|
564
|
-
it "passes date-type fields through" do
|
565
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "2012-01-01")).to eq '{!term f=facet_name}2012-01-01'
|
566
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "2003-04-09T00:00:00Z")).to eq '{!term f=facet_name}2003-04-09T00:00:00Z'
|
567
|
-
end
|
568
|
-
|
569
|
-
it "formats Date objects correctly" do
|
570
|
-
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: nil, query: nil, tag: nil, field: 'facet_name'))
|
571
|
-
d = DateTime.parse("2003-04-09T00:00:00")
|
572
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", d)).to eq '{!term f=facet_name}2003-04-09T00:00:00Z'
|
573
|
-
end
|
574
|
-
end
|
575
|
-
|
576
|
-
it "handles range requests" do
|
577
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..5)).to eq "facet_name:[1 TO 5]"
|
578
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..nil)).to eq "facet_name:[1 TO *]"
|
579
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", nil..5)).to eq "facet_name:[* TO 5]"
|
580
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", nil..nil)).to eq "facet_name:[* TO *]"
|
581
|
-
end
|
582
|
-
|
583
|
-
it "adds tag local parameters" do
|
584
|
-
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(query: nil, tag: 'asdf', date: nil, field: 'facet_name'))
|
585
|
-
|
586
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq "{!term f=facet_name tag=asdf}true"
|
587
|
-
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name tag=asdf}my value"
|
588
|
-
end
|
589
|
-
end
|
590
|
-
|
591
526
|
describe "#add_facet_fq_to_solr" do
|
592
527
|
it "converts a String fq into an Array" do
|
593
528
|
solr_parameters = { fq: 'a string' }
|
@@ -731,166 +666,6 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, :api do
|
|
731
666
|
end
|
732
667
|
end
|
733
668
|
|
734
|
-
describe "#add_facet_paging_to_solr" do
|
735
|
-
let(:facet_field) { 'format' }
|
736
|
-
let(:sort_key) { Blacklight::Solr::FacetPaginator.request_keys[:sort] }
|
737
|
-
let(:page_key) { Blacklight::Solr::FacetPaginator.request_keys[:page] }
|
738
|
-
let(:prefix_key) { Blacklight::Solr::FacetPaginator.request_keys[:prefix] }
|
739
|
-
|
740
|
-
let(:blacklight_config) do
|
741
|
-
Blacklight::Configuration.new do |config|
|
742
|
-
config.add_facet_fields_to_solr_request!
|
743
|
-
config.add_facet_field 'format'
|
744
|
-
config.add_facet_field 'format_ordered', sort: :count
|
745
|
-
config.add_facet_field 'format_limited', limit: 5
|
746
|
-
config.add_facet_field 'format_more_limited', limit: 5, more_limit: 50
|
747
|
-
end
|
748
|
-
end
|
749
|
-
|
750
|
-
let(:solr_parameters) do
|
751
|
-
solr_parameters = Blacklight::Solr::Request.new
|
752
|
-
subject.facet(facet_field).add_facet_paging_to_solr(solr_parameters)
|
753
|
-
solr_parameters
|
754
|
-
end
|
755
|
-
|
756
|
-
it 'sets rows to 0' do
|
757
|
-
expect(solr_parameters[:rows]).to eq 0
|
758
|
-
end
|
759
|
-
|
760
|
-
it 'sets facets requested to facet_field argument' do
|
761
|
-
expect(solr_parameters[:'facet.field']).to eq facet_field
|
762
|
-
end
|
763
|
-
|
764
|
-
it 'defaults offset to 0' do
|
765
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 0
|
766
|
-
end
|
767
|
-
|
768
|
-
context 'when offset is manually set' do
|
769
|
-
let(:user_params) { { page_key => 2 } }
|
770
|
-
|
771
|
-
it 'uses offset manually set, and converts it to an integer' do
|
772
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 20
|
773
|
-
end
|
774
|
-
end
|
775
|
-
|
776
|
-
context 'for a field with a configured more_limit' do
|
777
|
-
let(:facet_field) { 'format_more_limited' }
|
778
|
-
|
779
|
-
it 'uses the more_limit configuration' do
|
780
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 51
|
781
|
-
end
|
782
|
-
end
|
783
|
-
|
784
|
-
context 'for a field with a param key different from the field name' do
|
785
|
-
let(:user_params) { { page_key => 2, 'facet.sort': 'index', 'facet.prefix': 'x' } }
|
786
|
-
let(:facet_field) { 'param_key' }
|
787
|
-
|
788
|
-
let(:blacklight_config) do
|
789
|
-
Blacklight::Configuration.new.tap do |config|
|
790
|
-
config.add_facet_field key: 'param_key', field: 'solr_field', more_limit: 50, ex: 'other'
|
791
|
-
|
792
|
-
config.add_facet_fields_to_solr_request!
|
793
|
-
end
|
794
|
-
end
|
795
|
-
|
796
|
-
it "uses the configured solr field name in queries" do
|
797
|
-
expect(solr_parameters).to include 'f.solr_field.facet.limit': 51,
|
798
|
-
'f.solr_field.facet.offset': 50,
|
799
|
-
'f.solr_field.facet.sort': 'index',
|
800
|
-
'f.solr_field.facet.prefix': 'x',
|
801
|
-
'facet.field': '{!ex=other}solr_field'
|
802
|
-
end
|
803
|
-
end
|
804
|
-
|
805
|
-
it 'defaults limit to 20' do
|
806
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.limit"]).to eq 21
|
807
|
-
end
|
808
|
-
|
809
|
-
it 'uses the default sort' do
|
810
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to be_blank
|
811
|
-
end
|
812
|
-
|
813
|
-
context 'when sort is provided' do
|
814
|
-
let(:user_params) { { sort_key => 'index' } }
|
815
|
-
|
816
|
-
it 'uses sort provided in the parameters' do
|
817
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.sort"]).to eq 'index'
|
818
|
-
end
|
819
|
-
end
|
820
|
-
|
821
|
-
context 'when a prefix is provided' do
|
822
|
-
let(:user_params) { { prefix_key => 'A' } }
|
823
|
-
|
824
|
-
it 'includes the prefix in the query' do
|
825
|
-
expect(solr_parameters[:"f.#{facet_field}.facet.prefix"]).to eq 'A'
|
826
|
-
end
|
827
|
-
end
|
828
|
-
end
|
829
|
-
|
830
|
-
describe "#add_facet_suggestion_parameters" do
|
831
|
-
it "does not add anything when the builder has no facet_suggestion_query and no facet" do
|
832
|
-
expect(subject.facet).to be_nil
|
833
|
-
expect(subject.facet_suggestion_query).to be_nil
|
834
|
-
solr_params = Blacklight::Solr::Request.new
|
835
|
-
|
836
|
-
expect do
|
837
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
838
|
-
end.not_to(change { solr_params })
|
839
|
-
end
|
840
|
-
|
841
|
-
it "does not add anything when the builder has a facet_suggestion_query but no facet" do
|
842
|
-
subject.facet_suggestion_query = 'artic'
|
843
|
-
expect(subject.facet_suggestion_query).to eq 'artic'
|
844
|
-
expect(subject.facet).to be_nil
|
845
|
-
solr_params = Blacklight::Solr::Request.new
|
846
|
-
|
847
|
-
expect do
|
848
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
849
|
-
end.not_to(change { solr_params })
|
850
|
-
end
|
851
|
-
|
852
|
-
it "does not add anything when the builder has a facet but no facet_suggestion_query" do
|
853
|
-
subject.facet = 'subject_facet'
|
854
|
-
expect(subject.facet_suggestion_query).to be_nil
|
855
|
-
expect(subject.facet).to eq 'subject_facet'
|
856
|
-
solr_params = Blacklight::Solr::Request.new
|
857
|
-
|
858
|
-
expect do
|
859
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
860
|
-
end.not_to(change { solr_params })
|
861
|
-
end
|
862
|
-
|
863
|
-
it "adds the facet_suggestion_query to facet.contains" do
|
864
|
-
subject.facet = 'subject_facet'
|
865
|
-
subject.facet_suggestion_query = 'artic'
|
866
|
-
solr_params = Blacklight::Solr::Request.new
|
867
|
-
|
868
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
869
|
-
|
870
|
-
expect(solr_params[:'facet.contains']).to eq 'artic'
|
871
|
-
end
|
872
|
-
|
873
|
-
it "adds the first part of facet_suggestion_query to facet.contains if it is extremely long" do
|
874
|
-
subject.facet = 'subject_facet'
|
875
|
-
subject.facet_suggestion_query = 'Call me Ishmael. Some years ago—never mind how long precisely'
|
876
|
-
solr_params = Blacklight::Solr::Request.new
|
877
|
-
|
878
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
879
|
-
|
880
|
-
expect(solr_params[:'facet.contains']).to eq 'Call me Ishmael. Some years ago—never mind how long'
|
881
|
-
end
|
882
|
-
|
883
|
-
it "adds facet.contains.ignoreCase" do
|
884
|
-
subject.facet = 'subject_facet'
|
885
|
-
subject.facet_suggestion_query = 'artic'
|
886
|
-
solr_params = Blacklight::Solr::Request.new
|
887
|
-
|
888
|
-
subject.add_facet_suggestion_parameters(solr_params)
|
889
|
-
|
890
|
-
expect(solr_params[:'facet.contains.ignoreCase']).to be true
|
891
|
-
end
|
892
|
-
end
|
893
|
-
|
894
669
|
describe "#with_tag_ex" do
|
895
670
|
it "adds an !ex local parameter if the facet configuration requests it" do
|
896
671
|
expect(subject.with_ex_local_param("xyz", "some-value")).to eq "{!ex=xyz}some-value"
|
@@ -37,7 +37,11 @@ RSpec.describe SolrDocument, :api do
|
|
37
37
|
title_tesim: ['Good Omens'])
|
38
38
|
end
|
39
39
|
|
40
|
-
|
40
|
+
if RUBY_VERSION > '3.4'
|
41
|
+
it { is_expected.to end_with "_source: {\"id\" => \"123\", \"title_tesim\" => [\"Good Omens\"]}>" }
|
42
|
+
else
|
43
|
+
it { is_expected.to end_with "_source: {\"id\"=>\"123\", \"title_tesim\"=>[\"Good Omens\"]}>" }
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
describe '.attribute' do
|
@@ -12,22 +12,19 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
12
12
|
subject { service }
|
13
13
|
|
14
14
|
let(:context) { { whatever: :value } }
|
15
|
-
let(:
|
15
|
+
let(:search_state) { Blacklight::SearchState.new(user_params, blacklight_config) }
|
16
|
+
let(:service) { described_class.new(config: blacklight_config, search_state: search_state, **context) }
|
16
17
|
let(:repository) { Blacklight::Solr::Repository.new(blacklight_config) }
|
17
18
|
let(:user_params) { {} }
|
18
19
|
|
19
|
-
let(:blacklight_config) {
|
20
|
-
let(:copy_of_catalog_config) { CatalogController.blacklight_config.deep_copy }
|
21
|
-
let(:blacklight_solr) { RSolr.connect(Blacklight.connection_config.except(:adapter)) }
|
20
|
+
let(:blacklight_config) { CatalogController.blacklight_config.deep_copy }
|
22
21
|
|
23
22
|
let(:all_docs_query) { '' }
|
24
23
|
let(:no_docs_query) { 'zzzzzzzzzzzz' }
|
25
|
-
# f[format][]=Book&f[language_facet][]=English
|
26
24
|
let(:single_facet) { { format: 'Book' } }
|
27
25
|
|
28
26
|
before do
|
29
27
|
allow(service).to receive(:repository).and_return(repository)
|
30
|
-
service.repository.connection = blacklight_solr
|
31
28
|
end
|
32
29
|
|
33
30
|
describe '#search_builder_class' do
|
@@ -39,8 +36,7 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
39
36
|
|
40
37
|
context 'when the search_builder_class is passed in' do
|
41
38
|
let(:klass) { double("Search builder") }
|
42
|
-
|
43
|
-
let(:service) { described_class.new(config: blacklight_config, user_params: user_params, search_builder_class: klass) }
|
39
|
+
let(:context) { { search_builder_class: klass } }
|
44
40
|
|
45
41
|
it 'uses the passed value' do
|
46
42
|
expect(subject).to eq klass
|
@@ -50,16 +46,15 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
50
46
|
|
51
47
|
# SPECS FOR SEARCH RESULTS FOR QUERY
|
52
48
|
describe 'Search Results', :integration do
|
53
|
-
let(:blacklight_config) { copy_of_catalog_config }
|
54
|
-
|
55
49
|
describe 'for a sample query returning results' do
|
56
50
|
let(:user_params) { { q: all_docs_query } }
|
51
|
+
let(:blacklight_solr) { service.repository.connection }
|
57
52
|
|
58
53
|
it "uses the configured request handler" do
|
59
54
|
allow(blacklight_config).to receive(:default_solr_params).and_return(qt: 'custom_request_handler')
|
60
55
|
allow(blacklight_solr).to receive(:send_and_receive) do |path, params|
|
61
56
|
expect(path).to eq 'select'
|
62
|
-
expect(params[:params]['facet.field']).to
|
57
|
+
expect(params[:params]['facet.field']).to contain_exactly "format", "{!ex=pub_date_ssim_single}pub_date_ssim", "subject_ssim", "language_ssim", "lc_1letter_ssim", "subject_geo_ssim", "subject_era_ssim"
|
63
58
|
expect(params[:params]["facet.query"]).to eq ["pub_date_ssim:[#{5.years.ago.year} TO *]", "pub_date_ssim:[#{10.years.ago.year} TO *]", "pub_date_ssim:[#{25.years.ago.year} TO *]"]
|
64
59
|
expect(params[:params]).to include('rows' => 10, 'qt' => "custom_request_handler", 'q' => "", "f.subject_ssim.facet.limit" => 21, 'sort' => "score desc, pub_date_si desc, title_si asc")
|
65
60
|
end.and_return('response' => { 'docs' => [] })
|
@@ -68,7 +63,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
68
63
|
end
|
69
64
|
|
70
65
|
describe "for a query returning a grouped response" do
|
71
|
-
let(:blacklight_config) { copy_of_catalog_config }
|
72
66
|
let(:user_params) { { q: all_docs_query } }
|
73
67
|
|
74
68
|
before do
|
@@ -82,7 +76,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
82
76
|
end
|
83
77
|
|
84
78
|
describe "for a query returning multiple groups", :integration do
|
85
|
-
let(:blacklight_config) { copy_of_catalog_config }
|
86
79
|
let(:user_params) { { q: all_docs_query } }
|
87
80
|
|
88
81
|
before do
|
@@ -140,7 +133,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
140
133
|
|
141
134
|
# SPECS FOR SEARCH RESULTS FOR FACETS
|
142
135
|
describe 'Facets in Search Results for All Docs Query', :integration do
|
143
|
-
let(:blacklight_config) { copy_of_catalog_config }
|
144
136
|
let(:user_params) { { q: all_docs_query } }
|
145
137
|
|
146
138
|
before do
|
@@ -185,7 +177,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
185
177
|
|
186
178
|
# SPECS FOR SEARCH RESULTS FOR PAGING
|
187
179
|
describe 'Paging', :integration do
|
188
|
-
let(:blacklight_config) { copy_of_catalog_config }
|
189
180
|
let(:user_params) { { q: all_docs_query } }
|
190
181
|
|
191
182
|
it 'starts with first results by default' do
|
@@ -379,18 +370,6 @@ RSpec.describe Blacklight::SearchService, :api do
|
|
379
370
|
# TODO: maybe eventually check other types of solr requests
|
380
371
|
# more like this
|
381
372
|
# nearby on shelf
|
382
|
-
it "raises a Blacklight exception if RSolr can't connect to the Solr instance" do
|
383
|
-
allow(blacklight_solr).to receive(:send_and_receive).and_raise(Errno::ECONNREFUSED)
|
384
|
-
expect { service.repository.search }.to raise_exception(/Unable to connect to Solr instance/)
|
385
|
-
end
|
386
|
-
|
387
|
-
it "raises a Blacklight exception if RSolr raises a timeout error connecting to Solr instance" do
|
388
|
-
rsolr_timeout = RSolr::Error::Timeout.new(nil, nil)
|
389
|
-
allow(rsolr_timeout).to receive(:to_s).and_return("mocked RSolr timeout")
|
390
|
-
|
391
|
-
allow(blacklight_solr).to receive(:send_and_receive).and_raise(rsolr_timeout)
|
392
|
-
expect { service.repository.search }.to raise_exception(Blacklight::Exceptions::RepositoryTimeout, /Timeout connecting to Solr instance/)
|
393
|
-
end
|
394
373
|
|
395
374
|
describe "#previous_and_next_documents_for_search" do
|
396
375
|
let(:user_params) { { q: '', per_page: 100 } }
|
data/spec/spec_helper.rb
CHANGED
@@ -1,24 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ViewComponentTestHelpers
|
4
|
-
# Work around for https://github.com/teamcapybara/capybara/issues/2466
|
5
|
-
def render_inline_to_capybara_node(component)
|
6
|
-
Capybara::Node::Simple.new(render_inline(component).to_s)
|
7
|
-
end
|
8
|
-
|
9
|
-
# Work-around for https://github.com/ViewComponent/view_component/pull/1661
|
10
|
-
# which made the component test's controller method (more) private. This makes
|
11
|
-
# it available so we can set up controller-level state for our tests.
|
12
|
-
def controller
|
13
|
-
# ViewComponent 2.x
|
14
|
-
return super if defined?(super)
|
15
|
-
|
16
|
-
# ViewComponent 3.x
|
17
|
-
return vc_test_controller if defined?(vc_test_controller)
|
18
|
-
|
19
|
-
ApplicationController.new.extend(Rails.application.routes.url_helpers)
|
20
|
-
end
|
21
|
-
|
22
4
|
# Nokogiri 1.15.0 upgrades the vendored libxml2 from v2.10.4 to v2.11.3
|
23
5
|
# libxml2 v2.11.0 introduces a change to parsing HTML href attributes
|
24
6
|
# in nokogiri < 1.15, brackets in href attributes are escaped:
|
@@ -4,15 +4,21 @@ RSpec.describe 'catalog/facet.html.erb' do
|
|
4
4
|
let(:display_facet) { double }
|
5
5
|
let(:blacklight_config) { Blacklight::Configuration.new }
|
6
6
|
let(:component) { instance_double(Blacklight::FacetComponent) }
|
7
|
+
let(:pagination) { instance_double(Blacklight::FacetFieldPaginationComponent) }
|
8
|
+
let(:facet_filters) { instance_double(Blacklight::Facets::FiltersComponent) }
|
7
9
|
|
8
10
|
before do
|
9
11
|
allow(Blacklight::FacetComponent).to receive(:new).and_return(component)
|
12
|
+
allow(Blacklight::Facets::FiltersComponent).to receive(:new).and_return(facet_filters)
|
13
|
+
allow(Blacklight::FacetFieldPaginationComponent).to receive(:new).and_return(pagination)
|
14
|
+
|
10
15
|
allow(view).to receive(:render).and_call_original
|
11
16
|
allow(view).to receive(:render).with(component)
|
17
|
+
allow(view).to receive(:render).with(facet_filters)
|
18
|
+
allow(view).to receive(:render).with(pagination)
|
12
19
|
|
13
20
|
blacklight_config.add_facet_field 'xyz', label: "Facet title"
|
14
21
|
allow(view).to receive(:blacklight_config).and_return(blacklight_config)
|
15
|
-
stub_template 'catalog/_facet_pagination.html.erb' => 'pagination'
|
16
22
|
assign :facet, blacklight_config.facet_fields['xyz']
|
17
23
|
assign :display_facet, display_facet
|
18
24
|
end
|
@@ -22,9 +28,10 @@ RSpec.describe 'catalog/facet.html.erb' do
|
|
22
28
|
expect(rendered).to have_css 'h1', text: "Facet title"
|
23
29
|
end
|
24
30
|
|
25
|
-
it "renders
|
31
|
+
it "renders the subcomponents" do
|
26
32
|
render
|
27
|
-
expect(
|
33
|
+
expect(view).to have_received(:render).with(facet_filters)
|
34
|
+
expect(view).to have_received(:render).with(pagination).twice
|
28
35
|
end
|
29
36
|
|
30
37
|
it "renders the facet limit" do
|
@@ -14,13 +14,16 @@ RSpec.describe "catalog/index" do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
let(:blacklight_config) { CatalogController.blacklight_config.deep_copy }
|
17
|
+
let(:search_builder) { Blacklight::SearchBuilder.new(view) }
|
18
|
+
let(:response) { Blacklight::Solr::Response.new({ response: { numFound: 30 } }, search_builder) }
|
17
19
|
|
18
20
|
before do
|
19
|
-
|
21
|
+
allow(view).to receive_messages(action_name: 'index', blacklight_config: blacklight_config)
|
22
|
+
@response = response
|
20
23
|
allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
|
21
|
-
allow(
|
24
|
+
allow(search_builder).to receive_messages(start: 10, rows: 10)
|
25
|
+
allow(response).to receive(:documents).and_return(document_list)
|
22
26
|
params['content_format'] = 'some_format'
|
23
|
-
allow(view).to receive_messages(action_name: 'index', blacklight_config: blacklight_config)
|
24
27
|
end
|
25
28
|
|
26
29
|
# We need to use rexml to test certain things that have_tag wont' test
|
@@ -20,12 +20,14 @@ RSpec.describe "catalog/index.html.erb" do
|
|
20
20
|
before do
|
21
21
|
stub_template "catalog/_results_pagination.html.erb" => ""
|
22
22
|
allow(view).to receive_messages(has_search_parameters?: true, blacklight_config: Blacklight::Configuration.new)
|
23
|
+
allow(search_builder).to receive_messages(start: 10, rows: 10)
|
23
24
|
allow(controller).to receive_messages(blacklight_config: Blacklight::Configuration.new)
|
24
25
|
|
25
26
|
@response = response
|
26
27
|
end
|
27
28
|
|
28
|
-
let(:
|
29
|
+
let(:search_builder) { Blacklight::SearchBuilder.new(view) }
|
30
|
+
let(:response) { Blacklight::Solr::Response.new({ response: { numFound: 30 } }, search_builder) }
|
29
31
|
|
30
32
|
it "renders the search_header partial" do
|
31
33
|
render
|