blacklight 5.19.2 → 6.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -3
  3. data/.hound.yml +2 -0
  4. data/.jshintrc +67 -0
  5. data/.rubocop_hound.yml +4 -0
  6. data/.travis.yml +11 -8
  7. data/Gemfile +11 -21
  8. data/Rakefile +1 -0
  9. data/VERSION +1 -1
  10. data/app/assets/javascripts/blacklight/blacklight.js +1 -0
  11. data/app/assets/javascripts/blacklight/core.js +5 -19
  12. data/app/assets/javascripts/blacklight/facet_load.js +23 -0
  13. data/app/assets/stylesheets/blacklight/_balanced_list.scss +18 -0
  14. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +5 -1
  15. data/app/assets/stylesheets/blacklight/_bookmark.scss +14 -6
  16. data/app/assets/stylesheets/blacklight/_constraints.scss +52 -0
  17. data/app/assets/stylesheets/blacklight/_controls.scss +61 -0
  18. data/app/assets/stylesheets/blacklight/_facets.scss +31 -4
  19. data/app/assets/stylesheets/blacklight/_header.scss +17 -3
  20. data/app/assets/stylesheets/blacklight/_pagination.scss +21 -0
  21. data/app/assets/stylesheets/blacklight/_search_results.scss +28 -0
  22. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +0 -3
  23. data/app/controllers/concerns/blacklight/bookmarks.rb +1 -1
  24. data/app/controllers/concerns/blacklight/catalog.rb +3 -45
  25. data/app/controllers/concerns/blacklight/controller.rb +29 -18
  26. data/app/controllers/concerns/blacklight/default_component_configuration.rb +4 -3
  27. data/app/controllers/concerns/blacklight/facet.rb +1 -0
  28. data/app/controllers/concerns/blacklight/request_builders.rb +4 -107
  29. data/app/controllers/concerns/blacklight/search_fields.rb +1 -1
  30. data/app/controllers/concerns/blacklight/search_helper.rb +8 -160
  31. data/app/controllers/saved_searches_controller.rb +1 -1
  32. data/app/controllers/search_history_controller.rb +18 -1
  33. data/app/helpers/blacklight/blacklight_helper_behavior.rb +17 -85
  34. data/app/helpers/blacklight/catalog_helper_behavior.rb +4 -48
  35. data/app/helpers/blacklight/component_helper_behavior.rb +9 -2
  36. data/app/helpers/blacklight/configuration_helper_behavior.rb +3 -43
  37. data/app/helpers/blacklight/facets_helper_behavior.rb +10 -6
  38. data/app/helpers/blacklight/layout_helper_behavior.rb +0 -8
  39. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +9 -10
  40. data/app/helpers/blacklight/render_partials_helper.rb +1 -3
  41. data/app/helpers/blacklight/url_helper_behavior.rb +15 -187
  42. data/{lib → app/models}/blacklight/abstract_repository.rb +0 -15
  43. data/{lib → app/models}/blacklight/configuration.rb +22 -59
  44. data/app/models/blacklight/configuration/context.rb +47 -0
  45. data/{lib → app/models}/blacklight/configuration/facet_field.rb +1 -0
  46. data/{lib → app/models}/blacklight/configuration/field.rb +0 -0
  47. data/{lib → app/models}/blacklight/configuration/fields.rb +2 -6
  48. data/{lib → app/models}/blacklight/configuration/search_field.rb +0 -0
  49. data/{lib → app/models}/blacklight/configuration/solr_field.rb +0 -0
  50. data/{lib → app/models}/blacklight/configuration/sort_field.rb +0 -0
  51. data/{lib → app/models}/blacklight/configuration/tool_config.rb +0 -0
  52. data/app/models/blacklight/configuration/view_config.rb +9 -0
  53. data/app/models/blacklight/facet_paginator.rb +14 -28
  54. data/{lib → app/models}/blacklight/search_builder.rb +16 -24
  55. data/app/models/blacklight/solr/facet_paginator.rb +6 -2
  56. data/{lib → app/models}/blacklight/solr/repository.rb +0 -21
  57. data/{lib → app/models}/blacklight/solr/request.rb +0 -0
  58. data/{lib → app/models}/blacklight/solr/response.rb +9 -8
  59. data/{lib → app/models}/blacklight/solr/response/facets.rb +37 -29
  60. data/{lib → app/models}/blacklight/solr/response/group.rb +0 -0
  61. data/{lib → app/models}/blacklight/solr/response/group_response.rb +0 -0
  62. data/{lib → app/models}/blacklight/solr/response/more_like_this.rb +0 -0
  63. data/{lib → app/models}/blacklight/solr/response/pagination_methods.rb +0 -0
  64. data/{lib → app/models}/blacklight/solr/response/response.rb +0 -0
  65. data/{lib → app/models}/blacklight/solr/response/spelling.rb +2 -1
  66. data/{lib → app/models}/blacklight/solr/search_builder.rb +0 -0
  67. data/app/models/concerns/blacklight/document.rb +11 -27
  68. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -0
  69. data/app/models/concerns/blacklight/solr/document.rb +8 -3
  70. data/{lib → app/models/concerns}/blacklight/solr/search_builder_behavior.rb +21 -33
  71. data/app/models/concerns/blacklight/user.rb +0 -9
  72. data/app/models/record_mailer.rb +0 -1
  73. data/app/presenters/blacklight/document_presenter.rb +23 -13
  74. data/app/views/blacklight/nav/_saved_searches.html.erb +1 -1
  75. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  76. data/app/views/bookmarks/_tools.html.erb +1 -2
  77. data/app/views/bookmarks/index.html.erb +2 -2
  78. data/app/views/catalog/_document_default.atom.builder +4 -2
  79. data/app/views/catalog/_facet_index_navigation.html.erb +9 -0
  80. data/app/views/catalog/_facet_layout.html.erb +2 -3
  81. data/app/views/catalog/_facet_pagination.html.erb +19 -21
  82. data/app/views/catalog/_facets.html.erb +2 -3
  83. data/app/views/catalog/_home_text.html.erb +2 -3
  84. data/app/views/catalog/_index_header_default.html.erb +2 -2
  85. data/app/views/catalog/_per_page_widget.html.erb +1 -1
  86. data/app/views/catalog/_search_form.html.erb +21 -18
  87. data/app/views/catalog/_sort_widget.html.erb +1 -1
  88. data/app/views/catalog/_zero_results.html.erb +2 -2
  89. data/app/views/catalog/facet.html.erb +3 -0
  90. data/app/views/catalog/index.atom.builder +1 -1
  91. data/app/views/layouts/blacklight.html.erb +2 -2
  92. data/app/views/saved_searches/index.html.erb +6 -7
  93. data/app/views/search_history/index.html.erb +5 -5
  94. data/app/views/shared/_header_navbar.html.erb +2 -2
  95. data/blacklight.gemspec +5 -5
  96. data/config/locales/blacklight.de.yml +1 -4
  97. data/config/locales/blacklight.en.yml +2 -7
  98. data/config/locales/blacklight.es.yml +1 -4
  99. data/config/locales/blacklight.fr.yml +1 -4
  100. data/config/locales/blacklight.it.yml +1 -4
  101. data/config/locales/blacklight.pt-BR.yml +1 -4
  102. data/config/routes.rb +9 -0
  103. data/db/migrate/20140202020201_create_searches.rb +1 -1
  104. data/db/migrate/20140202020202_create_bookmarks.rb +1 -1
  105. data/lib/blacklight.rb +5 -82
  106. data/lib/blacklight/engine.rb +0 -5
  107. data/lib/blacklight/parameters.rb +13 -0
  108. data/lib/blacklight/path.rb +143 -0
  109. data/lib/blacklight/routes.rb +3 -134
  110. data/lib/blacklight/routes/exportable.rb +25 -0
  111. data/lib/blacklight/routes/searchable.rb +20 -0
  112. data/lib/blacklight/solr.rb +1 -9
  113. data/lib/blacklight/utils.rb +2 -44
  114. data/lib/generators/blacklight/controller_generator.rb +7 -4
  115. data/lib/generators/blacklight/install_generator.rb +16 -9
  116. data/lib/generators/blacklight/models_generator.rb +18 -0
  117. data/lib/generators/blacklight/templates/catalog_controller.rb +85 -91
  118. data/lib/generators/blacklight/test_support_generator.rb +22 -15
  119. data/solr/conf/_rest_managed.json +3 -0
  120. data/solr/conf/admin-extra.html +31 -0
  121. data/solr/conf/elevate.xml +36 -0
  122. data/solr/conf/mapping-ISOLatin1Accent.txt +246 -0
  123. data/solr/conf/protwords.txt +21 -0
  124. data/solr/conf/schema.xml +621 -0
  125. data/solr/conf/scripts.conf +24 -0
  126. data/solr/conf/solrconfig.xml +391 -0
  127. data/solr/conf/spellings.txt +2 -0
  128. data/solr/conf/stopwords.txt +58 -0
  129. data/solr/conf/stopwords_en.txt +58 -0
  130. data/solr/conf/synonyms.txt +31 -0
  131. data/solr/conf/xslt/example.xsl +132 -0
  132. data/solr/conf/xslt/example_atom.xsl +67 -0
  133. data/solr/conf/xslt/example_rss.xsl +66 -0
  134. data/solr/conf/xslt/luke.xsl +337 -0
  135. data/solr/sample_solr_documents.yml +1 -0
  136. data/spec/controllers/blacklight/base_spec.rb +17 -0
  137. data/spec/controllers/blacklight/search_helper_spec.rb +25 -297
  138. data/spec/controllers/catalog_controller_spec.rb +7 -6
  139. data/spec/controllers/saved_searches_controller_spec.rb +1 -0
  140. data/spec/controllers/search_history_controller_spec.rb +1 -0
  141. data/spec/features/alternate_controller_spec.rb +10 -10
  142. data/spec/features/bookmarks_spec.rb +8 -22
  143. data/spec/features/facets_spec.rb +27 -7
  144. data/spec/features/record_view_spec.rb +4 -13
  145. data/spec/features/search_formats_spec.rb +1 -26
  146. data/spec/features/sitelinks_search_box.rb +1 -1
  147. data/spec/helpers/blacklight_helper_spec.rb +8 -38
  148. data/spec/helpers/catalog_helper_spec.rb +0 -8
  149. data/spec/helpers/configuration_helper_spec.rb +0 -25
  150. data/spec/helpers/facets_helper_spec.rb +12 -11
  151. data/spec/helpers/hash_as_hidden_fields_spec.rb +7 -7
  152. data/spec/helpers/layout_helper_spec.rb +0 -7
  153. data/spec/helpers/render_constraints_helper_spec.rb +4 -2
  154. data/spec/helpers/url_helper_spec.rb +13 -254
  155. data/spec/lib/blacklight/parameters_spec.rb +22 -0
  156. data/spec/lib/blacklight/path_spec.rb +254 -0
  157. data/spec/lib/blacklight_spec.rb +6 -2
  158. data/spec/models/blacklight/configuration/context_spec.rb +33 -0
  159. data/spec/models/blacklight/document/active_model_shim_spec.rb +33 -0
  160. data/spec/models/blacklight/document_spec.rb +29 -1
  161. data/spec/models/blacklight/facet_paginator_spec.rb +14 -13
  162. data/spec/models/blacklight/search_builder_spec.rb +17 -23
  163. data/spec/models/blacklight/solr/facet_paginator_spec.rb +11 -1
  164. data/spec/models/blacklight/solr/response/facets_spec.rb +19 -25
  165. data/spec/models/blacklight/solr/response/group_response_spec.rb +5 -5
  166. data/spec/models/blacklight/solr/response_spec.rb +0 -11
  167. data/spec/models/blacklight/solr/search_builder_spec.rb +49 -57
  168. data/spec/presenters/document_presenter_spec.rb +15 -42
  169. data/spec/routing/catalog_routing_spec.rb +7 -11
  170. data/spec/spec_helper.rb +4 -42
  171. data/spec/support/controller_level_helpers.rb +17 -0
  172. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -2
  173. data/spec/views/_user_util_links.html.erb_spec.rb +1 -1
  174. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +40 -0
  175. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +1 -1
  176. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  177. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +1 -1
  178. data/spec/views/catalog/_show_tools.html.erb_spec.rb +8 -8
  179. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +2 -2
  180. data/tasks/blacklight.rake +25 -30
  181. metadata +93 -71
  182. data/app/assets/stylesheets/blacklight/_catalog.scss +0 -229
  183. data/app/controllers/concerns/blacklight/search_history.rb +0 -31
  184. data/app/views/catalog/_refworks_form.html.erb +0 -6
  185. data/lib/blacklight/configuration/view_config.rb +0 -71
  186. data/lib/blacklight/rails/routes.rb +0 -29
  187. data/lib/blacklight/solr_helper.rb +0 -9
  188. data/lib/generators/blacklight/templates/config/initializers/blacklight_initializer.rb +0 -9
  189. data/spec/helpers/component_helper_spec.rb +0 -19
  190. data/spec/lib/blacklight/routes_spec.rb +0 -25
  191. data/spec/lib/blacklight/solr_helper_spec.rb +0 -12
  192. data/spec/routing/routes_spec.rb +0 -20
  193. data/spec/views/catalog/_document_action.html.erb_spec.rb +0 -21
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::Parameters do
4
+ describe "sanitize_search_params" do
5
+ subject { described_class.sanitize(params) }
6
+
7
+ context "with nil values" do
8
+ let(:params) { { a: nil, b: 1 } }
9
+ it "removes them" do
10
+ expect(subject).to_not have_key(:a)
11
+ expect(subject[:b]).to eq 1
12
+ end
13
+ end
14
+
15
+ context "with blacklisted keys" do
16
+ let(:params) { { action: true, controller: true, id: true, commit: true, utf8: true } }
17
+ it "removes them" do
18
+ expect(subject).to be_empty
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,254 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::Path do
4
+ let(:blacklight_config) do
5
+ Blacklight::Configuration.new.configure do |config|
6
+ config.index.title_field = 'title_display'
7
+ config.index.display_type_field = 'format'
8
+ end
9
+ end
10
+
11
+ let(:helper) { described_class.new(params, blacklight_config) }
12
+ let(:params) { {} }
13
+
14
+ describe "params_for_search" do
15
+ let(:params) { { 'default' => 'params' } }
16
+
17
+ it "takes original params" do
18
+ result = helper.params_for_search
19
+ expect(result).to eq({ 'default' => 'params' })
20
+ expect(params.object_id).to_not eq result.object_id
21
+ end
22
+
23
+ it "accepts params to merge into the controller's params" do
24
+ result = helper.params_for_search(q: 'query')
25
+ expect(result).to include(:q => 'query', 'default' => 'params')
26
+ end
27
+
28
+ context "when params have blacklisted keys" do
29
+ let(:params) { { action: 'action', controller: 'controller', id: "id", commit: 'commit' } }
30
+ it "removes them" do
31
+ result = helper.params_for_search
32
+ expect(result.keys).to_not include(:action, :controller, :commit, :id)
33
+ end
34
+ end
35
+
36
+ context "when params has page" do
37
+ context "and per_page changed" do
38
+ let(:params) { { per_page: 20, page: 5 } }
39
+ it "adjusts the current page" do
40
+ result = helper.params_for_search(per_page: 100)
41
+ expect(result[:page]).to eq 1
42
+ end
43
+ end
44
+
45
+ context "and per_page didn't change" do
46
+ let(:params) { { per_page: 20, page: 5 } }
47
+ it "doesn't change the current page" do
48
+ result = helper.params_for_search(per_page: 20)
49
+ expect(result[:page]).to eq 5
50
+ end
51
+ end
52
+
53
+ context "and the sort changes" do
54
+ let(:params) { { sort: 'field_a', page: 5 } }
55
+ it "adjusts the current page" do
56
+ result = helper.params_for_search(sort: 'field_b')
57
+ expect(result[:page]).to eq 1
58
+ end
59
+ end
60
+
61
+ context "and the sort didn't change" do
62
+ let(:params) { { sort: 'field_a', page: 5 } }
63
+ it "doesn't change the current page" do
64
+ result = helper.params_for_search(sort: 'field_a')
65
+ expect(result[:page]).to eq 5
66
+ end
67
+ end
68
+ end
69
+
70
+ context "with a block" do
71
+ let(:params) { { a: 1, b: 2 } }
72
+ it "should evalute the block and allow it to add or remove keys" do
73
+ result = helper.params_for_search(c: 3) do |params|
74
+ params.except! :a, :b
75
+ params[:d] = 'd'
76
+ end
77
+
78
+ expect(result.keys).to_not include(:a, :b)
79
+ expect(result[:c]).to eq 3
80
+ expect(result[:d]).to eq 'd'
81
+ end
82
+ end
83
+ end
84
+
85
+ describe "add_facet_params" do
86
+ let(:params_no_existing_facet) { { q: "query", search_field: "search_field", per_page: "50" } }
87
+ let(:params_existing_facets) { { q: "query", search_field: "search_field", per_page: "50", f: { "facet_field_1" => ["value1"], "facet_field_2" => ["value2", "value2a"] } } }
88
+
89
+ context "when there are no pre-existing facets" do
90
+ let(:params) { params_no_existing_facet }
91
+ it "adds facet value" do
92
+ result_params = helper.add_facet_params("facet_field", "facet_value")
93
+ expect(result_params[:f]).to be_a_kind_of(Hash)
94
+ expect(result_params[:f]["facet_field"]).to be_a_kind_of(Array)
95
+ expect(result_params[:f]["facet_field"]).to eq ["facet_value"]
96
+ end
97
+
98
+ it "leaves non-facet params alone" do
99
+ result_params = helper.add_facet_params("facet_field_2", "new_facet_value")
100
+
101
+ params.each_pair do |key, value|
102
+ next if key == :f
103
+ expect(result_params[key]).to eq params[key]
104
+ end
105
+ end
106
+
107
+ it "uses the facet's key in the url" do
108
+ allow(helper).to receive(:facet_configuration_for_field).with('some_field').and_return(double(single: true, field: "a_solr_field", key: "some_key"))
109
+
110
+ result_params = helper.add_facet_params('some_field', 'my_value')
111
+
112
+ expect(result_params[:f]['some_key']).to have(1).item
113
+ expect(result_params[:f]['some_key'].first).to eq 'my_value'
114
+ end
115
+ end
116
+
117
+ context "when there are pre-existing facets" do
118
+ let(:params) { params_existing_facets }
119
+ it "adds a facet param to existing facet constraints" do
120
+ result_params = helper.add_facet_params("facet_field_2", "new_facet_value")
121
+
122
+ expect(result_params[:f]).to be_a_kind_of(Hash)
123
+
124
+ params_existing_facets[:f].each_pair do |facet_field, value_list|
125
+ expect(result_params[:f][facet_field]).to be_a_kind_of(Array)
126
+ if facet_field == 'facet_field_2'
127
+ expect(result_params[:f][facet_field]).to eq (params_existing_facets[:f][facet_field] | ["new_facet_value"])
128
+ else
129
+ expect(result_params[:f][facet_field]).to eq params_existing_facets[:f][facet_field]
130
+ end
131
+ end
132
+ end
133
+
134
+ it "leaves non-facet params alone" do
135
+ result_params = helper.add_facet_params("facet_field_2", "new_facet_value")
136
+
137
+ params.each_pair do |key, value|
138
+ next if key == :f
139
+ expect(result_params[key]).to eq params[key]
140
+ end
141
+ end
142
+ end
143
+
144
+ context "with a facet selected in the params" do
145
+ let(:params) { { f: { 'single_value_facet_field' => 'other_value' } } }
146
+ it "replaces facets configured as single" do
147
+ allow(helper).to receive(:facet_configuration_for_field).with('single_value_facet_field').and_return(double(single: true, key: "single_value_facet_field"))
148
+ result_params = helper.add_facet_params('single_value_facet_field', 'my_value')
149
+
150
+ expect(result_params[:f]['single_value_facet_field']).to have(1).item
151
+ expect(result_params[:f]['single_value_facet_field'].first).to eq 'my_value'
152
+ end
153
+ end
154
+
155
+ it "accepts a FacetItem instead of a plain facet value" do
156
+ result_params = helper.add_facet_params('facet_field_1', double(value: 123))
157
+
158
+ expect(result_params[:f]['facet_field_1']).to include(123)
159
+ end
160
+
161
+ it "defers to the field set on a FacetItem" do
162
+ result_params = helper.add_facet_params('facet_field_1', double(:field => 'facet_field_2', :value => 123))
163
+
164
+ expect(result_params[:f]['facet_field_1']).to be_blank
165
+ expect(result_params[:f]['facet_field_2']).to include(123)
166
+ end
167
+
168
+ it "should add any extra fq parameters from the FacetItem" do
169
+ result_params = helper.add_facet_params('facet_field_1', double(:value => 123, fq: { 'facet_field_2' => 'abc' }))
170
+
171
+ expect(result_params[:f]['facet_field_1']).to include(123)
172
+ expect(result_params[:f]['facet_field_2']).to include('abc')
173
+ end
174
+ end
175
+
176
+ describe "add_facet_params_and_redirect" do
177
+ let(:params) { { q: "query",
178
+ :search_field => "search_field",
179
+ :per_page => "50",
180
+ :page => "5",
181
+ :f => {"facet_field_1" => ["value1"], "facet_field_2" => ["value2", "value2a"]},
182
+ Blacklight::Solr::FacetPaginator.request_keys[:page] => "100",
183
+ Blacklight::Solr::FacetPaginator.request_keys[:sort] => "index",
184
+ :id => 'facet_field_name'
185
+ }
186
+ }
187
+
188
+ it "does not include request parameters used by the facet paginator" do
189
+ params = helper.add_facet_params_and_redirect("facet_field_2", "facet_value")
190
+
191
+ bad_keys = Blacklight::Solr::FacetPaginator.request_keys.values + [:id]
192
+ bad_keys.each do |paginator_key|
193
+ expect(params.keys).to_not include(paginator_key)
194
+ end
195
+ end
196
+
197
+ it 'removes :page request key' do
198
+ params = helper.add_facet_params_and_redirect("facet_field_2", "facet_value")
199
+ expect(params.keys).to_not include(:page)
200
+ end
201
+
202
+ it "should otherwise do the same thing as add_facet_params" do
203
+ added_facet_params = helper.add_facet_params("facet_field_2", "facet_value")
204
+ added_facet_params_from_facet_action = helper.add_facet_params_and_redirect("facet_field_2", "facet_value")
205
+
206
+ expect(added_facet_params_from_facet_action).to eq added_facet_params.except(Blacklight::Solr::FacetPaginator.request_keys[:page], Blacklight::Solr::FacetPaginator.request_keys[:sort])
207
+ end
208
+ end
209
+
210
+ describe "#remove_facet_params" do
211
+ let(:params) { { f: facet_params }}
212
+ let(:facet_params) { { } }
213
+ context "when the facet has multiple values" do
214
+ let(:facet_params) { { 'some_field' => ['some_value', 'another_value'] } }
215
+
216
+ it "removes the facet / value tuple from the query parameters" do
217
+ params = helper.remove_facet_params('some_field', 'some_value')
218
+ expect(params[:f]['some_field']).not_to include 'some_value'
219
+ expect(params[:f]['some_field']).to include 'another_value'
220
+ end
221
+ end
222
+
223
+ context "when the facet has configuration" do
224
+ before do
225
+ allow(helper).to receive(:facet_configuration_for_field).with('some_field').and_return(
226
+ double(single: true, field: "a_solr_field", key: "some_key"))
227
+ end
228
+ let(:facet_params) { { 'some_key' => ['some_value', 'another_value'] } }
229
+
230
+ it "uses the facet's key configuration" do
231
+ params = helper.remove_facet_params('some_field', 'some_value')
232
+ expect(params[:f]['some_key']).not_to eq 'some_value'
233
+ expect(params[:f]['some_key']).to include 'another_value'
234
+ end
235
+ end
236
+
237
+ it "should remove the facet entirely when the last facet value is removed" do
238
+ facet_params['another_field'] = ['some_value']
239
+ facet_params['some_field'] = ['some_value']
240
+
241
+ params = helper.remove_facet_params('some_field', 'some_value')
242
+
243
+ expect(params[:f]).not_to include 'some_field'
244
+ end
245
+
246
+ it "should remove the 'f' parameter entirely when no facets remain" do
247
+ facet_params['some_field'] = ['some_value']
248
+
249
+ params = helper.remove_facet_params('some_field', 'some_value')
250
+
251
+ expect(params).not_to include :f
252
+ end
253
+ end
254
+ end
@@ -1,12 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Blacklight do
4
+
4
5
  context 'root' do
6
+
5
7
  let(:blroot) { File.expand_path(File.join(__FILE__, '..', '..', '..' )) }
6
8
 
7
9
  it 'should return the full path to the BL plugin' do
8
10
  expect(Blacklight.root).to eq blroot
9
11
  end
12
+
10
13
  end
11
14
 
12
15
  describe '.default_index' do
@@ -15,7 +18,7 @@ describe Blacklight do
15
18
  allow(Blacklight).to receive(:connection_config).and_return(adapter: 'solr')
16
19
  end
17
20
 
18
- it 'is an instance of Blacklight::SolrRepository' do
21
+ it 'is an instance of Blacklight::Solr::Repository' do
19
22
  expect(Blacklight.default_index).to be_a Blacklight::Solr::Repository
20
23
  end
21
24
  end
@@ -38,7 +41,7 @@ describe Blacklight do
38
41
  allow(Blacklight).to receive(:connection_config).and_return(adapter: 'elastic_search')
39
42
  end
40
43
 
41
- it 'resolves to the ElasticSearch::Repository implementation' do
44
+ it 'resolves to the SolrRepository implementation' do
42
45
  expect(Blacklight.repository_class).to eq Blacklight::ElasticSearch::Repository
43
46
  end
44
47
  end
@@ -60,4 +63,5 @@ describe Blacklight do
60
63
  expect(Blacklight.default_configuration).to be_a Blacklight::Configuration
61
64
  end
62
65
  end
66
+
63
67
  end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe Blacklight::Configuration::Context do
4
+
5
+ subject { described_class.new(context) }
6
+ let(:context) { double }
7
+
8
+ describe "#evaluate_configuration_conditional" do
9
+ it "should pass through regular values" do
10
+ val = double
11
+ expect(subject.evaluate_configuration_conditional(val)).to eq val
12
+ end
13
+
14
+ it "should execute a helper method" do
15
+ allow(context).to receive_messages(:my_check => true)
16
+ expect(subject.evaluate_configuration_conditional(:my_check)).to be true
17
+ end
18
+
19
+ it "should call a helper to determine if it should render a field" do
20
+ a = double
21
+ allow(context).to receive(:my_check_with_an_arg).with(a).and_return(true)
22
+ expect(subject.evaluate_configuration_conditional(:my_check_with_an_arg, a)).to be true
23
+ end
24
+
25
+ it "should evaluate a Proc to determine if it should render a field" do
26
+ one_arg_lambda = lambda { |context, a| true }
27
+ two_arg_lambda = lambda { |context, a, b| true }
28
+ expect(subject.evaluate_configuration_conditional(one_arg_lambda, 1)).to be true
29
+ expect(subject.evaluate_configuration_conditional(two_arg_lambda, 1, 2)).to be true
30
+ end
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Blacklight::Document::ActiveModelShim' do
4
+
5
+ class MockDocument
6
+ include Blacklight::Document
7
+ include Blacklight::Document::ActiveModelShim
8
+ end
9
+
10
+ class MockResponse
11
+ attr_reader :response, :params
12
+
13
+ def initialize(response, params)
14
+ @response = response
15
+ @params = params
16
+ end
17
+
18
+ def documents
19
+ response.collect {|doc| MockDocument.new(doc, self)}
20
+ end
21
+ end
22
+
23
+ before do
24
+ allow(MockDocument.repository).to receive(:find).and_return(MockResponse.new([{id: 1}], {}))
25
+ end
26
+
27
+ describe "#find" do
28
+ it "should return a document from the repository" do
29
+ expect(MockDocument.find(1)).to be_a MockDocument
30
+ expect(MockDocument.find(1).id).to be 1
31
+ end
32
+ end
33
+ end
@@ -59,4 +59,32 @@ describe Blacklight::Document do
59
59
  end
60
60
  end
61
61
  end
62
- end
62
+
63
+ describe "#to_global_id" do
64
+ class MockDocument
65
+ include Blacklight::Document
66
+ include Blacklight::Document::ActiveModelShim
67
+ end
68
+
69
+ class MockResponse
70
+ attr_reader :response, :params
71
+
72
+ def initialize(response, params)
73
+ @response = response
74
+ @params = params
75
+ end
76
+
77
+ def documents
78
+ response.collect {|doc| MockDocument.new(doc, self)}
79
+ end
80
+ end
81
+
82
+ before do
83
+ allow(MockDocument.repository).to receive(:find).and_return(MockResponse.new([{id: 1}], {}))
84
+ end
85
+
86
+ it "should have a globalid" do
87
+ expect(MockDocument.find(1).to_global_id).to be_a GlobalID
88
+ end
89
+ end
90
+ end
@@ -68,25 +68,26 @@ describe Blacklight::FacetPaginator do
68
68
  expect(click_params[ sort_key ]).to eq 'count'
69
69
  expect(click_params[ page_key ]).to be_nil
70
70
  end
71
- end
72
71
 
73
- context "for a nil :limit" do
74
- let(:paginator) { described_class.new(seven_facet_values, offset: 0, limit: nil) }
72
+ context 'when sorting by "count"' do
73
+ subject { described_class.new([]) }
75
74
 
76
- describe "#items" do
77
- subject { paginator.items }
78
- it { is_expected.to eq seven_facet_values }
79
- end
75
+ it 'includes the prefix filter for "index" sorting' do
76
+ expect(subject.params_for_resort_url('index', :'facet.prefix' => 'A')).to include :'facet.prefix' => 'A'
77
+ end
80
78
 
81
- describe "#last_page?" do
82
- subject { paginator.last_page? }
83
- it { is_expected.to be true }
79
+ it 'removes the prefix filter' do
80
+ expect(subject.params_for_resort_url('count', :'facet.prefix' => 'A')).not_to include :'facet.prefix' => 'A'
81
+ end
84
82
  end
83
+ end
85
84
 
86
- describe "#current_page" do
87
- subject { paginator.current_page }
88
- it { is_expected.to eq 1 }
85
+ context "for a nil :limit" do
86
+ subject { described_class.new(seven_facet_values, offset: 0, limit: nil) }
87
+ it "should return all the items" do
88
+ expect(subject.items).to eq seven_facet_values
89
89
  end
90
+ it { should be_last_page }
90
91
  end
91
92
 
92
93
  describe "#as_json" do