blacklight 6.2.0 → 6.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.solr_wrapper +5 -0
- data/.travis.yml +3 -5
- data/Gemfile +3 -3
- data/VERSION +1 -1
- data/app/assets/javascripts/blacklight/core.js +19 -5
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +48 -20
- data/app/helpers/blacklight/configuration_helper_behavior.rb +1 -1
- data/app/helpers/blacklight/url_helper_behavior.rb +2 -1
- data/app/presenters/blacklight/document_presenter.rb +58 -150
- data/app/presenters/blacklight/field_presenter.rb +31 -0
- data/app/presenters/blacklight/index_presenter.rb +69 -0
- data/app/presenters/blacklight/link_alternate_presenter.rb +29 -0
- data/app/presenters/blacklight/rendering/abstract_step.rb +24 -0
- data/app/presenters/blacklight/rendering/helper_method.rb +23 -0
- data/app/presenters/blacklight/rendering/join.rb +16 -0
- data/app/presenters/blacklight/rendering/link_to_facet.rb +35 -0
- data/app/presenters/blacklight/rendering/microdata.rb +17 -0
- data/app/presenters/blacklight/rendering/pipeline.rb +32 -0
- data/app/presenters/blacklight/rendering/terminator.rb +9 -0
- data/app/presenters/blacklight/show_presenter.rb +93 -0
- data/app/services/blacklight/field_retriever.rb +58 -0
- data/app/views/catalog/_document_default.atom.builder +2 -3
- data/app/views/catalog/_document_default.rss.builder +2 -2
- data/app/views/kaminari/blacklight/_next_page.html.erb +9 -3
- data/app/views/kaminari/blacklight/_prev_page.html.erb +10 -3
- data/lib/blacklight/configuration.rb +15 -3
- data/lib/blacklight/configuration/null_field.rb +13 -0
- data/lib/blacklight/configuration/view_config.rb +6 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +1 -1
- data/lib/generators/blacklight/templates/config/blacklight.yml +1 -1
- data/lib/generators/blacklight/templates/config/jetty.yml +1 -1
- data/spec/controllers/alternate_controller_spec.rb +2 -2
- data/spec/controllers/application_controller_spec.rb +1 -1
- data/spec/controllers/blacklight/facet_spec.rb +3 -3
- data/spec/controllers/blacklight/search_fields_spec.rb +7 -7
- data/spec/controllers/blacklight/search_helper_spec.rb +44 -44
- data/spec/controllers/blacklight/suggest_search_spec.rb +1 -1
- data/spec/controllers/bookmarks_controller_spec.rb +6 -6
- data/spec/controllers/catalog_controller_spec.rb +125 -125
- data/spec/controllers/saved_searches_controller_spec.rb +4 -9
- data/spec/controllers/search_history_controller_spec.rb +3 -6
- data/spec/controllers/suggest_controller_spec.rb +2 -2
- data/spec/features/alternate_controller_spec.rb +3 -3
- data/spec/features/bookmarks_spec.rb +6 -6
- data/spec/features/did_you_mean_spec.rb +10 -10
- data/spec/features/facets_spec.rb +4 -4
- data/spec/features/record_view_spec.rb +4 -4
- data/spec/features/saved_searches_spec.rb +4 -4
- data/spec/features/search_context_spec.rb +4 -4
- data/spec/features/search_filters_spec.rb +10 -10
- data/spec/features/search_formats_spec.rb +2 -2
- data/spec/features/search_history_spec.rb +5 -5
- data/spec/features/search_pagination_spec.rb +4 -4
- data/spec/features/search_results_spec.rb +7 -7
- data/spec/features/search_sort_spec.rb +2 -2
- data/spec/features/search_spec.rb +6 -6
- data/spec/helpers/blacklight_helper_spec.rb +105 -65
- data/spec/helpers/catalog_helper_spec.rb +36 -36
- data/spec/helpers/configuration_helper_spec.rb +28 -28
- data/spec/helpers/facets_helper_spec.rb +39 -39
- data/spec/helpers/hash_as_hidden_fields_spec.rb +1 -1
- data/spec/helpers/render_constraints_helper_spec.rb +1 -1
- data/spec/helpers/search_history_constraints_helper_spec.rb +7 -7
- data/spec/helpers/url_helper_spec.rb +20 -17
- data/spec/lib/blacklight/search_state_spec.rb +2 -2
- data/spec/lib/blacklight/utils_spec.rb +15 -15
- data/spec/lib/blacklight_spec.rb +1 -1
- data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
- data/spec/models/blacklight/configurable_spec.rb +3 -3
- data/spec/models/blacklight/configuration_spec.rb +52 -52
- data/spec/models/blacklight/document_spec.rb +10 -10
- data/spec/models/blacklight/facet_paginator_spec.rb +5 -5
- data/spec/models/blacklight/search_builder_spec.rb +34 -34
- data/spec/models/blacklight/user_spec.rb +4 -4
- data/spec/models/bookmark_spec.rb +5 -5
- data/spec/models/record_mailer_spec.rb +11 -11
- data/spec/models/search_spec.rb +1 -1
- data/spec/models/solr_document_spec.rb +4 -4
- data/spec/presenters/document_presenter_spec.rb +94 -50
- data/spec/presenters/index_presenter_spec.rb +147 -0
- data/spec/presenters/pipeline_spec.rb +28 -0
- data/spec/presenters/show_presenter_spec.rb +287 -0
- data/spec/routing/catalog_routing_spec.rb +11 -11
- data/spec/spec_helper.rb +10 -1
- data/spec/support/backport_test.rb +38 -0
- data/spec/test_app_templates/Gemfile.extra +2 -10
- data/spec/views/_user_util_links.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_constraints_element.html.erb_spec.rb +5 -5
- data/spec/views/catalog/_document.html.erb_spec.rb +2 -2
- data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
- data/spec/views/catalog/_facet_layout.html.erb_spec.rb +4 -4
- data/spec/views/catalog/_facets.html.erb_spec.rb +4 -4
- data/spec/views/catalog/_index_default.erb_spec.rb +5 -4
- data/spec/views/catalog/_index_header_default.html.erb_spec.rb +4 -3
- data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +3 -3
- data/spec/views/catalog/_search_header.erb_spec.rb +1 -1
- data/spec/views/catalog/_show_default.erb_spec.rb +6 -5
- data/spec/views/catalog/_show_sidebar.erb_spec.rb +2 -1
- data/spec/views/catalog/_show_tools.html.erb_spec.rb +8 -8
- data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +2 -2
- data/spec/views/catalog/_thumbnail_default.erb_spec.rb +3 -2
- data/spec/views/catalog/_view_type_group.html.erb_spec.rb +3 -3
- data/spec/views/catalog/facet.html.erb_spec.rb +3 -3
- data/spec/views/catalog/index.atom.builder_spec.rb +15 -14
- data/spec/views/catalog/index.html.erb_spec.rb +3 -3
- data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
- data/spec/views/catalog/show.html.erb_spec.rb +5 -4
- data/tasks/blacklight.rake +1 -1
- metadata +25 -4
- data/config/jetty.yml +0 -13
@@ -1,6 +1,5 @@
|
|
1
1
|
xml.entry do
|
2
|
-
|
3
|
-
xml.title presenter(document).render_document_index_label(document_show_link_field(document))
|
2
|
+
xml.title index_presenter(document).label(document_show_link_field(document))
|
4
3
|
|
5
4
|
# updated is required, for now we'll just set it to now, sorry
|
6
5
|
xml.updated Time.current.iso8601
|
@@ -8,7 +7,7 @@ xml.entry do
|
|
8
7
|
xml.link "rel" => "alternate", "type" => "text/html", "href" => polymorphic_url(url_for_document(document))
|
9
8
|
# add other doc-specific formats, atom only lets us have one per
|
10
9
|
# content type, so the first one in the list wins.
|
11
|
-
xml <<
|
10
|
+
xml << show_presenter(document).link_rel_alternates(unique: true)
|
12
11
|
|
13
12
|
xml.id polymorphic_url(url_for_document(document))
|
14
13
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
xml.item do
|
2
|
-
xml.title(
|
2
|
+
xml.title(index_presenter(document).label(document_show_link_field(document)) || (document.to_semantic_values[:title].first if document.to_semantic_values.key?(:title)))
|
3
3
|
xml.link(polymorphic_url(url_for_document(document)))
|
4
4
|
xml.author( document.to_semantic_values[:author].first ) if document.to_semantic_values.key? :author
|
5
|
-
end
|
5
|
+
end
|
@@ -6,6 +6,12 @@
|
|
6
6
|
per_page: number of items to fetch per page
|
7
7
|
remote: data-remote
|
8
8
|
-%>
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
<% if current_page.last? %>
|
10
|
+
<li class="disabled">
|
11
|
+
<%= link_to raw(t 'views.pagination.next'), '#', :rel => 'next', :onclick=>'return false;' %>
|
12
|
+
</li>
|
13
|
+
<% else %>
|
14
|
+
<li>
|
15
|
+
<%= link_to raw(t 'views.pagination.next'), url, :rel => 'next', :remote => remote %>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
@@ -6,6 +6,13 @@
|
|
6
6
|
per_page: number of items to fetch per page
|
7
7
|
remote: data-remote
|
8
8
|
-%>
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
<% if current_page.first? %>
|
10
|
+
<li class="disabled">
|
11
|
+
<%= link_to raw(t 'views.pagination.previous'), '#', :rel => 'prev', :onclick=>'return false;' %>
|
12
|
+
</li>
|
13
|
+
<% else %>
|
14
|
+
<li>
|
15
|
+
<%= link_to raw(t 'views.pagination.previous'), url, :rel => 'prev', :remote => remote %>
|
16
|
+
</li>
|
17
|
+
<% end %>
|
18
|
+
|
@@ -16,6 +16,7 @@ module Blacklight
|
|
16
16
|
# XXX this isn't very pretty, but it works.
|
17
17
|
require_dependency 'blacklight/configuration/fields'
|
18
18
|
require_dependency 'blacklight/configuration/field'
|
19
|
+
require_dependency 'blacklight/configuration/null_field'
|
19
20
|
require_dependency 'blacklight/configuration/search_field'
|
20
21
|
require_dependency 'blacklight/configuration/facet_field'
|
21
22
|
require_dependency 'blacklight/configuration/sort_field'
|
@@ -69,7 +70,7 @@ module Blacklight
|
|
69
70
|
# the model to use for each response document
|
70
71
|
document_model: nil,
|
71
72
|
# document presenter class used by helpers and views
|
72
|
-
document_presenter_class: nil,
|
73
|
+
document_presenter_class: nil, # deprecated
|
73
74
|
# Class for paginating long lists of facet fields
|
74
75
|
facet_paginator_class: nil,
|
75
76
|
# repository connection configuration
|
@@ -80,6 +81,8 @@ module Blacklight
|
|
80
81
|
navbar: OpenStructWithHashAccess.new(partials: { }),
|
81
82
|
# General configuration for all views
|
82
83
|
index: ViewConfig::Index.new(
|
84
|
+
# document presenter class used by helpers and views
|
85
|
+
document_presenter_class: nil,
|
83
86
|
# solr field to use to render a document title
|
84
87
|
title_field: nil,
|
85
88
|
# solr field to use to render format-specific partials
|
@@ -95,6 +98,8 @@ module Blacklight
|
|
95
98
|
),
|
96
99
|
# Additional configuration when displaying a single document
|
97
100
|
show: ViewConfig::Show.new(
|
101
|
+
# document presenter class used by helpers and views
|
102
|
+
document_presenter_class: nil,
|
98
103
|
# default route parameters for 'show' requests
|
99
104
|
# set this to a hash with additional arguments to merge into
|
100
105
|
# the route, or set `controller: :current` to route to the
|
@@ -186,13 +191,20 @@ module Blacklight
|
|
186
191
|
super
|
187
192
|
end
|
188
193
|
|
194
|
+
def response_model
|
195
|
+
super || Blacklight::Solr::Response
|
196
|
+
end
|
197
|
+
|
198
|
+
# @deprecated
|
189
199
|
def document_presenter_class
|
190
200
|
super || Blacklight::DocumentPresenter
|
191
201
|
end
|
192
202
|
|
193
|
-
|
194
|
-
|
203
|
+
# @deprecated
|
204
|
+
def document_presenter_class=(klass)
|
205
|
+
super
|
195
206
|
end
|
207
|
+
deprecation_deprecate :document_presenter_class= => "replaced by show.presenter_class and index.presenter_class"
|
196
208
|
|
197
209
|
def response_model= *args
|
198
210
|
super
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module Blacklight
|
2
|
+
# Returned if no config is defined for the field in the Blacklight::Configuration
|
3
|
+
class Configuration::NullField < Blacklight::Configuration::Field
|
4
|
+
def initialize(field_or_hash = nil)
|
5
|
+
case field_or_hash
|
6
|
+
when String, Symbol
|
7
|
+
super(field: field_or_hash)
|
8
|
+
else
|
9
|
+
super
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -2,9 +2,15 @@
|
|
2
2
|
class Blacklight::Configuration
|
3
3
|
class ViewConfig < Blacklight::OpenStructWithHashAccess
|
4
4
|
class Show < ViewConfig
|
5
|
+
def document_presenter_class
|
6
|
+
super || Blacklight::ShowPresenter
|
7
|
+
end
|
5
8
|
end
|
6
9
|
|
7
10
|
class Index < ViewConfig
|
11
|
+
def document_presenter_class
|
12
|
+
super || Blacklight::IndexPresenter
|
13
|
+
end
|
8
14
|
end
|
9
15
|
end
|
10
16
|
end
|
@@ -15,7 +15,7 @@ development:
|
|
15
15
|
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
|
16
16
|
test: &test
|
17
17
|
adapter: solr
|
18
|
-
url: <%= "http://127.0.0.1:#{ENV['TEST_JETTY_PORT'] ||
|
18
|
+
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:#{ENV['TEST_JETTY_PORT'] || 8983}/solr/blacklight-core" %>
|
19
19
|
production:
|
20
20
|
adapter: solr
|
21
21
|
url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %>
|
@@ -4,7 +4,7 @@ development:
|
|
4
4
|
java_version: ">= 1.7"
|
5
5
|
test:
|
6
6
|
startup_wait: 60
|
7
|
-
jetty_port: <%= ENV['TEST_JETTY_PORT'] ||
|
7
|
+
jetty_port: <%= ENV['TEST_JETTY_PORT'] || 8983 %>
|
8
8
|
<%= ENV['TEST_JETTY_PATH'] ? "jetty_home: " + ENV['TEST_JETTY_PATH'] : '' %>
|
9
9
|
java_version: ">= 1.7"
|
10
10
|
production:
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
|
4
4
|
describe AlternateController do
|
5
5
|
describe "the search results tools" do
|
6
|
-
it "
|
6
|
+
it "inherits tools from CatalogController" do
|
7
7
|
expect(AlternateController.blacklight_config.index.document_actions).to have_key(:bookmark)
|
8
8
|
end
|
9
9
|
|
@@ -11,7 +11,7 @@ describe AlternateController do
|
|
11
11
|
before do
|
12
12
|
AlternateController.blacklight_config.index.document_actions.delete(:bookmark)
|
13
13
|
end
|
14
|
-
it "
|
14
|
+
it "does not affect the CatalogController" do
|
15
15
|
expect(AlternateController.blacklight_config.index.document_actions).to be_empty
|
16
16
|
expect(CatalogController.blacklight_config.index.document_actions).to have_key(:bookmark)
|
17
17
|
end
|
@@ -5,7 +5,7 @@ describe ApplicationController do
|
|
5
5
|
|
6
6
|
describe "#blacklight_config" do
|
7
7
|
|
8
|
-
it "
|
8
|
+
it "provides a default blacklight_config everywhere" do
|
9
9
|
expect(controller.blacklight_config).to eq CatalogController.blacklight_config
|
10
10
|
end
|
11
11
|
end
|
@@ -16,17 +16,17 @@ describe Blacklight::Facet do
|
|
16
16
|
let(:blacklight_config) { Blacklight::Configuration.new }
|
17
17
|
|
18
18
|
describe "#facet_configuration_for_field" do
|
19
|
-
it "
|
19
|
+
it "looks up fields by key" do
|
20
20
|
blacklight_config.add_facet_field 'a'
|
21
21
|
expect(subject.facet_configuration_for_field('a')).to eq blacklight_config.facet_fields['a']
|
22
22
|
end
|
23
23
|
|
24
|
-
it "
|
24
|
+
it "looks up fields by field name" do
|
25
25
|
blacklight_config.add_facet_field 'a', field: 'b'
|
26
26
|
expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
|
27
27
|
end
|
28
28
|
|
29
|
-
it "
|
29
|
+
it "supports both strings and symbols" do
|
30
30
|
blacklight_config.add_facet_field 'a', field: :b
|
31
31
|
expect(subject.facet_configuration_for_field('b')).to eq blacklight_config.facet_fields['a']
|
32
32
|
end
|
@@ -24,25 +24,25 @@ describe Blacklight::SearchFields do
|
|
24
24
|
allow(@search_field_obj).to receive(:blacklight_config).and_return(@config)
|
25
25
|
end
|
26
26
|
|
27
|
-
it "
|
27
|
+
it "returns search field list with calculated :label when needed" do
|
28
28
|
@search_field_obj.search_field_list.each do |hash|
|
29
29
|
expect(hash.label).not_to be_blank
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
it "
|
33
|
+
it "fills in default qt where needed" do
|
34
34
|
expect(@search_field_obj.search_field_def_for_key("all_fields").qt).to eq @config.default_solr_params[:qt]
|
35
35
|
end
|
36
36
|
|
37
|
-
it "
|
37
|
+
it "lookups field definitions by key" do
|
38
38
|
expect(@search_field_obj.search_field_def_for_key("title").key).to eq "title"
|
39
39
|
end
|
40
40
|
|
41
|
-
it "
|
41
|
+
it "finds label by key" do
|
42
42
|
expect(@search_field_obj.label_for_search_field("title")).to eq "Title"
|
43
43
|
end
|
44
44
|
|
45
|
-
it "
|
45
|
+
it "supplies default label for key not found" do
|
46
46
|
expect(@search_field_obj.label_for_search_field("non_existent_key")).to eq "Keyword"
|
47
47
|
end
|
48
48
|
|
@@ -50,7 +50,7 @@ describe Blacklight::SearchFields do
|
|
50
50
|
before do
|
51
51
|
@bad_config = MockConfig.new
|
52
52
|
end
|
53
|
-
it "
|
53
|
+
it "raises exception on #search_field_list" do
|
54
54
|
expect { allow(@bad_config).to receive(:blacklight_config).and_return(Blacklight::Configuration.new { |config|
|
55
55
|
config.add_search_field :label => 'All Fields', :qt => 'all_fields'
|
56
56
|
config.add_search_field 'title', :qt => 'title_search'
|
@@ -62,7 +62,7 @@ describe Blacklight::SearchFields do
|
|
62
62
|
before do
|
63
63
|
@bad_config = MockConfig.new
|
64
64
|
end
|
65
|
-
it "
|
65
|
+
it "raises on #search_field_list" do
|
66
66
|
expect { allow(@bad_config).to receive(:blacklight_config).and_return(Blacklight::Configuration.new { |config|
|
67
67
|
config.add_search_field 'my_key', :label => 'All Fields'
|
68
68
|
config.add_search_field 'my_key', :label => 'title'
|
@@ -59,7 +59,7 @@ describe Blacklight::SearchHelper do
|
|
59
59
|
(@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
|
60
60
|
end
|
61
61
|
|
62
|
-
it "
|
62
|
+
it "uses the configured request handler" do
|
63
63
|
allow(blacklight_config).to receive(:default_solr_params).and_return({:qt => 'custom_request_handler'})
|
64
64
|
allow(blacklight_solr).to receive(:send_and_receive) do |path, params|
|
65
65
|
expect(path).to eq 'select'
|
@@ -70,11 +70,11 @@ describe Blacklight::SearchHelper do
|
|
70
70
|
subject.search_results(q: @all_docs_query)
|
71
71
|
end
|
72
72
|
|
73
|
-
it '
|
73
|
+
it 'has a @response.docs list of the same size as @document_list' do
|
74
74
|
expect(@solr_response.docs).to have(@document_list.length).docs
|
75
75
|
end
|
76
76
|
|
77
|
-
it '
|
77
|
+
it 'has @response.docs list representing same documents as SolrDocuments in @document_list' do
|
78
78
|
@solr_response.docs.each_index do |index|
|
79
79
|
mash = @solr_response.docs[index]
|
80
80
|
solr_document = @document_list[index]
|
@@ -96,11 +96,11 @@ describe Blacklight::SearchHelper do
|
|
96
96
|
(@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
|
97
97
|
end
|
98
98
|
|
99
|
-
it "
|
99
|
+
it "has an empty document list" do
|
100
100
|
expect(@document_list).to be_empty
|
101
101
|
end
|
102
102
|
|
103
|
-
it "
|
103
|
+
it "returns a grouped response" do
|
104
104
|
expect(@solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
|
105
105
|
|
106
106
|
end
|
@@ -116,11 +116,11 @@ describe Blacklight::SearchHelper do
|
|
116
116
|
(@solr_response, @document_list) = subject.search_results(q: @all_docs_query)
|
117
117
|
end
|
118
118
|
|
119
|
-
it "
|
119
|
+
it "has an empty document list" do
|
120
120
|
expect(@document_list).to be_empty
|
121
121
|
end
|
122
122
|
|
123
|
-
it "
|
123
|
+
it "returns a grouped response" do
|
124
124
|
expect(@solr_response).to be_a_kind_of Blacklight::Solr::Response::GroupResponse
|
125
125
|
expect(@solr_response.group_field).to eq "title_sort"
|
126
126
|
end
|
@@ -128,7 +128,7 @@ describe Blacklight::SearchHelper do
|
|
128
128
|
|
129
129
|
|
130
130
|
describe "for All Docs Query and One Facet" do
|
131
|
-
it '
|
131
|
+
it 'has results' do
|
132
132
|
(solr_response, document_list) = subject.search_results(q: @all_docs_query, f: @single_facet)
|
133
133
|
expect(solr_response.docs).to have(document_list.size).results
|
134
134
|
expect(solr_response.docs).to have_at_least(1).result
|
@@ -138,7 +138,7 @@ describe Blacklight::SearchHelper do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
describe "for Query Without Results and No Facet" do
|
141
|
-
it '
|
141
|
+
it 'has no results and not raise error' do
|
142
142
|
(solr_response, document_list) = subject.search_results(q: @no_docs_query)
|
143
143
|
expect(document_list).to have(0).results
|
144
144
|
expect(solr_response.docs).to have(0).results
|
@@ -146,7 +146,7 @@ describe Blacklight::SearchHelper do
|
|
146
146
|
end
|
147
147
|
|
148
148
|
describe "for Query Without Results and One Facet" do
|
149
|
-
it '
|
149
|
+
it 'has no results and not raise error' do
|
150
150
|
(solr_response, document_list) = subject.search_results(q: @no_docs_query, f: @single_facet)
|
151
151
|
expect(document_list).to have(0).results
|
152
152
|
expect(solr_response.docs).to have(0).results
|
@@ -154,7 +154,7 @@ describe Blacklight::SearchHelper do
|
|
154
154
|
end
|
155
155
|
|
156
156
|
describe "for All Docs Query and Bad Facet" do
|
157
|
-
it '
|
157
|
+
it 'has no results and not raise error' do
|
158
158
|
(solr_response, document_list) = subject.search_results(q: @all_docs_query, f: @bad_facet)
|
159
159
|
expect(document_list).to have(0).results
|
160
160
|
expect(solr_response.docs).to have(0).results
|
@@ -173,20 +173,20 @@ describe Blacklight::SearchHelper do
|
|
173
173
|
@facets = solr_response.aggregations
|
174
174
|
end
|
175
175
|
|
176
|
-
it '
|
176
|
+
it 'has more than one facet' do
|
177
177
|
expect(@facets).to have_at_least(1).facet
|
178
178
|
end
|
179
|
-
it '
|
179
|
+
it 'has all facets specified in initializer' do
|
180
180
|
expect(@facets.keys).to include *blacklight_config.facet_fields.keys
|
181
181
|
expect(@facets.none? { |k, v| v.nil? }).to eq true
|
182
182
|
end
|
183
183
|
|
184
|
-
it '
|
184
|
+
it 'has at least one value for each facet' do
|
185
185
|
@facets.each do |key, facet|
|
186
186
|
expect(facet.items).to have_at_least(1).hit
|
187
187
|
end
|
188
188
|
end
|
189
|
-
it '
|
189
|
+
it 'has multiple values for at least one facet' do
|
190
190
|
has_mult_values = false
|
191
191
|
@facets.each do |key, facet|
|
192
192
|
if facet.items.size > 1
|
@@ -196,7 +196,7 @@ describe Blacklight::SearchHelper do
|
|
196
196
|
end
|
197
197
|
expect(has_mult_values).to eq true
|
198
198
|
end
|
199
|
-
it '
|
199
|
+
it 'has all value counts > 0' do
|
200
200
|
@facets.each do |key, facet|
|
201
201
|
facet.items.each do |facet_vals|
|
202
202
|
expect(facet_vals.hits).to be > 0
|
@@ -210,56 +210,56 @@ describe Blacklight::SearchHelper do
|
|
210
210
|
describe 'Paging', :integration => true do
|
211
211
|
let(:blacklight_config) { copy_of_catalog_config }
|
212
212
|
|
213
|
-
it '
|
213
|
+
it 'starts with first results by default' do
|
214
214
|
(solr_response, document_list) = subject.search_results(q: @all_docs_query)
|
215
215
|
expect(solr_response.params[:start].to_i).to eq 0
|
216
216
|
end
|
217
|
-
it '
|
217
|
+
it 'has number of results (per page) set in initializer, by default' do
|
218
218
|
(solr_response, document_list) = subject.search_results(q: @all_docs_query)
|
219
219
|
expect(solr_response.docs).to have(blacklight_config[:default_solr_params][:rows]).items
|
220
220
|
expect(document_list).to have(blacklight_config[:default_solr_params][:rows]).items
|
221
221
|
end
|
222
222
|
|
223
|
-
it '
|
223
|
+
it 'gets number of results per page requested' do
|
224
224
|
num_results = 3 # non-default value
|
225
225
|
(solr_response1, document_list1) = subject.search_results(q: @all_docs_query, per_page: num_results)
|
226
226
|
expect(document_list1).to have(num_results).docs
|
227
227
|
expect(solr_response1.docs).to have(num_results).docs
|
228
228
|
end
|
229
229
|
|
230
|
-
it '
|
230
|
+
it 'gets number of rows requested' do
|
231
231
|
num_results = 4 # non-default value
|
232
232
|
(solr_response1, document_list1) = subject.search_results(q: @all_docs_query, rows: num_results)
|
233
233
|
expect(document_list1).to have(num_results).docs
|
234
234
|
expect(solr_response1.docs).to have(num_results).docs
|
235
235
|
end
|
236
236
|
|
237
|
-
it '
|
237
|
+
it 'skips appropriate number of results when requested - default per page' do
|
238
238
|
page = 3
|
239
239
|
(solr_response2, document_list2) = subject.search_results(q: @all_docs_query, page: page)
|
240
240
|
expect(solr_response2.params[:start].to_i).to eq blacklight_config[:default_solr_params][:rows] * (page-1)
|
241
241
|
end
|
242
|
-
it '
|
242
|
+
it 'skips appropriate number of results when requested - non-default per page' do
|
243
243
|
page = 3
|
244
244
|
num_results = 3
|
245
245
|
(solr_response2a, document_list2a) = subject.search_results(q: @all_docs_query, per_page: num_results, page: page)
|
246
246
|
expect(solr_response2a.params[:start].to_i).to eq num_results * (page-1)
|
247
247
|
end
|
248
248
|
|
249
|
-
it '
|
249
|
+
it 'has no results when prompted for page after last result' do
|
250
250
|
big = 5000
|
251
251
|
(solr_response3, document_list3) = subject.search_results(q: @all_docs_query, rows: big, page: big)
|
252
252
|
expect(document_list3).to have(0).docs
|
253
253
|
expect(solr_response3.docs).to have(0).docs
|
254
254
|
end
|
255
255
|
|
256
|
-
it '
|
256
|
+
it 'shows first results when prompted for page before first result' do
|
257
257
|
# FIXME: should it show first results, or should it throw an error for view to deal w?
|
258
258
|
# Solr throws an error for a negative start value
|
259
259
|
(solr_response4, document_list4) = subject.search_results(q: @all_docs_query, page: '-1')
|
260
260
|
expect(solr_response4.params[:start].to_i).to eq 0
|
261
261
|
end
|
262
|
-
it '
|
262
|
+
it 'has results available when asked for more than are in response' do
|
263
263
|
big = 5000
|
264
264
|
(solr_response5, document_list5) = subject.search_results(q: @all_docs_query, rows: big, page: 1)
|
265
265
|
expect(solr_response5.docs).to have(document_list5.length).docs
|
@@ -276,34 +276,34 @@ describe Blacklight::SearchHelper do
|
|
276
276
|
@response2, @document = subject.fetch(@doc_id)
|
277
277
|
end
|
278
278
|
|
279
|
-
it "
|
279
|
+
it "raises Blacklight::RecordNotFound for an unknown id" do
|
280
280
|
expect {
|
281
281
|
subject.fetch(@bad_id)
|
282
282
|
}.to raise_error(Blacklight::Exceptions::RecordNotFound)
|
283
283
|
end
|
284
284
|
|
285
|
-
it "
|
285
|
+
it "uses a provided document request handler" do
|
286
286
|
allow(blacklight_config).to receive_messages(:document_solr_request_handler => 'document')
|
287
287
|
allow(blacklight_solr).to receive(:send_and_receive).with('select', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
|
288
288
|
expect { subject.fetch(@doc_id)}.to raise_error Blacklight::Exceptions::RecordNotFound
|
289
289
|
end
|
290
290
|
|
291
|
-
it "
|
291
|
+
it "uses a provided document solr path" do
|
292
292
|
allow(blacklight_config).to receive_messages(:document_solr_path => 'get')
|
293
293
|
allow(blacklight_solr).to receive(:send_and_receive).with('get', kind_of(Hash)).and_return({'response'=>{'docs'=>[]}})
|
294
294
|
expect { subject.fetch(@doc_id)}.to raise_error Blacklight::Exceptions::RecordNotFound
|
295
295
|
end
|
296
296
|
|
297
|
-
it "
|
297
|
+
it "has a non-nil result for a known id" do
|
298
298
|
expect(@document).not_to be_nil
|
299
299
|
end
|
300
|
-
it "
|
300
|
+
it "has a single document in the response for a known id" do
|
301
301
|
expect(@response2.docs.size).to eq 1
|
302
302
|
end
|
303
|
-
it '
|
303
|
+
it 'has the expected value in the id field' do
|
304
304
|
expect(@document.id).to eq @doc_id
|
305
305
|
end
|
306
|
-
it '
|
306
|
+
it 'has non-nil values for required fields set in initializer' do
|
307
307
|
expect(@document.fetch(blacklight_config.view_config(:show).display_type_field)).not_to be_nil
|
308
308
|
end
|
309
309
|
end
|
@@ -354,7 +354,7 @@ describe Blacklight::SearchHelper do
|
|
354
354
|
describe "facet_limit_for" do
|
355
355
|
let(:blacklight_config) { copy_of_catalog_config }
|
356
356
|
|
357
|
-
it "
|
357
|
+
it "returns specified value for facet_field specified" do
|
358
358
|
expect(subject.facet_limit_for("subject_topic_facet")).to eq blacklight_config.facet_fields["subject_topic_facet"].limit
|
359
359
|
end
|
360
360
|
|
@@ -364,7 +364,7 @@ describe Blacklight::SearchHelper do
|
|
364
364
|
expect(subject.facet_limit_hash).to eq blacklight_config[:facet][:limits]
|
365
365
|
end
|
366
366
|
|
367
|
-
it "
|
367
|
+
it "handles no facet_limits in config" do
|
368
368
|
blacklight_config.facet_fields = {}
|
369
369
|
expect(subject.facet_limit_for("subject_topic_facet")).to be_nil
|
370
370
|
end
|
@@ -375,23 +375,23 @@ describe Blacklight::SearchHelper do
|
|
375
375
|
config.add_facet_field "language_facet", limit: true
|
376
376
|
config
|
377
377
|
end
|
378
|
-
it "
|
378
|
+
it "returns nil if no @response available" do
|
379
379
|
expect(subject.facet_limit_for("some_unknown_field")).to be_nil
|
380
380
|
end
|
381
|
-
it "
|
381
|
+
it "gets from @response facet.limit if available" do
|
382
382
|
@response = double()
|
383
383
|
allow(@response).to receive(:aggregations).and_return("language_facet" => double(limit: nil))
|
384
384
|
subject.instance_variable_set(:@response, @response)
|
385
385
|
blacklight_config.facet_fields['language_facet'].limit = 10
|
386
386
|
expect(subject.facet_limit_for("language_facet")).to eq 10
|
387
387
|
end
|
388
|
-
it "
|
388
|
+
it "gets the limit from the facet field in @response" do
|
389
389
|
@response = double()
|
390
390
|
allow(@response).to receive(:aggregations).and_return("language_facet" => double(limit: 16))
|
391
391
|
subject.instance_variable_set(:@response, @response)
|
392
392
|
expect(subject.facet_limit_for("language_facet")).to eq 15
|
393
393
|
end
|
394
|
-
it "
|
394
|
+
it "defaults to 10" do
|
395
395
|
expect(subject.facet_limit_for("language_facet")).to eq 10
|
396
396
|
end
|
397
397
|
end
|
@@ -404,13 +404,13 @@ describe Blacklight::SearchHelper do
|
|
404
404
|
# TODO: maybe eventually check other types of solr requests
|
405
405
|
# more like this
|
406
406
|
# nearby on shelf
|
407
|
-
it "
|
407
|
+
it "raises a Blacklight exception if RSolr can't connect to the Solr instance" do
|
408
408
|
allow(blacklight_solr).to receive(:send_and_receive).and_raise(Errno::ECONNREFUSED)
|
409
409
|
expect { subject.repository.search }.to raise_exception(/Unable to connect to Solr instance/)
|
410
410
|
end
|
411
411
|
|
412
412
|
describe "grouped_key_for_results" do
|
413
|
-
it "
|
413
|
+
it "pulls the grouped key out of the config" do
|
414
414
|
blacklight_config.index.group = 'xyz'
|
415
415
|
expect(subject.grouped_key_for_results).to eq('xyz')
|
416
416
|
end
|
@@ -422,27 +422,27 @@ describe Blacklight::SearchHelper do
|
|
422
422
|
@full_response, @all_docs = pre_query.search_results(q: '', per_page: '100')
|
423
423
|
end
|
424
424
|
|
425
|
-
it "
|
425
|
+
it "returns the previous and next documents for a search" do
|
426
426
|
response, docs = subject.get_previous_and_next_documents_for_search(4, :q => '')
|
427
427
|
|
428
428
|
expect(docs.first.id).to eq @all_docs[3].id
|
429
429
|
expect(docs.last.id).to eq @all_docs[5].id
|
430
430
|
end
|
431
431
|
|
432
|
-
it "
|
432
|
+
it "returns only the next document if the counter is 0" do
|
433
433
|
response, docs = subject.get_previous_and_next_documents_for_search(0, :q => '')
|
434
434
|
|
435
435
|
expect(docs.first).to be_nil
|
436
436
|
expect(docs.last.id).to eq @all_docs[1].id
|
437
437
|
end
|
438
438
|
|
439
|
-
it "
|
439
|
+
it "returns only the previous document if the counter is the total number of documents" do
|
440
440
|
response, docs = subject.get_previous_and_next_documents_for_search(@full_response.total - 1, :q => '')
|
441
441
|
expect(docs.first.id).to eq @all_docs.slice(-2).id
|
442
442
|
expect(docs.last).to be_nil
|
443
443
|
end
|
444
444
|
|
445
|
-
it "
|
445
|
+
it "returns an array of nil values if there is only one result" do
|
446
446
|
response, docs = subject.get_previous_and_next_documents_for_search(0, :q => 'id:2007020969')
|
447
447
|
expect(docs.last).to be_nil
|
448
448
|
expect(docs.first).to be_nil
|