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
@@ -99,7 +99,7 @@ RSpec.describe "Facets" do
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
describe 'Facet modal' do
|
102
|
+
describe 'Facet modal content' do
|
103
103
|
it 'allows the user to filter a long list of facet values', :js do
|
104
104
|
visit '/catalog/facet/subject_ssim'
|
105
105
|
expect(page).to have_no_link 'Old age' # This is on the second page of facet values
|
@@ -107,6 +107,7 @@ RSpec.describe "Facets" do
|
|
107
107
|
|
108
108
|
fill_in 'facet_suggest_subject_ssim', with: "ag"
|
109
109
|
|
110
|
+
expect(page).to have_css '.facet-suggestions'
|
110
111
|
expect(page).to have_link 'Old age'
|
111
112
|
expect(page).to have_css 'a.facet-select', count: 2
|
112
113
|
end
|
@@ -115,19 +116,81 @@ RSpec.describe "Facets" do
|
|
115
116
|
visit '/catalog/facet/subject_ssim?q=tibet&search_field=all_fields'
|
116
117
|
fill_in 'facet_suggest_subject_ssim', with: 'la'
|
117
118
|
|
119
|
+
expect(page).to have_css '.facet-suggestions'
|
118
120
|
expect(page).to have_link 'Tibetan language'
|
121
|
+
expect(page).to have_no_link 'Law'
|
119
122
|
expect(page).to have_css 'a.facet-select', count: 1
|
120
123
|
end
|
121
124
|
|
122
|
-
it 'allows the user to
|
125
|
+
it 'allows the user to toggle the sort, then filter', :js do
|
123
126
|
visit '/catalog/facet/subject_ssim'
|
124
|
-
expect(page).to have_no_link 'Old age' # This is on the second page of facet values
|
125
|
-
expect(page).to have_css 'a.facet-select', count: 20
|
126
127
|
|
127
|
-
fill_in 'facet_suggest_subject_ssim', with:
|
128
|
+
fill_in 'facet_suggest_subject_ssim', with: 'po'
|
128
129
|
|
129
|
-
expect(page).to
|
130
|
-
expect(page).to
|
130
|
+
expect(page).to have_css '.facet-suggestions'
|
131
|
+
expect(page).to have_css('.facet-values li:nth-child(1)', text: 'Political plays, Japanese')
|
132
|
+
expect(page).to have_css('.facet-values li:nth-child(2)', text: 'Military weapons')
|
133
|
+
expect(page).to have_css('.facet-values li:nth-child(3)', text: 'Political science')
|
134
|
+
|
135
|
+
first(:link, 'A-Z Sort').click
|
136
|
+
|
137
|
+
expect(page).to have_css('.facet-suggest[data-facet-search-context*="facet.sort=index"]')
|
138
|
+
|
139
|
+
fill_in 'facet_suggest_subject_ssim', with: 'po'
|
140
|
+
|
141
|
+
expect(page).to have_css '.facet-suggestions'
|
142
|
+
expect(page).to have_css('.facet-values li:nth-child(1)', text: 'Military weapons')
|
143
|
+
expect(page).to have_css('.facet-values li:nth-child(2)', text: 'Political plays, Japanese')
|
144
|
+
expect(page).to have_css('.facet-values li:nth-child(3)', text: 'Political science')
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'allows the user to choose a starting letter, then filter', :js do
|
148
|
+
visit '/catalog/facet/subject_ssim'
|
149
|
+
|
150
|
+
first(:link, 'A-Z Sort').click
|
151
|
+
expect(page).to have_css('.facet-suggest[data-facet-search-context*="facet.sort=index"]')
|
152
|
+
|
153
|
+
click_on 'M'
|
154
|
+
expect(page).to have_css('.facet-suggest[data-facet-search-context*="facet.prefix=M"]')
|
155
|
+
|
156
|
+
fill_in 'facet_suggest_subject_ssim', with: 'te'
|
157
|
+
|
158
|
+
expect(page).to have_css '.facet-suggestions'
|
159
|
+
expect(page).to have_link 'Maternity insurance'
|
160
|
+
expect(page).to have_no_link 'Teaching'
|
161
|
+
end
|
162
|
+
|
163
|
+
it 'hides previous/next links when filtering', :js do
|
164
|
+
visit '/catalog/facet/subject_ssim'
|
165
|
+
expect(page).to have_link 'Next »'
|
166
|
+
|
167
|
+
fill_in 'facet_suggest_subject_ssim', with: 'te'
|
168
|
+
expect(page).to have_css '.facet-suggestions'
|
169
|
+
expect(page).to have_no_link 'Next »'
|
170
|
+
|
171
|
+
fill_in 'facet_suggest_subject_ssim', with: ''
|
172
|
+
expect(page).to have_no_css '.facet-suggestions'
|
173
|
+
expect(page).to have_link 'Next »'
|
174
|
+
end
|
175
|
+
|
176
|
+
context 'when facet is configured with suggest: false' do
|
177
|
+
before do
|
178
|
+
enabled = CatalogController.blacklight_config.dup
|
179
|
+
enabled.facet_fields[:subject_ssim].merge!({ suggest: false })
|
180
|
+
allow(CatalogController).to receive(:blacklight_config).and_return enabled
|
181
|
+
end
|
182
|
+
|
183
|
+
it 'does not offer the user a way to filter the list of facet values' do
|
184
|
+
visit '/catalog/facet/subject_ssim'
|
185
|
+
expect(page).to have_no_field 'facet_suggest_subject_ssim'
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
describe 'facebook-style facet parameters' do
|
191
|
+
it 'can perform a search' do
|
192
|
+
visit '/?f[subject_ssim][0]=Iran.+Viza%CC%84rat-i+Kishvar'
|
193
|
+
expect(page).to have_text 'Naqdī barā-yi tamām-i fuṣūl'
|
131
194
|
end
|
132
195
|
end
|
133
196
|
end
|
@@ -26,4 +26,14 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
26
26
|
expect(presenter).to be_a SomePresenter
|
27
27
|
end
|
28
28
|
end
|
29
|
+
|
30
|
+
describe "#search_facet_path" do
|
31
|
+
before do
|
32
|
+
params[:controller] = 'catalog'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "is the same as the catalog path" do
|
36
|
+
expect(helper.search_facet_path(id: "some_facet", page: 5)).to eq facet_catalog_path(id: "some_facet")
|
37
|
+
end
|
38
|
+
end
|
29
39
|
end
|
@@ -23,7 +23,7 @@ RSpec.describe Blacklight::Configuration::FacetField do
|
|
23
23
|
subject.normalize!
|
24
24
|
|
25
25
|
expect(subject.presenter).to eq Blacklight::FacetFieldPresenter
|
26
|
-
expect(subject.component).to eq Blacklight::
|
26
|
+
expect(subject.component).to eq Blacklight::Facets::ListComponent
|
27
27
|
end
|
28
28
|
|
29
29
|
context 'when component is set to true' do
|
@@ -34,7 +34,7 @@ RSpec.describe Blacklight::Configuration::FacetField do
|
|
34
34
|
it 'casts to the default component' do
|
35
35
|
subject.normalize!
|
36
36
|
|
37
|
-
expect(subject.component).to eq Blacklight::
|
37
|
+
expect(subject.component).to eq Blacklight::Facets::ListComponent
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -52,7 +52,7 @@ RSpec.describe Blacklight::Parameters do
|
|
52
52
|
let(:search_state) { Blacklight::SearchState.new(query_params, blacklight_config) }
|
53
53
|
let(:blacklight_config) { Blacklight::Configuration.new }
|
54
54
|
|
55
|
-
context 'with
|
55
|
+
context 'with facebook\'s badly mangled query parameters' do
|
56
56
|
let(:query_params) do
|
57
57
|
ActionController::Parameters.new(
|
58
58
|
f: { field: { '0': 'first', '1': 'second' } },
|
@@ -67,6 +67,17 @@ RSpec.describe Blacklight::Parameters do
|
|
67
67
|
it 'normalizes the facets to the expected format' do
|
68
68
|
expect(params.permit_search_params.to_h.with_indifferent_access).to include f: { field: %w[first second] }, f_inclusive: { field: %w[first second] }
|
69
69
|
end
|
70
|
+
|
71
|
+
context 'when several fields are configured' do
|
72
|
+
before do
|
73
|
+
blacklight_config.add_facet_field 'other_field'
|
74
|
+
blacklight_config.add_facet_field 'some_other_pivot_field', pivot: %w[abc def]
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'normalizes the facets to the expected format' do
|
78
|
+
expect(params.permit_search_params.to_h.with_indifferent_access).to include f: { field: %w[first second] }, f_inclusive: { field: %w[first second] }
|
79
|
+
end
|
80
|
+
end
|
70
81
|
end
|
71
82
|
|
72
83
|
context 'with filter_search_state_fields set to false' do
|
@@ -198,4 +198,22 @@ RSpec.describe Blacklight::SearchState::FilterField do
|
|
198
198
|
expect(search_state.filter('some_field').include?(OpenStruct.new(value: '1'))).to be true
|
199
199
|
end
|
200
200
|
end
|
201
|
+
|
202
|
+
describe '#permitted_params' do
|
203
|
+
context 'with a pivot facet' do
|
204
|
+
let(:blacklight_config) do
|
205
|
+
Blacklight::Configuration.new.configure do |config|
|
206
|
+
config.add_facet_field 'my_pivot', pivot: %w[format language_ssim]
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
it 'marks all the pivot fields as permitted' do
|
211
|
+
field = described_class.new blacklight_config.facet_fields['my_pivot'], search_state
|
212
|
+
expect(field.permitted_params).to eq({
|
213
|
+
f: { "-format" => [], "-language_ssim" => [], "format" => [], "language_ssim" => [] },
|
214
|
+
f_inclusive: { "format" => [], "language_ssim" => [] }
|
215
|
+
})
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
201
219
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
RSpec.describe
|
3
|
+
RSpec.describe Blacklight::Configuration, :api do
|
4
4
|
let(:config) do
|
5
|
-
|
5
|
+
described_class.new
|
6
6
|
end
|
7
7
|
|
8
8
|
it "supports arbitrary configuration values" do
|
@@ -17,14 +17,18 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
17
17
|
expect(config).to be_a Blacklight::OpenStructWithHashAccess
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
context 'when passed a block' do
|
21
|
+
let(:config) do
|
22
|
+
described_class.new(a: 1) { |c| c.a = 2 }
|
23
|
+
end
|
22
24
|
|
23
|
-
|
25
|
+
it "accepts a block for configuration" do
|
26
|
+
expect(config.a).to eq 2
|
24
27
|
|
25
|
-
|
28
|
+
config.configure { |c| c.a = 3 }
|
26
29
|
|
27
|
-
|
30
|
+
expect(config.a).to eq 3
|
31
|
+
end
|
28
32
|
end
|
29
33
|
end
|
30
34
|
|
@@ -84,11 +88,11 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
84
88
|
|
85
89
|
describe "spell_max" do
|
86
90
|
it "defaults to 5" do
|
87
|
-
expect(
|
91
|
+
expect(config.spell_max).to eq 5
|
88
92
|
end
|
89
93
|
|
90
94
|
it "accepts config'd value" do
|
91
|
-
expect(
|
95
|
+
expect(described_class.new(spell_max: 10).spell_max).to eq 10
|
92
96
|
end
|
93
97
|
end
|
94
98
|
|
@@ -181,9 +185,9 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
181
185
|
|
182
186
|
describe "add alternative solr fields" do
|
183
187
|
it "lets you define any arbitrary solr field" do
|
184
|
-
|
188
|
+
described_class.define_field_access :my_custom_field
|
185
189
|
|
186
|
-
config =
|
190
|
+
config = described_class.new do |config|
|
187
191
|
config.add_my_custom_field 'qwerty', label: "asdf"
|
188
192
|
end
|
189
193
|
|
@@ -191,9 +195,9 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
191
195
|
end
|
192
196
|
|
193
197
|
it "lets you define a field accessor that uses an existing field-type" do
|
194
|
-
|
198
|
+
described_class.define_field_access :my_custom_facet_field, class: Blacklight::Configuration::FacetField
|
195
199
|
|
196
|
-
config =
|
200
|
+
config = described_class.new do |config|
|
197
201
|
config.add_my_custom_facet_field 'qwerty', label: "asdf"
|
198
202
|
end
|
199
203
|
|
@@ -406,13 +410,13 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
406
410
|
|
407
411
|
describe "add_search_field" do
|
408
412
|
it "accepts hash form" do
|
409
|
-
c =
|
413
|
+
c = described_class.new
|
410
414
|
c.add_search_field(key: "my_search_key")
|
411
415
|
expect(c.search_fields["my_search_key"]).not_to be_nil
|
412
416
|
end
|
413
417
|
|
414
418
|
it "accepts two-arg hash form" do
|
415
|
-
c =
|
419
|
+
c = described_class.new
|
416
420
|
|
417
421
|
c.add_search_field("my_search_type",
|
418
422
|
key: "my_search_type",
|
@@ -428,7 +432,7 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
428
432
|
end
|
429
433
|
|
430
434
|
it "accepts block form" do
|
431
|
-
c =
|
435
|
+
c = described_class.new
|
432
436
|
|
433
437
|
c.add_search_field("some_field") do |field|
|
434
438
|
field.solr_parameters = { qf: "solr_field^10" }
|
@@ -443,7 +447,7 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
443
447
|
end
|
444
448
|
|
445
449
|
it "accepts SearchField object" do
|
446
|
-
c =
|
450
|
+
c = described_class.new
|
447
451
|
|
448
452
|
f = Blacklight::Configuration::SearchField.new(foo: "bar")
|
449
453
|
|
@@ -481,7 +485,7 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
481
485
|
|
482
486
|
describe "add_sort_field" do
|
483
487
|
it "takes a hash" do
|
484
|
-
c =
|
488
|
+
c = described_class.new
|
485
489
|
c.add_sort_field(key: "my_sort_key", sort: "score desc")
|
486
490
|
expect(c.sort_fields["my_sort_key"]).not_to be_nil
|
487
491
|
end
|
@@ -692,23 +696,23 @@ RSpec.describe "Blacklight::Configuration", :api do
|
|
692
696
|
|
693
697
|
describe '.default_configuration' do
|
694
698
|
it 'adds additional default configuration properties' do
|
695
|
-
|
696
|
-
|
699
|
+
described_class.default_configuration do
|
700
|
+
described_class.default_values[:a] = '123'
|
697
701
|
end
|
698
702
|
|
699
|
-
|
700
|
-
|
703
|
+
described_class.default_configuration do
|
704
|
+
described_class.default_values[:b] = 'abc'
|
701
705
|
end
|
702
706
|
|
703
|
-
expect(
|
704
|
-
expect(
|
707
|
+
expect(described_class.default_values[:a]).to eq '123'
|
708
|
+
expect(described_class.default_values[:b]).to eq 'abc'
|
705
709
|
ensure
|
706
710
|
# reset the default configuration
|
707
|
-
|
708
|
-
|
711
|
+
described_class.default_values.delete(:a)
|
712
|
+
described_class.default_values.delete(:b)
|
709
713
|
|
710
|
-
|
711
|
-
|
714
|
+
described_class.default_configuration.delete_at(1)
|
715
|
+
described_class.default_configuration.delete_at(2)
|
712
716
|
end
|
713
717
|
end
|
714
718
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Blacklight::FacetSearchBuilder, :api do
|
4
|
+
subject(:builder) { described_class.new processor_chain, scope }
|
5
|
+
|
6
|
+
let(:processor_chain) { [] }
|
7
|
+
let(:blacklight_config) { Blacklight::Configuration.new }
|
8
|
+
let(:scope) { double blacklight_config: blacklight_config, search_state_class: nil }
|
9
|
+
|
10
|
+
describe "#facet_suggestion_query" do
|
11
|
+
it "is nil if no value is set" do
|
12
|
+
expect(subject.facet_suggestion_query).to be_nil
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets facet_suggestion_query value" do
|
16
|
+
expect(subject.facet_suggestion_query('antel').facet_suggestion_query).to eq 'antel'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -125,7 +125,7 @@ RSpec.describe Blacklight::SearchBuilder, :api do
|
|
125
125
|
end
|
126
126
|
|
127
127
|
subject.with(a: 1)
|
128
|
-
expect(subject.processed_parameters).to include step_1: 'builder'
|
128
|
+
expect(subject.send(:processed_parameters)).to include step_1: 'builder'
|
129
129
|
end
|
130
130
|
end
|
131
131
|
|
@@ -225,16 +225,6 @@ RSpec.describe Blacklight::SearchBuilder, :api do
|
|
225
225
|
end
|
226
226
|
end
|
227
227
|
|
228
|
-
describe "#facet_suggestion_query" do
|
229
|
-
it "is nil if no value is set" do
|
230
|
-
expect(subject.facet_suggestion_query).to be_nil
|
231
|
-
end
|
232
|
-
|
233
|
-
it "sets facet_suggestion_query value" do
|
234
|
-
expect(subject.facet_suggestion_query('antel').facet_suggestion_query).to eq 'antel'
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
228
|
describe "#search_field" do
|
239
229
|
it "uses the requested search field" do
|
240
230
|
blacklight_config.add_search_field 'x'
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.describe Blacklight::Solr::DefaultFilterQueryBuilder do
|
4
|
+
subject { described_class.new(blacklight_config: blacklight_config) }
|
5
|
+
|
6
|
+
let(:blacklight_config) { CatalogController.blacklight_config.deep_copy }
|
7
|
+
|
8
|
+
describe "#facet_value_to_fq_string" do
|
9
|
+
it "uses the configured field name" do
|
10
|
+
blacklight_config.add_facet_field :facet_key, field: "facet_name"
|
11
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_key", "my value")).to eq "{!term f=facet_name}my value"
|
12
|
+
end
|
13
|
+
|
14
|
+
it "uses the raw handler for strings" do
|
15
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name}my value"
|
16
|
+
end
|
17
|
+
|
18
|
+
it "passes booleans through" do
|
19
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq '{!term f=facet_name}true'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "passes boolean-like strings through" do
|
23
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "true")).to eq '{!term f=facet_name}true'
|
24
|
+
end
|
25
|
+
|
26
|
+
it "passes integers through" do
|
27
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1)).to eq '{!term f=facet_name}1'
|
28
|
+
end
|
29
|
+
|
30
|
+
it "passes integer-like strings through" do
|
31
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1")).to eq '{!term f=facet_name}1'
|
32
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", -1)).to eq '{!term f=facet_name}-1'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "passes floats through" do
|
36
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1.11)).to eq '{!term f=facet_name}1.11'
|
37
|
+
end
|
38
|
+
|
39
|
+
it "passes floats in strings through" do
|
40
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "1.11")).to eq '{!term f=facet_name}1.11'
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'date handling' do
|
44
|
+
before { allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: true, query: nil, tag: nil, field: 'facet_name')) }
|
45
|
+
|
46
|
+
it "passes date-type fields through" do
|
47
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "2012-01-01")).to eq '{!term f=facet_name}2012-01-01'
|
48
|
+
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'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "formats Date objects correctly" do
|
52
|
+
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(date: nil, query: nil, tag: nil, field: 'facet_name'))
|
53
|
+
d = DateTime.parse("2003-04-09T00:00:00")
|
54
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", d)).to eq '{!term f=facet_name}2003-04-09T00:00:00Z'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it "handles range requests" do
|
59
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..5)).to eq "facet_name:[1 TO 5]"
|
60
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", 1..nil)).to eq "facet_name:[1 TO *]"
|
61
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", nil..5)).to eq "facet_name:[* TO 5]"
|
62
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", nil..nil)).to eq "facet_name:[* TO *]"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "adds tag local parameters" do
|
66
|
+
allow(blacklight_config.facet_fields).to receive(:[]).with('facet_name').and_return(double(query: nil, tag: 'asdf', date: nil, field: 'facet_name'))
|
67
|
+
|
68
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", true)).to eq "{!term f=facet_name tag=asdf}true"
|
69
|
+
expect(subject.send(:facet_value_to_fq_string, "facet_name", "my value")).to eq "{!term f=facet_name tag=asdf}my value"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -179,10 +179,6 @@ RSpec.describe "Blacklight::Solr::Document", :api do
|
|
179
179
|
# registration in an after, sorry.
|
180
180
|
end
|
181
181
|
|
182
|
-
it "registers format" do
|
183
|
-
expect(defined?("Mime::MOCK2")).to be_truthy
|
184
|
-
end
|
185
|
-
|
186
182
|
it "registers as alias only" do
|
187
183
|
expect(Mime::Type.lookup("application/mock2")).not_to equal Mime::Type.lookup_by_extension("mock2")
|
188
184
|
end
|