blacklight 7.10.0 → 7.11.1

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.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +56 -7
  3. data/.rubocop_todo.yml +113 -98
  4. data/.travis.yml +0 -2
  5. data/Gemfile +0 -7
  6. data/README.md +1 -0
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/blacklight/blacklight.js +1 -2
  9. data/app/components/blacklight/document/bookmark_component.html.erb +16 -0
  10. data/app/components/blacklight/document/bookmark_component.rb +19 -0
  11. data/app/components/blacklight/document/citation_component.html.erb +9 -0
  12. data/app/components/blacklight/document/citation_component.rb +24 -0
  13. data/app/components/blacklight/document/more_like_this_component.html.erb +12 -0
  14. data/app/components/blacklight/document/more_like_this_component.rb +21 -0
  15. data/app/components/blacklight/document_component.html.erb +29 -0
  16. data/app/components/blacklight/document_component.rb +121 -0
  17. data/app/components/blacklight/document_metadata_component.html.erb +5 -0
  18. data/app/components/blacklight/document_metadata_component.rb +21 -0
  19. data/app/components/blacklight/facet_item_component.rb +6 -6
  20. data/app/components/blacklight/metadata_field_component.html.erb +8 -0
  21. data/app/components/blacklight/metadata_field_component.rb +31 -0
  22. data/app/components/blacklight/metadata_field_layout_component.html.erb +2 -0
  23. data/app/components/blacklight/metadata_field_layout_component.rb +16 -0
  24. data/app/components/blacklight/response/facet_group_component.html.erb +25 -0
  25. data/app/components/blacklight/response/facet_group_component.rb +19 -0
  26. data/app/components/blacklight/response/pagination_component.html.erb +3 -0
  27. data/app/components/blacklight/response/pagination_component.rb +17 -0
  28. data/app/components/blacklight/response/sort_component.html.erb +6 -0
  29. data/app/components/blacklight/response/sort_component.rb +16 -0
  30. data/app/components/blacklight/response/spellcheck_component.html.erb +7 -0
  31. data/app/components/blacklight/response/spellcheck_component.rb +20 -0
  32. data/app/components/blacklight/search_bar_component.html.erb +29 -0
  33. data/app/components/blacklight/search_bar_component.rb +45 -0
  34. data/app/components/blacklight/search_context_component.html.erb +10 -0
  35. data/app/components/blacklight/search_context_component.rb +30 -0
  36. data/app/components/blacklight/system/dropdown_component.html.erb +12 -0
  37. data/app/components/blacklight/system/dropdown_component.rb +42 -0
  38. data/app/components/blacklight/system/modal_component.html.erb +25 -0
  39. data/app/components/blacklight/system/modal_component.rb +9 -0
  40. data/app/controllers/concerns/blacklight/catalog.rb +5 -4
  41. data/app/controllers/concerns/blacklight/default_component_configuration.rb +2 -2
  42. data/app/controllers/concerns/blacklight/searchable.rb +11 -0
  43. data/app/helpers/blacklight/blacklight_helper_behavior.rb +14 -3
  44. data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -0
  45. data/app/helpers/blacklight/component_helper_behavior.rb +2 -2
  46. data/app/helpers/blacklight/configuration_helper_behavior.rb +6 -0
  47. data/app/helpers/blacklight/facets_helper_behavior.rb +1 -1
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +2 -2
  49. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +7 -10
  50. data/app/helpers/blacklight/url_helper_behavior.rb +3 -3
  51. data/app/javascript/blacklight/search_context.js +0 -1
  52. data/app/models/blacklight/icon.rb +1 -0
  53. data/app/models/concerns/blacklight/document.rb +1 -0
  54. data/app/models/record_mailer.rb +1 -1
  55. data/app/presenters/blacklight/document_presenter.rb +7 -1
  56. data/app/presenters/blacklight/field_presenter.rb +1 -0
  57. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  58. data/app/services/blacklight/field_retriever.rb +1 -0
  59. data/app/services/blacklight/search_service.rb +1 -0
  60. data/app/views/catalog/_bookmark_control.html.erb +1 -36
  61. data/app/views/catalog/_citation.html.erb +4 -25
  62. data/app/views/catalog/_did_you_mean.html.erb +1 -5
  63. data/app/views/catalog/_document.atom.builder +3 -3
  64. data/app/views/catalog/_document.html.erb +5 -5
  65. data/app/views/catalog/_facet_group.html.erb +5 -19
  66. data/app/views/catalog/_index.html.erb +1 -10
  67. data/app/views/catalog/_paginate_compact.html.erb +6 -6
  68. data/app/views/catalog/_per_page_widget.html.erb +9 -12
  69. data/app/views/catalog/_previous_next_doc.html.erb +1 -12
  70. data/app/views/catalog/_results_pagination.html.erb +1 -3
  71. data/app/views/catalog/_search_form.html.erb +6 -27
  72. data/app/views/catalog/_show.html.erb +6 -8
  73. data/app/views/catalog/_show_main_content.html.erb +19 -13
  74. data/app/views/catalog/_show_sidebar.html.erb +1 -11
  75. data/app/views/catalog/_sort_widget.html.erb +5 -12
  76. data/app/views/catalog/email.html.erb +7 -7
  77. data/app/views/catalog/email_success.html.erb +5 -12
  78. data/app/views/catalog/facet.html.erb +14 -17
  79. data/app/views/catalog/index.atom.builder +0 -1
  80. data/app/views/catalog/sms.html.erb +7 -7
  81. data/app/views/catalog/sms_success.html.erb +5 -12
  82. data/blacklight.gemspec +3 -2
  83. data/config/i18n-tasks.yml +3 -0
  84. data/config/locales/blacklight.ar.yml +2 -0
  85. data/config/locales/blacklight.de.yml +2 -0
  86. data/config/locales/blacklight.en.yml +2 -0
  87. data/config/locales/blacklight.es.yml +4 -2
  88. data/config/locales/blacklight.fr.yml +2 -0
  89. data/config/locales/blacklight.hu.yml +2 -0
  90. data/config/locales/blacklight.it.yml +2 -0
  91. data/config/locales/blacklight.nl.yml +2 -0
  92. data/config/locales/blacklight.pt-BR.yml +2 -0
  93. data/config/locales/blacklight.sq.yml +2 -0
  94. data/config/locales/blacklight.zh.yml +2 -0
  95. data/lib/blacklight.rb +10 -0
  96. data/lib/blacklight/configuration.rb +8 -3
  97. data/lib/blacklight/configuration/fields.rb +5 -7
  98. data/lib/blacklight/engine.rb +1 -1
  99. data/lib/blacklight/nested_open_struct_with_hash_access.rb +1 -0
  100. data/lib/blacklight/search_state.rb +21 -7
  101. data/lib/blacklight/solr/response.rb +1 -0
  102. data/lib/blacklight/solr/response/facets.rb +9 -8
  103. data/lib/generators/blacklight/models_generator.rb +2 -0
  104. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -0
  105. data/lib/railties/blacklight.rake +18 -13
  106. data/package.json +1 -1
  107. data/spec/components/blacklight/constraint_layout_component_spec.rb +1 -0
  108. data/spec/components/blacklight/document_component_spec.rb +129 -0
  109. data/spec/components/blacklight/document_metadata_component_spec.rb +0 -0
  110. data/spec/components/blacklight/metadata_field_component_spec.rb +41 -0
  111. data/spec/controllers/blacklight/search_fields_spec.rb +2 -2
  112. data/spec/controllers/catalog_controller_spec.rb +20 -0
  113. data/spec/features/search_context_spec.rb +12 -2
  114. data/spec/features/search_filters_spec.rb +4 -0
  115. data/spec/features/search_results_spec.rb +1 -0
  116. data/spec/features/sitelinks_search_box.rb +1 -0
  117. data/spec/helpers/blacklight/configuration_helper_behavior_spec.rb +3 -0
  118. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +1 -0
  119. data/spec/helpers/blacklight/search_history_constraints_helper_behavior_spec.rb +2 -0
  120. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +1 -1
  121. data/spec/helpers/blacklight_helper_spec.rb +14 -1
  122. data/spec/helpers/catalog_helper_spec.rb +1 -4
  123. data/spec/lib/blacklight/search_state_spec.rb +32 -0
  124. data/spec/models/blacklight/configuration_spec.rb +5 -0
  125. data/spec/models/blacklight/document/cache_key_spec.rb +1 -0
  126. data/spec/models/blacklight/document/email_spec.rb +2 -0
  127. data/spec/models/blacklight/document/sms_spec.rb +2 -0
  128. data/spec/models/blacklight/facet_paginator_spec.rb +3 -0
  129. data/spec/models/blacklight/icon_spec.rb +6 -0
  130. data/spec/models/blacklight/solr/document_spec.rb +10 -0
  131. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  132. data/spec/models/blacklight/solr/response/group_response_spec.rb +2 -0
  133. data/spec/models/blacklight/solr/search_builder_spec.rb +10 -0
  134. data/spec/models/record_mailer_spec.rb +9 -0
  135. data/spec/models/search_spec.rb +1 -0
  136. data/spec/presenters/blacklight/show_presenter_spec.rb +8 -0
  137. data/spec/routing/catalog_routing_spec.rb +4 -0
  138. data/spec/services/blacklight/search_service_spec.rb +7 -0
  139. data/spec/spec_helper.rb +1 -1
  140. data/spec/views/catalog/_document.html.erb_spec.rb +13 -11
  141. data/spec/views/catalog/_facet_group.html.erb_spec.rb +1 -0
  142. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -0
  143. data/spec/views/catalog/_previous_next_doc.html.erb_spec.rb +4 -0
  144. data/spec/views/catalog/index.atom.builder_spec.rb +40 -3
  145. data/spec/views/catalog/show.html.erb_spec.rb +14 -0
  146. data/tasks/blacklight.rake +7 -7
  147. metadata +56 -6
@@ -194,7 +194,7 @@ RSpec.describe Blacklight::Solr::Response::Facets, api: true do
194
194
  }
195
195
  end
196
196
 
197
- it"converts the query facets into a double RSolr FacetField" do
197
+ it "converts the query facets into a double RSolr FacetField" do
198
198
  field = subject.aggregations['my_query_facet_field']
199
199
 
200
200
  expect(field).to be_a_kind_of Blacklight::Solr::Response::Facets::FacetField
@@ -19,6 +19,7 @@ RSpec.describe Blacklight::Solr::Response::GroupResponse, api: true do
19
19
  expect(group).to be_a Blacklight::Solr::Response::Group
20
20
  end
21
21
  end
22
+
22
23
  it "includes a list of SolrDocuments" do
23
24
  group.groups.each do |group|
24
25
  group.docs.each do |doc|
@@ -72,6 +73,7 @@ RSpec.describe Blacklight::Solr::Response::GroupResponse, api: true do
72
73
  ).and_return('cool group')
73
74
  expect(group.entry_name(count: 2)).to eq 'cool groups'
74
75
  end
76
+
75
77
  it "falls back to default group key" do
76
78
  expect(group.entry_name(count: 2)).to eq 'grouped results'
77
79
  end
@@ -54,6 +54,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
54
54
  expect(subject[:qf]).to eq "fieldOne^2.3 fieldTwo fieldThree^0.4"
55
55
  expect(subject[:spellcheck]).to eq 'false'
56
56
  end
57
+
57
58
  it "merges empty string parameters from search_field definition" do
58
59
  expect(subject[:pf]).to eq ""
59
60
  end
@@ -156,9 +157,11 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
156
157
  expect(subject[:q]).to be_nil
157
158
  expect(subject["spellcheck.q"]).to be_nil
158
159
  end
160
+
159
161
  it 'has default rows' do
160
162
  expect(subject[:rows]).to eq 10
161
163
  end
164
+
162
165
  it 'has default facet fields' do
163
166
  # remove local params from the facet.field
164
167
  expect(subject[:"facet.field"].map { |x| x.gsub(/\{![^}]+\}/, '') }).to match_array %w[format subject_ssim pub_date_ssim language_ssim lc_1letter_ssim subject_geo_ssim subject_era_ssim]
@@ -167,6 +170,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
167
170
  it "does not have a default qt" do
168
171
  expect(subject[:qt]).to be_nil
169
172
  end
173
+
170
174
  it "has no fq" do
171
175
  expect(subject[:phrase_filters]).to be_blank
172
176
  expect(subject[:fq]).to be_blank
@@ -266,11 +270,13 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
266
270
  it "includes proper 'q', possibly with LocalParams" do
267
271
  expect(subject[:q]).to match(/(\{[^}]+\})?wome/)
268
272
  end
273
+
269
274
  it "includes proper 'q' when LocalParams are used" do
270
275
  if /\{[^}]+\}/.match?(subject[:q])
271
276
  expect(subject[:q]).to match(/\{[^}]+\}wome/)
272
277
  end
273
278
  end
279
+
274
280
  it "includes spellcheck.q, without LocalParams" do
275
281
  expect(subject["spellcheck.q"]).to eq "wome"
276
282
  end
@@ -278,6 +284,7 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
278
284
  it "includes spellcheck.dictionary from field def solr_parameters" do
279
285
  expect(subject[:"spellcheck.dictionary"]).to eq "subject"
280
286
  end
287
+
281
288
  it "adds on :solr_local_parameters using Solr LocalParams style" do
282
289
  # q == "{!pf=$subject_pf $qf=subject_qf} wome", make sure
283
290
  # the LocalParams are really there
@@ -598,12 +605,15 @@ RSpec.describe Blacklight::Solr::SearchBuilderBehavior, api: true do
598
605
  it 'sets rows to 0' do
599
606
  expect(solr_parameters[:rows]).to eq 0
600
607
  end
608
+
601
609
  it 'sets facets requested to facet_field argument' do
602
610
  expect(solr_parameters["facet.field".to_sym]).to eq facet_field
603
611
  end
612
+
604
613
  it 'defaults offset to 0' do
605
614
  expect(solr_parameters[:"f.#{facet_field}.facet.offset"]).to eq 0
606
615
  end
616
+
607
617
  context 'when offset is manually set' do
608
618
  let(:user_params) { { page_key => 2 } }
609
619
 
@@ -18,20 +18,25 @@ RSpec.describe RecordMailer do
18
18
  it "receives the TO paramater and send the email to that address" do
19
19
  expect(@email.to).to include 'test@test.com'
20
20
  end
21
+
21
22
  it "starts the subject w/ Item Record:" do
22
23
  expect(@email.subject).to match /^Item Record:/
23
24
  end
25
+
24
26
  it "puts the title of the item in the subject" do
25
27
  expect(@email.subject).to match /The horn/
26
28
  end
29
+
27
30
  it "has the correct from address (w/o the port number)" do
28
31
  expect(@email.from).to include "no-reply@projectblacklight.org"
29
32
  end
33
+
30
34
  it "prints out the correct body" do
31
35
  expect(@email.body).to match /Title: The horn/
32
36
  expect(@email.body).to match /Author: Janetzky, Kurt/
33
37
  expect(@email.body).to match /projectblacklight.org/
34
38
  end
39
+
35
40
  it "uses https URLs when protocol is set" do
36
41
  details = { to: 'test@test.com', message: "This is my message" }
37
42
  @https_email = described_class.email_record(@documents, details, host: 'projectblacklight.org', protocol: 'https')
@@ -48,17 +53,21 @@ RSpec.describe RecordMailer do
48
53
  it "creates the correct TO address for the SMS email" do
49
54
  expect(@sms.to).to include '5555555555@txt.att.net'
50
55
  end
56
+
51
57
  it "does not have a subject" do
52
58
  expect(@sms.subject).to be_blank
53
59
  end
60
+
54
61
  it "has the correct from address (w/o the port number)" do
55
62
  expect(@sms.from).to include "no-reply@projectblacklight.org"
56
63
  end
64
+
57
65
  it "prints out the correct body" do
58
66
  expect(@sms.body).to match /The horn/
59
67
  expect(@sms.body).to match /by Janetzky, Kurt/
60
68
  expect(@sms.body).to match /projectblacklight.org:3000/
61
69
  end
70
+
62
71
  it "uses https URL when protocol is set" do
63
72
  details = { to: '5555555555@txt.att.net' }
64
73
  @https_sms = described_class.sms_record(@documents, details, host: 'projectblacklight.org', protocol: 'https')
@@ -23,6 +23,7 @@ RSpec.describe Search do
23
23
 
24
24
  expect(@search).to be_saved
25
25
  end
26
+
26
27
  it "is false when user_id is NULL or less than 1" do
27
28
  @search = described_class.create
28
29
  expect(@search).not_to be_saved
@@ -143,6 +143,14 @@ RSpec.describe Blacklight::ShowPresenter, api: true do
143
143
  config.show.title_field = Blacklight::Configuration::Field.new(field: 'x', values: ->(*_) { 'hardcoded' })
144
144
  expect(subject.heading).to eq 'hardcoded'
145
145
  end
146
+
147
+ context "when empty document" do
148
+ let(:document) { SolrDocument.new({}) }
149
+
150
+ it "returns an empty string as the heading" do
151
+ expect(subject.heading).to eq("")
152
+ end
153
+ end
146
154
  end
147
155
 
148
156
  describe "#html_title" do
@@ -7,15 +7,19 @@ RSpec.describe "Routing" do
7
7
  it "has a path for showing the email form" do
8
8
  expect(get: "/catalog/email").to route_to(controller: 'catalog', action: 'email')
9
9
  end
10
+
10
11
  it "has a path for sending the email" do
11
12
  expect(post: "/catalog/email").to route_to(controller: 'catalog', action: 'email')
12
13
  end
14
+
13
15
  it "maps GET {:controller => 'catalog', :action => 'sms'} to /catalog/sms" do
14
16
  expect(get: "/catalog/sms").to route_to(controller: 'catalog', action: 'sms')
15
17
  end
18
+
16
19
  it "maps POST {:controller => 'catalog', :action => 'sms'} to /catalog/sms" do
17
20
  expect(post: "/catalog/sms").to route_to(controller: 'catalog', action: 'sms')
18
21
  end
22
+
19
23
  it "maps { :controller => 'catalog', :action => 'show', :id => 666 } to /catalog/666" do
20
24
  expect(get: "/catalog/666").to route_to(controller: 'catalog', action: 'show', id: "666")
21
25
  end
@@ -179,6 +179,7 @@ RSpec.describe Blacklight::SearchService, api: true do
179
179
  it 'has more than one facet' do
180
180
  expect(@facets).to have_at_least(1).facet
181
181
  end
182
+
182
183
  it 'has all facets specified in initializer' do
183
184
  expect(@facets.keys).to include *blacklight_config.facet_fields.keys
184
185
  expect(@facets.none? { |_k, v| v.nil? }).to eq true
@@ -189,6 +190,7 @@ RSpec.describe Blacklight::SearchService, api: true do
189
190
  expect(facet.items).to have_at_least(1).hit
190
191
  end
191
192
  end
193
+
192
194
  it 'has multiple values for at least one facet' do
193
195
  has_mult_values = false
194
196
  @facets.each do |_key, facet|
@@ -199,6 +201,7 @@ RSpec.describe Blacklight::SearchService, api: true do
199
201
  end
200
202
  expect(has_mult_values).to eq true
201
203
  end
204
+
202
205
  it 'has all value counts > 0' do
203
206
  @facets.each do |_key, facet|
204
207
  facet.items.each do |facet_vals|
@@ -217,6 +220,7 @@ RSpec.describe Blacklight::SearchService, api: true do
217
220
  (solr_response,) = service.search_results
218
221
  expect(solr_response.params[:start].to_i).to eq 0
219
222
  end
223
+
220
224
  it 'has number of results (per page) set in initializer, by default' do
221
225
  (solr_response, document_list) = service.search_results
222
226
  expect(solr_response.docs).to have(blacklight_config[:default_solr_params][:rows]).items
@@ -322,12 +326,15 @@ RSpec.describe Blacklight::SearchService, api: true do
322
326
  it "has a non-nil result for a known id" do
323
327
  expect(@document).not_to be_nil
324
328
  end
329
+
325
330
  it "has a single document in the response for a known id" do
326
331
  expect(@response2.docs.size).to eq 1
327
332
  end
333
+
328
334
  it 'has the expected value in the id field' do
329
335
  expect(@document.id).to eq doc_id
330
336
  end
337
+
331
338
  it 'has non-nil values for required fields set in initializer' do
332
339
  expect(@document.fetch(blacklight_config.view_config(:show).display_type_field)).not_to be_nil
333
340
  end
@@ -31,7 +31,7 @@ Capybara.disable_animation = true
31
31
  # in spec/support/ and its subdirectories.
32
32
  # Blacklight, again, make sure we're looking in the right place for em.
33
33
  # Relative to HERE, NOT to Rails.root, which is off somewhere else.
34
- Dir[Pathname.new(File.expand_path('support/**/*.rb', __dir__))].each { |f| require f }
34
+ Dir[Pathname.new(File.expand_path('support/**/*.rb', __dir__))].sort.each { |f| require f }
35
35
 
36
36
  RSpec.configure do |config|
37
37
  config.disable_monkey_patching!
@@ -7,6 +7,7 @@ RSpec.describe "catalog/_document" do
7
7
  before do
8
8
  allow(view).to receive(:render_grouped_response?).and_return(false)
9
9
  allow(view).to receive(:blacklight_config).and_return(blacklight_config)
10
+ assign(:response, instance_double(Blacklight::Solr::Response, start: 20))
10
11
  end
11
12
 
12
13
  it "renders the header, thumbnail and index by default" do
@@ -14,11 +15,10 @@ RSpec.describe "catalog/_document" do
14
15
  stub_template "catalog/_thumbnail.html.erb" => "thumbnail_default"
15
16
  stub_template "catalog/_index_default.html.erb" => "index_default"
16
17
  render partial: "catalog/document", locals: { document: document, document_counter: 1 }
18
+ expect(rendered).to have_selector 'article.document[@data-document-counter="22"]'
17
19
  expect(rendered).to match /document_header/
18
20
  expect(rendered).to match /thumbnail_default/
19
21
  expect(rendered).to match /index_default/
20
- expect(rendered).to have_selector('.document[@itemscope]')
21
- expect(rendered).to have_selector('.document[@itemtype="http://schema.org/Thing"]')
22
22
  end
23
23
 
24
24
  it "uses the index.partials parameter to determine the partials to render" do
@@ -32,15 +32,17 @@ RSpec.describe "catalog/_document" do
32
32
  expect(rendered).to match /c_partial/
33
33
  end
34
34
 
35
- it 'has a css class with the document position' do
36
- allow(view).to receive(:render_document_partials)
37
- render partial: 'catalog/document', locals: { document: document, document_counter: 5 }
38
- expect(rendered).to have_selector '.document-position-5'
39
- end
35
+ it 'provides the rendered partials to an explicitly configured component but does not render them by default' do
36
+ blacklight_config.index.partials = %w[a]
37
+ stub_template "catalog/_a_default.html.erb" => "partial"
38
+ blacklight_config.index.document_component = Blacklight::DocumentComponent
39
+ allow(view).to receive(:search_session).and_return({})
40
+ allow(view).to receive(:current_search_session).and_return(nil)
41
+ allow(view.main_app).to receive(:track_test_path).and_return('/track')
42
+
43
+ render partial: "catalog/document", locals: { document: document, document_counter: 1 }
40
44
 
41
- it 'has a data attribute with the document position' do
42
- allow(view).to receive(:render_document_partials)
43
- render partial: 'catalog/document', locals: { document: document, document_counter: 5 }
44
- expect(rendered).to have_selector '.document[@data-document-counter="5"]'
45
+ expect(rendered).to have_selector 'article.document header', text: '22. xyz'
46
+ expect(rendered).not_to match(/partial/)
45
47
  end
46
48
  end
@@ -70,6 +70,7 @@ RSpec.describe "catalog/_facet_group" do
70
70
  render
71
71
  expect(rendered).to have_selector('.facet-field-heading')
72
72
  end
73
+
73
74
  it "lists values" do
74
75
  render
75
76
  # The .facet-content class is used by blacklight_range_limit js, and
@@ -33,6 +33,7 @@ RSpec.describe 'catalog/_facet_index_navigation.html.erb', type: :view do
33
33
  render
34
34
  expect(rendered).to have_selector '.active', text: '5'
35
35
  end
36
+
36
37
  it 'enables the clear facets button' do
37
38
  render
38
39
  expect(rendered).to have_link 'All'
@@ -1,6 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RSpec.describe "catalog/_previous_next_doc.html.erb" do
4
+ before do
5
+ allow(view).to receive(:search_session).and_return({})
6
+ end
7
+
4
8
  it "without next or previous does not render content" do
5
9
  assign(:search_context, {})
6
10
  render
@@ -12,20 +12,23 @@ RSpec.describe "catalog/index" do
12
12
  end
13
13
  end
14
14
 
15
+ let(:blacklight_config) { CatalogController.blacklight_config }
16
+
15
17
  before do
16
18
  @response = Blacklight::Solr::Response.new({ response: { numFound: 30 } }, start: 10, rows: 10)
17
19
  allow(@response).to receive(:documents).and_return(document_list)
18
20
  params['content_format'] = 'some_format'
19
21
  allow(view).to receive(:action_name).and_return('index')
20
- allow(view).to receive(:blacklight_config).and_return(CatalogController.blacklight_config)
22
+ allow(view).to receive(:blacklight_config).and_return(blacklight_config)
21
23
  allow(view).to receive(:search_field_options_for_select).and_return([])
22
- render template: 'catalog/index', formats: [:atom]
23
24
  end
24
25
 
25
26
  # We need to use rexml to test certain things that have_tag wont' test
26
27
  let(:response_xml) { REXML::Document.new(rendered) }
27
28
 
28
29
  it "has contextual information" do
30
+ render template: 'catalog/index', formats: [:atom]
31
+
29
32
  expect(rendered).to have_selector("link[rel=self]")
30
33
  expect(rendered).to have_selector("link[rel=next]")
31
34
  expect(rendered).to have_selector("link[rel=previous]")
@@ -36,6 +39,8 @@ RSpec.describe "catalog/index" do
36
39
  end
37
40
 
38
41
  it "gets paging data correctly from response" do
42
+ render template: 'catalog/index', formats: [:atom]
43
+
39
44
  # Can't use have_tag for namespaced elements, sorry.
40
45
  expect(response_xml.elements["/feed/opensearch:totalResults"].text).to eq "30"
41
46
  expect(response_xml.elements["/feed/opensearch:startIndex"].text).to eq "10"
@@ -43,6 +48,8 @@ RSpec.describe "catalog/index" do
43
48
  end
44
49
 
45
50
  it "includes an opensearch Query role=request" do
51
+ render template: 'catalog/index', formats: [:atom]
52
+
46
53
  expect(response_xml.elements.to_a("/feed/opensearch:itemsPerPage")).to have(1).item
47
54
  query_el = response_xml.elements["/feed/opensearch:Query"]
48
55
  expect(query_el).not_to be_nil
@@ -52,30 +59,55 @@ RSpec.describe "catalog/index" do
52
59
  end
53
60
 
54
61
  it "has ten entries" do
62
+ render template: 'catalog/index', formats: [:atom]
63
+
55
64
  expect(rendered).to have_selector("entry", count: 10)
56
65
  end
57
66
 
58
67
  describe "entries" do
59
68
  it "has a title" do
69
+ render template: 'catalog/index', formats: [:atom]
60
70
  expect(rendered).to have_selector("entry > title")
61
71
  end
72
+
62
73
  it "has an updated" do
74
+ render template: 'catalog/index', formats: [:atom]
63
75
  expect(rendered).to have_selector("entry > updated")
64
76
  end
77
+
65
78
  it "has html link" do
79
+ render template: 'catalog/index', formats: [:atom]
66
80
  expect(rendered).to have_selector("entry > link[rel=alternate][type='text/html']")
67
81
  end
82
+
68
83
  it "has an id" do
84
+ render template: 'catalog/index', formats: [:atom]
69
85
  expect(rendered).to have_selector("entry > id")
70
86
  end
87
+
71
88
  it "has a summary" do
72
- expect(rendered).to have_selector("entry > summary")
89
+ stub_template "catalog/_index.html.erb" => "partial content"
90
+ render template: 'catalog/index', formats: [:atom]
91
+ expect(rendered).to have_selector("entry > summary", text: 'partial content')
92
+ end
93
+
94
+ context 'with a custom HTML partial' do
95
+ before do
96
+ blacklight_config.view.atom.summary_partials = ['whatever']
97
+ stub_template 'catalog/_whatever_default.html.erb' => 'whatever content'
98
+ end
99
+
100
+ it "has the customized summary" do
101
+ render template: 'catalog/index', formats: [:atom]
102
+ expect(rendered).to have_selector("entry > summary", text: 'whatever content')
103
+ end
73
104
  end
74
105
 
75
106
  describe "with an author" do
76
107
  let(:entry) { response_xml.elements.to_a("/feed/entry")[0] }
77
108
 
78
109
  it "has author tag" do
110
+ render template: 'catalog/index', formats: [:atom]
79
111
  expect(entry.elements["author/name"].text).to eq 'xyz'
80
112
  end
81
113
  end
@@ -84,6 +116,7 @@ RSpec.describe "catalog/index" do
84
116
  let(:entry) { response_xml.elements.to_a("/feed/entry")[1] }
85
117
 
86
118
  it "does not have an author tag" do
119
+ render template: 'catalog/index', formats: [:atom]
87
120
  expect(entry.elements["author/name"]).to be_nil
88
121
  end
89
122
  end
@@ -94,9 +127,12 @@ RSpec.describe "catalog/index" do
94
127
  let(:entry) { response_xml.elements.to_a("/feed/entry")[1].to_s }
95
128
 
96
129
  it "includes a link rel tag" do
130
+ render template: 'catalog/index', formats: [:atom]
97
131
  expect(entry).to have_selector("link[rel=alternate][type='application/some-format']")
98
132
  end
133
+
99
134
  it "has content embedded" do
135
+ render template: 'catalog/index', formats: [:atom]
100
136
  expect(entry).to have_selector("content")
101
137
  end
102
138
  end
@@ -105,6 +141,7 @@ RSpec.describe "catalog/index" do
105
141
  let(:entry) { response_xml.elements.to_a("/feed/entry")[5].to_s }
106
142
 
107
143
  it "does not have content embedded" do
144
+ render template: 'catalog/index', formats: [:atom]
108
145
  expect(entry).not_to have_selector("content[type='application/some-format']")
109
146
  end
110
147
  end
@@ -49,4 +49,18 @@ RSpec.describe "catalog/show.html.erb" do
49
49
  expect(rendered).to match /b_partial/
50
50
  expect(rendered).to match /c_partial/
51
51
  end
52
+
53
+ it 'provides the rendered partials to an explicitly configured component but does not render them by default' do
54
+ blacklight_config.show.partials = %w[a]
55
+ stub_template "catalog/_a_default.html.erb" => "partial"
56
+ blacklight_config.show.document_component = Blacklight::DocumentComponent
57
+ allow(view).to receive(:search_session).and_return({})
58
+ allow(view).to receive(:current_search_session).and_return(nil)
59
+ allow(view.main_app).to receive(:track_test_path).and_return('/track')
60
+
61
+ render
62
+
63
+ expect(rendered).to have_selector 'div.document header h1', text: 'xyz'
64
+ expect(rendered).not_to match(/partial/)
65
+ end
52
66
  end