blacklight 7.7.0 → 7.8.0
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/.docker/app/Dockerfile +26 -0
- data/.docker/app/entrypoint.sh +6 -0
- data/.env +5 -0
- data/.rubocop_todo.yml +13 -13
- data/.travis.yml +15 -23
- data/Gemfile +4 -1
- data/README.md +4 -0
- data/VERSION +1 -1
- data/app/assets/stylesheets/blacklight/_pagination.scss +4 -0
- data/app/components/blacklight/constraint_layout_component.html.erb +21 -0
- data/app/components/blacklight/constraint_layout_component.rb +16 -0
- data/app/components/blacklight/facet_field_component.html.erb +25 -0
- data/app/components/blacklight/facet_field_component.rb +11 -0
- data/app/components/blacklight/facet_field_list_component.html.erb +18 -0
- data/app/components/blacklight/facet_field_list_component.rb +22 -0
- data/app/components/blacklight/facet_field_no_layout_component.rb +13 -0
- data/app/components/blacklight/facet_item_component.rb +120 -0
- data/app/helpers/blacklight/catalog_helper_behavior.rb +2 -2
- data/app/helpers/blacklight/facets_helper_behavior.rb +84 -48
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +64 -33
- data/app/javascript/blacklight/modal.js +1 -1
- data/app/models/concerns/blacklight/document/extensions.rb +3 -0
- data/app/models/concerns/blacklight/document/semantic_fields.rb +0 -4
- data/app/presenters/blacklight/facet_field_presenter.rb +57 -0
- data/app/presenters/blacklight/facet_item_presenter.rb +81 -0
- data/app/views/catalog/_citation.html.erb +1 -1
- data/app/views/catalog/_constraints.html.erb +1 -1
- data/app/views/catalog/_constraints_element.html.erb +5 -24
- data/app/views/catalog/_email_form.html.erb +1 -1
- data/app/views/catalog/_facet_layout.html.erb +8 -17
- data/app/views/catalog/_facet_limit.html.erb +3 -12
- data/app/views/catalog/_facet_pagination.html.erb +2 -2
- data/app/views/catalog/_facet_pivot.html.erb +4 -4
- data/app/views/catalog/_sms_form.html.erb +1 -1
- data/blacklight.gemspec +1 -0
- data/config/locales/blacklight.ar.yml +29 -25
- data/docker-compose.yml +35 -0
- data/lib/blacklight/engine.rb +2 -6
- data/lib/blacklight/search_state.rb +32 -0
- data/lib/blacklight/solr/response/facets.rb +2 -0
- data/lib/generators/blacklight/assets_generator.rb +10 -0
- data/spec/{views/catalog/_constraints_element.html.erb_spec.rb → components/blacklight/constraint_layout_component_spec.rb} +21 -11
- data/spec/components/blacklight/facet_field_list_component_spec.rb +108 -0
- data/spec/components/blacklight/facet_item_component_spec.rb +50 -0
- data/spec/features/facets_spec.rb +1 -1
- data/spec/helpers/blacklight/facets_helper_behavior_spec.rb +24 -12
- data/spec/helpers/blacklight/render_constraints_helper_behavior_spec.rb +4 -23
- data/spec/lib/blacklight/search_state_spec.rb +38 -0
- data/spec/models/blacklight/solr/response/facets_spec.rb +30 -1
- data/spec/presenters/blacklight/facet_field_presenter_spec.rb +109 -0
- data/spec/presenters/blacklight/facet_item_presenter_spec.rb +92 -0
- data/spec/spec_helper.rb +2 -0
- data/spec/support/presenter_test_helpers.rb +11 -0
- data/spec/views/catalog/_facet_group.html.erb_spec.rb +1 -0
- data/tasks/blacklight.rake +30 -23
- metadata +43 -5
data/docker-compose.yml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
version: "3.7"
|
2
|
+
|
3
|
+
services:
|
4
|
+
app:
|
5
|
+
build:
|
6
|
+
context: .
|
7
|
+
dockerfile: .docker/app/Dockerfile
|
8
|
+
args:
|
9
|
+
- ALPINE_RUBY_VERSION
|
10
|
+
volumes:
|
11
|
+
- .:/app
|
12
|
+
depends_on:
|
13
|
+
- solr
|
14
|
+
ports:
|
15
|
+
- "3000:3000"
|
16
|
+
environment:
|
17
|
+
- SOLR_URL # Set via environment variable or use default defined in .env file
|
18
|
+
- RAILS_VERSION # Set via environment variable or use default defined in .env file
|
19
|
+
|
20
|
+
solr:
|
21
|
+
environment:
|
22
|
+
- SOLR_PORT # Set via environment variable or use default defined in .env file
|
23
|
+
- SOLR_VERSION # Set via environment variable or use default defined in .env file
|
24
|
+
image: "solr:${SOLR_VERSION}"
|
25
|
+
volumes:
|
26
|
+
- $PWD/lib/generators/blacklight/templates/solr/conf:/opt/solr/conf
|
27
|
+
ports:
|
28
|
+
- "${SOLR_PORT}:8983"
|
29
|
+
entrypoint:
|
30
|
+
- docker-entrypoint.sh
|
31
|
+
- solr-precreate
|
32
|
+
- blacklight-core
|
33
|
+
- /opt/solr/conf
|
34
|
+
- "-Xms256m"
|
35
|
+
- "-Xmx512m"
|
data/lib/blacklight/engine.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
require 'view_component/engine'
|
3
|
+
|
2
4
|
module Blacklight
|
3
5
|
class Engine < Rails::Engine
|
4
6
|
engine_name "blacklight"
|
@@ -9,12 +11,6 @@ module Blacklight
|
|
9
11
|
ActionView::Base.send :include, BlacklightHelper
|
10
12
|
end
|
11
13
|
|
12
|
-
config.autoload_paths += %W(
|
13
|
-
#{config.root}/app/presenters
|
14
|
-
#{config.root}/app/controllers/concerns
|
15
|
-
#{config.root}/app/models/concerns
|
16
|
-
)
|
17
|
-
|
18
14
|
# This makes our rake tasks visible.
|
19
15
|
rake_tasks do
|
20
16
|
Dir.chdir(File.expand_path(File.join(File.dirname(__FILE__), '..'))) do
|
@@ -37,6 +37,22 @@ module Blacklight
|
|
37
37
|
end
|
38
38
|
alias to_h to_hash
|
39
39
|
|
40
|
+
# Tiny shim to make it easier to migrate raw params access to using this class
|
41
|
+
delegate :[], to: :params
|
42
|
+
deprecation_deprecate :[]
|
43
|
+
|
44
|
+
def has_constraints?
|
45
|
+
!(query_param.blank? && filter_params.blank?)
|
46
|
+
end
|
47
|
+
|
48
|
+
def query_param
|
49
|
+
params[:q]
|
50
|
+
end
|
51
|
+
|
52
|
+
def filter_params
|
53
|
+
params[:f] || {}
|
54
|
+
end
|
55
|
+
|
40
56
|
def reset(params = nil)
|
41
57
|
self.class.new(params || ActionController::Parameters.new, blacklight_config, controller)
|
42
58
|
end
|
@@ -57,6 +73,12 @@ module Blacklight
|
|
57
73
|
end
|
58
74
|
end
|
59
75
|
|
76
|
+
def remove_query_params
|
77
|
+
p = reset_search_params
|
78
|
+
p.delete(:q)
|
79
|
+
p
|
80
|
+
end
|
81
|
+
|
60
82
|
# adds the value and/or field to params[:f]
|
61
83
|
# Does NOT remove request keys and otherwise ensure that the hash
|
62
84
|
# is suitable for a redirect. See
|
@@ -130,6 +152,16 @@ module Blacklight
|
|
130
152
|
p
|
131
153
|
end
|
132
154
|
|
155
|
+
def has_facet?(config, value: nil)
|
156
|
+
facet = params&.dig(:f, config.key)
|
157
|
+
|
158
|
+
if value
|
159
|
+
(facet || []).include? value
|
160
|
+
else
|
161
|
+
facet.present?
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
133
165
|
# Merge the source params with the params_to_merge hash
|
134
166
|
# @param [Hash] params_to_merge to merge into above
|
135
167
|
# @return [ActionController::Parameters] the current search parameters after being sanitized by Blacklight::Parameters.sanitize
|
@@ -210,6 +210,8 @@ module Blacklight::Solr::Response::Facets
|
|
210
210
|
Blacklight::Solr::Response::Facets::FacetItem.new(value: key, hits: hits, label: facet_field.query[key][:label])
|
211
211
|
end
|
212
212
|
|
213
|
+
items = items.sort_by(&:hits).reverse if facet_field.sort && facet_field.sort.to_sym == :count
|
214
|
+
|
213
215
|
hash[field_name] = Blacklight::Solr::Response::Facets::FacetField.new field_name, items
|
214
216
|
end
|
215
217
|
end
|
@@ -22,6 +22,16 @@ module Blacklight
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
+
##
|
26
|
+
# Remove the empty generated app/assets/images directory. Without doing this,
|
27
|
+
# the default Sprockets 4 manifest will raise an exception.
|
28
|
+
def appease_sprockets4
|
29
|
+
return if !defined?(Sprockets::VERSION) || Sprockets::VERSION < '4'
|
30
|
+
|
31
|
+
append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
|
32
|
+
empty_directory 'app/assets/images'
|
33
|
+
end
|
34
|
+
|
25
35
|
def assets
|
26
36
|
copy_file "blacklight.scss", "app/assets/stylesheets/blacklight.scss"
|
27
37
|
|
@@ -1,24 +1,34 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Blacklight::ConstraintLayoutComponent, type: :component do
|
6
|
+
subject(:render) do
|
7
|
+
render_inline(described_class.new(params))
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:rendered) do
|
11
|
+
Capybara::Node::Simple.new(render)
|
12
|
+
end
|
13
|
+
|
4
14
|
describe "for simple display" do
|
5
|
-
|
6
|
-
|
15
|
+
let(:params) do
|
16
|
+
{ label: "my label", value: "my value" }
|
7
17
|
end
|
8
18
|
|
9
19
|
it "renders label and value" do
|
10
20
|
expect(rendered).to have_selector("span.applied-filter.constraint") do |s|
|
11
21
|
expect(s).to have_css("span.constraint-value")
|
12
22
|
expect(s).not_to have_css("a.constraint-value")
|
13
|
-
expect(s).to have_selector "span.filter-name",
|
14
|
-
expect(s).to have_selector "span.filter-value",
|
23
|
+
expect(s).to have_selector "span.filter-name", text: "my label"
|
24
|
+
expect(s).to have_selector "span.filter-value", text: "my value"
|
15
25
|
end
|
16
26
|
end
|
17
27
|
end
|
18
28
|
|
19
29
|
describe "with remove link" do
|
20
|
-
|
21
|
-
|
30
|
+
let(:params) do
|
31
|
+
{ label: "my label", value: "my value", remove_path: "http://remove" }
|
22
32
|
end
|
23
33
|
|
24
34
|
it "includes remove link" do
|
@@ -34,8 +44,8 @@ RSpec.describe "catalog/_constraints_element.html.erb" do
|
|
34
44
|
end
|
35
45
|
|
36
46
|
describe "with custom classes" do
|
37
|
-
|
38
|
-
|
47
|
+
let(:params) do
|
48
|
+
{ label: "my label", value: "my value", classes: %w[class1 class2] }
|
39
49
|
end
|
40
50
|
|
41
51
|
it "includes them" do
|
@@ -44,8 +54,8 @@ RSpec.describe "catalog/_constraints_element.html.erb" do
|
|
44
54
|
end
|
45
55
|
|
46
56
|
describe "with no escaping" do
|
47
|
-
|
48
|
-
|
57
|
+
let(:params) do
|
58
|
+
{ label: "<span class='custom_label'>my label</span>".html_safe, value: "<span class='custom_value'>my value</span>".html_safe }
|
49
59
|
end
|
50
60
|
|
51
61
|
it "does not escape key and value" do
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Blacklight::FacetFieldListComponent, type: :component do
|
6
|
+
subject(:render) do
|
7
|
+
render_inline(described_class.new(facet_field: facet_field))
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:rendered) do
|
11
|
+
Capybara::Node::Simple.new(render)
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:facet_field) do
|
15
|
+
instance_double(
|
16
|
+
Blacklight::FacetFieldPresenter,
|
17
|
+
paginator: paginator,
|
18
|
+
key: 'field',
|
19
|
+
label: 'Field',
|
20
|
+
active?: false,
|
21
|
+
collapsed?: false,
|
22
|
+
modal_path: nil,
|
23
|
+
html_id: 'facet-field'
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
let(:paginator) do
|
28
|
+
instance_double(Blacklight::FacetPaginator, items: [
|
29
|
+
double(label: 'x', hits: 10),
|
30
|
+
double(label: 'y', hits: 33)
|
31
|
+
])
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'renders a collapsible card' do
|
35
|
+
expect(rendered).to have_selector '.card'
|
36
|
+
expect(rendered).to have_button 'Field'
|
37
|
+
expect(rendered).to have_selector 'button[data-target="#facet-field"]'
|
38
|
+
expect(rendered).to have_selector '#facet-field.collapse.show'
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'renders the facet items' do
|
42
|
+
expect(rendered).to have_selector 'ul.facet-values'
|
43
|
+
expect(rendered).to have_selector 'li', count: 2
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'with an active facet' do
|
47
|
+
let(:facet_field) do
|
48
|
+
instance_double(
|
49
|
+
Blacklight::FacetFieldPresenter,
|
50
|
+
paginator: paginator,
|
51
|
+
key: 'field',
|
52
|
+
label: 'Field',
|
53
|
+
active?: true,
|
54
|
+
collapsed?: false,
|
55
|
+
modal_path: nil,
|
56
|
+
html_id: 'facet-field'
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'adds the facet-limit-active class' do
|
61
|
+
expect(rendered).to have_selector 'div.facet-limit-active'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'with a collapsed facet' do
|
66
|
+
let(:facet_field) do
|
67
|
+
instance_double(
|
68
|
+
Blacklight::FacetFieldPresenter,
|
69
|
+
paginator: paginator,
|
70
|
+
key: 'field',
|
71
|
+
label: 'Field',
|
72
|
+
active?: false,
|
73
|
+
collapsed?: true,
|
74
|
+
modal_path: nil,
|
75
|
+
html_id: 'facet-field'
|
76
|
+
)
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'renders a collapsed facet' do
|
80
|
+
expect(rendered).to have_selector '.facet-content.collapse'
|
81
|
+
expect(rendered).not_to have_selector '.facet-content.collapse.show'
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'renders the toggle button in the collapsed state' do
|
85
|
+
expect(rendered).to have_selector '.btn.collapsed'
|
86
|
+
expect(rendered).to have_selector '.btn[aria-expanded="false"]'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'with a modal_path' do
|
91
|
+
let(:facet_field) do
|
92
|
+
instance_double(
|
93
|
+
Blacklight::FacetFieldPresenter,
|
94
|
+
paginator: paginator,
|
95
|
+
key: 'field',
|
96
|
+
label: 'Field',
|
97
|
+
active?: false,
|
98
|
+
collapsed?: false,
|
99
|
+
modal_path: '/catalog/facet/modal',
|
100
|
+
html_id: 'facet-field'
|
101
|
+
)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'renders a link to the modal' do
|
105
|
+
expect(rendered).to have_link 'more Field', href: '/catalog/facet/modal'
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
RSpec.describe Blacklight::FacetItemComponent, type: :component do
|
6
|
+
subject(:render) do
|
7
|
+
render_inline(described_class.new(facet_item: facet_item))
|
8
|
+
end
|
9
|
+
|
10
|
+
let(:rendered) do
|
11
|
+
Capybara::Node::Simple.new(render)
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:facet_item) do
|
15
|
+
instance_double(
|
16
|
+
Blacklight::FacetItemPresenter,
|
17
|
+
facet_config: Blacklight::Configuration::FacetField.new,
|
18
|
+
label: 'x',
|
19
|
+
hits: 10,
|
20
|
+
href: '/catalog?f=x',
|
21
|
+
selected?: false
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'links to the facet and shows the number of hits' do
|
26
|
+
expect(rendered).to have_selector 'li'
|
27
|
+
expect(rendered).to have_link 'x', href: '/catalog?f=x'
|
28
|
+
expect(rendered).to have_selector '.facet-count', text: '10'
|
29
|
+
end
|
30
|
+
|
31
|
+
context 'with a selected facet' do
|
32
|
+
let(:facet_item) do
|
33
|
+
instance_double(
|
34
|
+
Blacklight::FacetItemPresenter,
|
35
|
+
facet_config: Blacklight::Configuration::FacetField.new,
|
36
|
+
label: 'x',
|
37
|
+
hits: 10,
|
38
|
+
href: '/catalog',
|
39
|
+
selected?: true
|
40
|
+
)
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'links to the facet and shows the number of hits' do
|
44
|
+
expect(rendered).to have_selector 'li'
|
45
|
+
expect(rendered).to have_selector '.selected', text: 'x'
|
46
|
+
expect(rendered).to have_link '[remove]', href: '/catalog'
|
47
|
+
expect(rendered).to have_selector '.selected.facet-count', text: '10'
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -88,7 +88,7 @@ RSpec.describe "Facets" do
|
|
88
88
|
it 'has default more link with sr-only text' do
|
89
89
|
visit root_path
|
90
90
|
within '#facet-language_ssim' do
|
91
|
-
expect(page).to have_css '
|
91
|
+
expect(page).to have_css 'div.more_facets', text: 'more Language'
|
92
92
|
end
|
93
93
|
end
|
94
94
|
end
|
@@ -214,7 +214,11 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
214
214
|
|
215
215
|
context "when one of the facet items is rendered as nil" do
|
216
216
|
# An app may override render_facet_item to filter out some undesired facet items by returning nil.
|
217
|
-
before
|
217
|
+
before do
|
218
|
+
allow(helper.method(:render_facet_item)).to receive(:owner).and_return(self.class)
|
219
|
+
# allow_any_instance_of(Blacklight::FacetItemComponent).to receive(:overridden_helper_methods?).and_return(true)
|
220
|
+
allow(helper).to receive(:render_facet_item).and_return('<a class="facet-select">Book</a>'.html_safe, nil)
|
221
|
+
end
|
218
222
|
|
219
223
|
it "draws a list of elements" do
|
220
224
|
expect(subject).to have_selector 'li', count: 1
|
@@ -246,36 +250,44 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
246
250
|
end
|
247
251
|
|
248
252
|
describe "facet_field_in_params?" do
|
253
|
+
let(:search_state) { double }
|
254
|
+
|
255
|
+
before do
|
256
|
+
allow(helper).to receive_messages(search_state: search_state)
|
257
|
+
end
|
258
|
+
|
249
259
|
it "checks if any value is selected for a given facet" do
|
250
|
-
allow(
|
260
|
+
allow(search_state).to receive(:has_facet?).with(having_attributes(key: 'some-facet')).and_return(true)
|
251
261
|
expect(helper.facet_field_in_params?("some-facet")).to eq true
|
252
262
|
end
|
253
263
|
|
254
264
|
it "is false if no value for facet is selected" do
|
255
|
-
allow(
|
265
|
+
allow(search_state).to receive(:has_facet?).with(having_attributes(key: 'some-facet')).and_return(false)
|
256
266
|
expect(helper.facet_field_in_params?("some-facet")).to eq false
|
257
267
|
end
|
258
268
|
end
|
259
269
|
|
260
270
|
describe "facet_in_params?" do
|
271
|
+
let(:search_state) { double }
|
272
|
+
|
273
|
+
before do
|
274
|
+
allow(helper).to receive_messages(search_state: search_state)
|
275
|
+
allow(search_state).to receive(:has_facet?).with(having_attributes(key: 'some-facet'), value: 'x').and_return(true)
|
276
|
+
allow(search_state).to receive(:has_facet?).with(having_attributes(key: 'some-facet'), value: 'y').and_return(false)
|
277
|
+
end
|
278
|
+
|
261
279
|
it "checks if a particular value is set in the facet params" do
|
262
|
-
allow(helper).to receive_messages(facet_params: ["x"])
|
263
280
|
expect(helper.facet_in_params?("some-facet", "x")).to eq true
|
264
281
|
expect(helper.facet_in_params?("some-facet", "y")).to eq false
|
265
282
|
end
|
266
|
-
|
267
|
-
it "is false if no value for facet is selected" do
|
268
|
-
allow(helper).to receive_messages(facet_params: nil)
|
269
|
-
expect(helper.facet_in_params?("some-facet", "x")).to eq false
|
270
|
-
end
|
271
283
|
end
|
272
284
|
|
273
285
|
describe "render_facet_value" do
|
274
286
|
let(:item) { double(value: 'A', hits: 10) }
|
275
|
-
let(:search_state) { double(add_facet_params_and_redirect: { controller: 'catalog' }) }
|
287
|
+
let(:search_state) { double(has_facet?: false, add_facet_params_and_redirect: { controller: 'catalog' }) }
|
276
288
|
|
277
289
|
before do
|
278
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(
|
290
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: nil))
|
279
291
|
allow(helper).to receive(:facet_display_value).and_return('Z')
|
280
292
|
allow(helper).to receive(:search_state).and_return(search_state)
|
281
293
|
allow(helper).to receive(:search_action_path) do |*args|
|
@@ -296,7 +308,7 @@ RSpec.describe Blacklight::FacetsHelperBehavior do
|
|
296
308
|
let(:expected_html) { '<span class="facet-label"><a class="facet-select" href="/blabla">Z</a></span><span class="facet-count">10</span>' }
|
297
309
|
|
298
310
|
it "uses that method" do
|
299
|
-
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(
|
311
|
+
allow(helper).to receive(:facet_configuration_for_field).with('simple_field').and_return(Blacklight::Configuration::FacetField.new(key: 'simple_field', query: nil, date: nil, helper_method: nil, single: false, url_method: :test_method))
|
300
312
|
allow(helper).to receive(:test_method).with('simple_field', item).and_return('/blabla')
|
301
313
|
result = helper.render_facet_value('simple_field', item)
|
302
314
|
expect(result).to be_equivalent_to(expected_html).respecting_element_order
|
@@ -13,6 +13,9 @@ RSpec.describe Blacklight::RenderConstraintsHelperBehavior do
|
|
13
13
|
allow(helper).to receive(:search_action_path) do |*args|
|
14
14
|
search_catalog_path *args
|
15
15
|
end
|
16
|
+
|
17
|
+
allow(helper).to receive(:blacklight_config).and_return(config)
|
18
|
+
allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
|
16
19
|
end
|
17
20
|
|
18
21
|
describe '#render_constraints_query' do
|
@@ -22,24 +25,7 @@ RSpec.describe Blacklight::RenderConstraintsHelperBehavior do
|
|
22
25
|
let(:params) { ActionController::Parameters.new(q: 'foobar', f: { type: 'journal' }) }
|
23
26
|
|
24
27
|
it "has a link relative to the current url" do
|
25
|
-
expect(subject).to
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'with an ordinary hash' do
|
29
|
-
let(:params) { { q: 'foobar', f: { type: 'journal' } } }
|
30
|
-
|
31
|
-
it "has a link relative to the current url" do
|
32
|
-
expect(subject).to have_selector "a[href='/?f%5Btype%5D=journal']"
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
context "with a route_set" do
|
37
|
-
let(:params) { ActionController::Parameters.new(q: 'foobar', f: { type: 'journal' }, route_set: my_engine) }
|
38
|
-
|
39
|
-
it "accepts an optional route set" do
|
40
|
-
expect(my_engine).to receive(:url_for).and_return('/?f%5Btype%5D=journal')
|
41
|
-
expect(subject).to have_selector "a[href='/?f%5Btype%5D=journal']"
|
42
|
-
end
|
28
|
+
expect(subject).to have_link 'Remove constraint', href: '/catalog?f%5Btype%5D=journal'
|
43
29
|
end
|
44
30
|
end
|
45
31
|
|
@@ -73,11 +59,6 @@ RSpec.describe Blacklight::RenderConstraintsHelperBehavior do
|
|
73
59
|
|
74
60
|
let(:params) { ActionController::Parameters.new f: { 'type' => [''] } }
|
75
61
|
|
76
|
-
before do
|
77
|
-
allow(helper).to receive(:blacklight_config).and_return(config)
|
78
|
-
allow(controller).to receive(:search_state_class).and_return(Blacklight::SearchState)
|
79
|
-
end
|
80
|
-
|
81
62
|
it "renders nothing for empty facet limit param" do
|
82
63
|
expect(subject).to be_blank
|
83
64
|
end
|