blacklight 3.1.2 → 3.2.0pre1
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.
- data/.gitignore +5 -2
- data/README.md +7 -2
- data/VERSION +1 -1
- data/app/assets/images/favicon.ico +0 -0
- data/app/assets/javascripts/blacklight/blacklight.js +23 -1
- data/app/assets/stylesheets/blacklight/_catalog.css.scss +369 -0
- data/app/assets/stylesheets/blacklight/_facets.css.scss +117 -0
- data/app/assets/stylesheets/blacklight/_folder.css.scss +38 -0
- data/app/assets/stylesheets/blacklight/_formatting.css.scss +164 -0
- data/app/assets/stylesheets/blacklight/_header.css.scss +36 -0
- data/app/assets/stylesheets/blacklight/_layout.css.scss +79 -0
- data/app/assets/stylesheets/blacklight/_print.css.scss +54 -0
- data/app/assets/stylesheets/blacklight/_search_history.css.scss +44 -0
- data/app/assets/stylesheets/blacklight/_susy_framework.css.scss +228 -0
- data/app/assets/stylesheets/blacklight/blacklight.css.scss +27 -0
- data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +48 -0
- data/app/controllers/bookmarks_controller.rb +2 -1
- data/app/controllers/folder_controller.rb +4 -0
- data/app/controllers/saved_searches_controller.rb +4 -0
- data/app/controllers/search_history_controller.rb +4 -0
- data/app/helpers/blacklight/blacklight_helper_behavior.rb +64 -104
- data/app/helpers/blacklight/catalog_helper_behavior.rb +4 -4
- data/app/helpers/blacklight/facets_helper_behavior.rb +52 -5
- data/app/helpers/blacklight/render_constraints_helper_behavior.rb +14 -59
- data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +56 -0
- data/app/helpers/search_history_constraints_helper.rb +3 -0
- data/app/models/record_mailer.rb +1 -2
- data/app/views/_flash_msg.html.erb +4 -5
- data/app/views/_user_util_links.html.erb +3 -1
- data/app/views/bookmarks/index.html.erb +2 -2
- data/app/views/catalog/_bookmark_control.html.erb +6 -6
- data/app/views/catalog/_facet_layout.html.erb +4 -0
- data/app/views/catalog/_facet_limit.html.erb +20 -33
- data/app/views/catalog/_facets.html.erb +1 -5
- data/app/views/catalog/_folder_control.html.erb +5 -5
- data/app/views/catalog/_index_default.html.erb +1 -1
- data/app/views/catalog/_search_form.html.erb +4 -3
- data/app/views/catalog/_show_default.html.erb +1 -1
- data/app/views/catalog/_show_tools.html.erb +6 -6
- data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
- data/app/views/catalog/index.atom.builder +2 -2
- data/app/views/catalog/index.rss.builder +1 -1
- data/app/views/catalog/opensearch.xml.builder +10 -0
- data/app/views/catalog/show.html.erb +1 -1
- data/app/views/folder/_tools.html.erb +4 -4
- data/app/views/layouts/blacklight.html.erb +25 -37
- data/app/views/record_mailer/email_record.text.erb +1 -1
- data/app/views/record_mailer/sms_record.text.erb +2 -2
- data/app/views/search_history/index.html.erb +1 -1
- data/blacklight.gemspec +11 -9
- data/lib/{generators/blacklight/templates/SolrMarc.jar → SolrMarc.jar} +0 -0
- data/lib/blacklight.rb +5 -3
- data/lib/blacklight/catalog.rb +3 -4
- data/lib/blacklight/configurable.rb +54 -39
- data/lib/blacklight/configuration.rb +126 -0
- data/lib/blacklight/configuration/fields.rb +142 -0
- data/lib/blacklight/configuration/search_field.rb +12 -0
- data/lib/blacklight/configuration/solr_field.rb +12 -0
- data/lib/blacklight/configuration/sort_field.rb +17 -0
- data/lib/blacklight/controller.rb +16 -14
- data/lib/blacklight/engine.rb +1 -1
- data/lib/blacklight/global_configurable.rb +46 -0
- data/lib/blacklight/search_fields.rb +21 -54
- data/lib/blacklight/solr/document.rb +13 -3
- data/lib/blacklight/solr_helper.rb +88 -52
- data/lib/blacklight/utils.rb +18 -0
- data/lib/generators/blacklight/assets_generator.rb +14 -20
- data/lib/generators/blacklight/blacklight_generator.rb +14 -6
- data/lib/generators/blacklight/jetty_generator.rb +1 -1
- data/lib/generators/blacklight/templates/assets/standard.css.scss +51 -0
- data/lib/generators/blacklight/templates/catalog_controller.rb +148 -0
- data/lib/generators/blacklight/templates/config/blacklight_config.rb +2 -239
- data/lib/generators/blacklight/templates/config/sass.rb +5 -0
- data/lib/generators/blacklight/templates/solr_conf/schema.xml +514 -164
- data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +1591 -323
- data/lib/generators/blacklight/templates/solr_document.rb +2 -0
- data/lib/railties/all_tests.rake +36 -3
- data/lib/railties/blacklight_cucumber.rake +6 -4
- data/lib/railties/blacklight_rspec.rake +5 -4
- data/test_support/bin/run-tests.sh +2 -13
- data/test_support/bin/test.sh +30 -23
- data/test_support/features/did_you_mean.feature +14 -13
- data/test_support/features/step_definitions/saved_searches_steps.rb +1 -1
- data/test_support/features/step_definitions/search_steps.rb +4 -4
- data/test_support/spec/controllers/application_controller_spec.rb +3 -13
- data/test_support/spec/controllers/catalog_controller_spec.rb +102 -24
- data/test_support/spec/controllers/folder_controller_spec.rb +7 -1
- data/test_support/spec/helpers/blacklight_helper_spec.rb +45 -34
- data/test_support/spec/helpers/facets_helper_spec.rb +68 -0
- data/test_support/spec/helpers/html_head_helper_spec.rb +37 -0
- data/test_support/spec/helpers/{render_constraints_helper_spec.rb → search_history_constraints_helper_spec.rb} +26 -7
- data/test_support/spec/lib/blacklight_configurable_spec.rb +92 -0
- data/test_support/spec/lib/blacklight_configuration_spec.rb +295 -0
- data/test_support/spec/lib/{configurable_spec.rb → global_configurable_spec.rb} +2 -2
- data/test_support/spec/lib/search_fields_spec.rb +26 -29
- data/test_support/spec/{helpers → lib}/solr_helper_spec.rb +268 -287
- data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +1 -1
- data/test_support/spec/lib/utils_spec.rb +58 -0
- data/test_support/spec/models/solr_docment_spec.rb +4 -8
- data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +27 -170
- data/test_support/spec/views/catalog/_index_default.erb_spec.rb +38 -20
- data/test_support/spec/views/catalog/_show_default.erb_spec.rb +38 -19
- data/test_support/spec/views/catalog/index.atom.builder_spec.rb +19 -1
- metadata +148 -145
- data/app/assets/stylesheets/blacklight/blacklight.css +0 -493
- data/app/assets/stylesheets/yui.css +0 -31
- data/app/views/catalog/opensearch.xml.erb +0 -11
- data/doc/Atom-Responses.md +0 -90
- data/doc/CUSTOMIZING.md +0 -121
- data/doc/Extending-blacklight-with-the-document-extension-framework.md +0 -1
- data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -131
- data/doc/Features.md +0 -147
- data/doc/Integration-with-Rails-Footnotes.md +0 -20
- data/doc/Pagination.md +0 -38
- data/doc/Quickstart.md +0 -97
- data/doc/Upgrading-Guide.md +0 -98
- data/doc/User-Authentication.md +0 -54
- data/doc/Using-a-custom-solr-uniquekey-field.md +0 -36
- data/lib/blacklight/comma_link_renderer.rb +0 -28
- data/lib/railties/jetty_solr_server.rb +0 -108
- data/test_support/spec/views/catalog/show.html.erb_spec.rb +0 -101
|
@@ -6,6 +6,12 @@ describe FolderController do
|
|
|
6
6
|
end
|
|
7
7
|
|
|
8
8
|
it "should add items to list" do
|
|
9
|
+
@mock_response = mock()
|
|
10
|
+
@mock_document = mock()
|
|
11
|
+
@mock_document2 = mock()
|
|
12
|
+
@mock_document.stub(:export_formats => {})
|
|
13
|
+
controller.stub(:get_solr_response_for_field_values => [@mock_response, [@mock_document, @mock_document2]])
|
|
14
|
+
|
|
9
15
|
get :update, :id =>"77826928"
|
|
10
16
|
session[:folder_document_ids].length.should == 1
|
|
11
17
|
get :update, :id => "94120425"
|
|
@@ -13,7 +19,7 @@ describe FolderController do
|
|
|
13
19
|
session[:folder_document_ids].should include("77826928")
|
|
14
20
|
get :index
|
|
15
21
|
assigns[:documents].length.should == 2
|
|
16
|
-
assigns[:documents].first.should
|
|
22
|
+
assigns[:documents].first.should == @mock_document
|
|
17
23
|
end
|
|
18
24
|
it "should delete an item from list" do
|
|
19
25
|
get :update, :id =>"77826928"
|
|
@@ -62,10 +62,35 @@ def exportable_record
|
|
|
62
62
|
</datafield>
|
|
63
63
|
</record>"
|
|
64
64
|
end
|
|
65
|
+
|
|
65
66
|
describe BlacklightHelper do
|
|
66
67
|
include ERB::Util
|
|
67
68
|
include BlacklightHelper
|
|
68
|
-
|
|
69
|
+
def blacklight_config
|
|
70
|
+
@config ||= Blacklight::Configuration.new.configure do |config|
|
|
71
|
+
config.show.html_title = "title_display"
|
|
72
|
+
config.show.heading = "title_display"
|
|
73
|
+
config.show.display_type = 'format'
|
|
74
|
+
|
|
75
|
+
config.index.show_link = 'title_display'
|
|
76
|
+
config.index.record_display_type = 'format'
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
#CatalogController.blacklight_config
|
|
80
|
+
#@config ||= {:show => {:html_title => 'title_display', :heading => 'title_display', :display_type => 'format'}, :index => { :show_link => 'title_display', :record_display_type => 'format' } }
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
describe "#application_name", :test => true do
|
|
84
|
+
it "should use the Rails application config application_name if available" do
|
|
85
|
+
Rails.application.config.stub(:application_name => 'asdf')
|
|
86
|
+
Rails.application.config.should_receive(:respond_to?).with(:application_name).and_return(true)
|
|
87
|
+
application_name.should == 'asdf'
|
|
88
|
+
end
|
|
89
|
+
it "should default to 'Blacklight'" do
|
|
90
|
+
application_name.should == "Blacklight"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
69
94
|
describe "link_back_to_catalog" do
|
|
70
95
|
before(:all) do
|
|
71
96
|
@query_params = {:q => "query", :f => "facets", :per_page => "10", :page => "2"}
|
|
@@ -80,18 +105,6 @@ describe BlacklightHelper do
|
|
|
80
105
|
end
|
|
81
106
|
end
|
|
82
107
|
|
|
83
|
-
describe "link_to_with_data" do
|
|
84
|
-
it "should generate proper tag for :put and with single :data key and value" do
|
|
85
|
-
assert_dom_equal(
|
|
86
|
-
"<a href='http://www.example.com' onclick=\"var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = 'POST'; f.action = this.href;if(event.metaKey || event.ctrlKey){f.target = '_blank';};var d = document.createElement('input'); d.setAttribute('type', 'hidden'); d.setAttribute('name', 'key'); d.setAttribute('value', 'value'); f.appendChild(d);var m = document.createElement('input'); m.setAttribute('type', 'hidden'); m.setAttribute('name', '_method'); m.setAttribute('value', 'put'); f.appendChild(m);f.submit();return false;\">Foo</a>",
|
|
87
|
-
link_to_with_data("Foo", "http://www.example.com", :method => :put, :data => {:key => "value"})
|
|
88
|
-
)
|
|
89
|
-
end
|
|
90
|
-
it "should be html_safe" do
|
|
91
|
-
link_to_with_data("Foo", "http://www.example.com", :method => :put, :data => {:key => "value"}).html_safe?.should == true
|
|
92
|
-
end
|
|
93
|
-
end
|
|
94
|
-
|
|
95
108
|
describe "link_to_query" do
|
|
96
109
|
it "should build a link tag to catalog using query string (no other params)" do
|
|
97
110
|
query = "brilliant"
|
|
@@ -122,13 +135,13 @@ describe BlacklightHelper do
|
|
|
122
135
|
end
|
|
123
136
|
end
|
|
124
137
|
|
|
125
|
-
describe "search_as_hidden_fields" do
|
|
138
|
+
describe "search_as_hidden_fields", :asdf => true do
|
|
126
139
|
def params
|
|
127
|
-
{:q => "query", :sort => "sort", :per_page => "20", :search_field => "search_field", :page => 100, :arbitrary_key => "arbitrary_value", :f => {"field" => ["value1", "value2"]}, :controller => "catalog", :action => "index", :commit => "search"}
|
|
140
|
+
{:q => "query", :sort => "sort", :per_page => "20", :search_field => "search_field", :page => 100, :arbitrary_key => "arbitrary_value", :f => {"field" => ["value1", "value2"], "other_field" => ['asdf']}, :controller => "catalog", :action => "index", :commit => "search"}
|
|
128
141
|
end
|
|
129
142
|
describe "for default arguments" do
|
|
130
143
|
it "should default to omitting :page" do
|
|
131
|
-
search_as_hidden_fields.should have_selector("input[type='hidden']", :count =>
|
|
144
|
+
search_as_hidden_fields.should have_selector("input[type='hidden']", :count =>8)
|
|
132
145
|
search_as_hidden_fields.should_not have_selector("input[name='page']")
|
|
133
146
|
end
|
|
134
147
|
it "should not return blacklisted elements" do
|
|
@@ -145,6 +158,12 @@ describe BlacklightHelper do
|
|
|
145
158
|
|
|
146
159
|
generated.should have_selector("input[name=page]")
|
|
147
160
|
end
|
|
161
|
+
|
|
162
|
+
it "should support hash-based deleting" do
|
|
163
|
+
generated = search_as_hidden_fields(:omit_keys => [{:f => 'field' }])
|
|
164
|
+
generated.should have_selector("input[name='f[other_field][]']")
|
|
165
|
+
generated.should_not have_selector("input[name='f[field][]']")
|
|
166
|
+
end
|
|
148
167
|
end
|
|
149
168
|
end
|
|
150
169
|
end
|
|
@@ -169,8 +188,9 @@ describe BlacklightHelper do
|
|
|
169
188
|
end
|
|
170
189
|
|
|
171
190
|
describe "document_heading" do
|
|
191
|
+
|
|
172
192
|
it "should consist of the show heading field when available" do
|
|
173
|
-
@document = SolrDocument.new(
|
|
193
|
+
@document = SolrDocument.new('title_display' => "A Fake Document")
|
|
174
194
|
|
|
175
195
|
document_heading.should == "A Fake Document"
|
|
176
196
|
end
|
|
@@ -183,7 +203,7 @@ describe BlacklightHelper do
|
|
|
183
203
|
|
|
184
204
|
describe "render_document_heading" do
|
|
185
205
|
it "should consist of #document_heading wrapped in a <h1>" do
|
|
186
|
-
@document = SolrDocument.new(
|
|
206
|
+
@document = SolrDocument.new('title_display' => "A Fake Document")
|
|
187
207
|
|
|
188
208
|
render_document_heading.should have_selector("h1", :content => document_heading, :count => 1)
|
|
189
209
|
render_document_heading.html_safe?.should == true
|
|
@@ -223,13 +243,7 @@ describe BlacklightHelper do
|
|
|
223
243
|
@document = SolrDocument.new(data)
|
|
224
244
|
link_to_document(@document, { :label => "title_display" }).should have_selector("a", :content => 'title_display', :count => 1)
|
|
225
245
|
end
|
|
226
|
-
|
|
227
|
-
data = {'id'=>'123456','title_display'=>['654321'] }
|
|
228
|
-
@document = SolrDocument.new(data)
|
|
229
|
-
link = link_to_document(@document, { :label => "Apple's Oranges" })
|
|
230
|
-
link.should match(/'Apple\\'s Oranges'/)
|
|
231
|
-
link.should_not match(/'Apple's Oranges'/)
|
|
232
|
-
end
|
|
246
|
+
|
|
233
247
|
it "should accept and return a Proc" do
|
|
234
248
|
data = {'id'=>'123456','title_display'=>['654321'] }
|
|
235
249
|
@document = SolrDocument.new(data)
|
|
@@ -246,6 +260,12 @@ describe BlacklightHelper do
|
|
|
246
260
|
@document = SolrDocument.new(data)
|
|
247
261
|
link_to_document(@document, { :label => :title_display }).html_safe?.should == true
|
|
248
262
|
end
|
|
263
|
+
|
|
264
|
+
it "should convert the counter parameter into a data- attribute" do
|
|
265
|
+
data = {'id'=>'123456','title_display'=>['654321']}
|
|
266
|
+
@document = SolrDocument.new(data)
|
|
267
|
+
link_to_document(@document, { :label => :title_display, :counter => 5 }).should =~ /data-counter="5"/
|
|
268
|
+
end
|
|
249
269
|
end
|
|
250
270
|
|
|
251
271
|
|
|
@@ -301,13 +321,4 @@ describe BlacklightHelper do
|
|
|
301
321
|
|
|
302
322
|
end
|
|
303
323
|
|
|
304
|
-
describe "convenience methods" do
|
|
305
|
-
it "should handle the case where we don't have a spellmax set in the config" do
|
|
306
|
-
spell_check_max.should == 5
|
|
307
|
-
sm = Blacklight.config[:spell_max]
|
|
308
|
-
Blacklight.config[:spell_max] = nil
|
|
309
|
-
spell_check_max.should == 0
|
|
310
|
-
Blacklight.config[:spell_max] = sm
|
|
311
|
-
end
|
|
312
|
-
end
|
|
313
324
|
end
|
|
@@ -1,6 +1,74 @@
|
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
2
2
|
describe FacetsHelper do
|
|
3
3
|
|
|
4
|
+
describe "render_facet_partials" do
|
|
5
|
+
it "should only render facets with items" do
|
|
6
|
+
a = mock(:items => [1,2])
|
|
7
|
+
b = mock(:items => ['b','c'])
|
|
8
|
+
empty = mock(:items => [])
|
|
9
|
+
|
|
10
|
+
fields = [a,b,empty]
|
|
11
|
+
|
|
12
|
+
helper.should_receive(:render_facet_limit).with(a, {})
|
|
13
|
+
helper.should_receive(:render_facet_limit).with(b, {})
|
|
14
|
+
helper.should_not_receive(:render_facet_limit).with(empty, {})
|
|
15
|
+
helper.render_facet_partials fields
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "should look up facet fields in the response when given strings or symbols" do
|
|
19
|
+
|
|
20
|
+
a = mock(:name => 'a', :items => [1,2])
|
|
21
|
+
|
|
22
|
+
@response = mock()
|
|
23
|
+
@response.should_receive(:facet_by_field_name).with('a') { a }
|
|
24
|
+
helper.should_receive(:render_facet_limit).with(a, {})
|
|
25
|
+
|
|
26
|
+
helper.render_facet_partials ['a']
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
describe "render_facet_limit" do
|
|
31
|
+
before do
|
|
32
|
+
|
|
33
|
+
@config = Blacklight::Configuration.new do |config|
|
|
34
|
+
config.add_facet_field 'basic_field'
|
|
35
|
+
config.add_facet_field 'my_facet_field_with_custom_partial', :partial => 'custom_facet_partial'
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
helper.stub(:blacklight_config => @config)
|
|
39
|
+
@response = mock()
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "should set basic local variables" do
|
|
43
|
+
@mock_facet = mock(:name => 'basic_field')
|
|
44
|
+
helper.should_receive(:render).with(hash_including(:partial => 'facet_limit',
|
|
45
|
+
:locals => {
|
|
46
|
+
:solr_field => 'basic_field',
|
|
47
|
+
:facet_field => helper.blacklight_config.facet_fields['basic_field'],
|
|
48
|
+
:display_facet => @mock_facet }
|
|
49
|
+
))
|
|
50
|
+
helper.render_facet_limit(@mock_facet)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should send a deprecation warning if the method is called using the old-style signature" do
|
|
54
|
+
helper.should_receive(:render_facet_partials).with(['asdf'])
|
|
55
|
+
$stderr.should_receive(:puts)
|
|
56
|
+
helper.render_facet_limit('asdf')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should render a facet _not_ declared in the configuration" do
|
|
60
|
+
@mock_facet = mock(:name => 'asdf')
|
|
61
|
+
helper.should_receive(:render).with(hash_including(:partial => 'facet_limit'))
|
|
62
|
+
helper.render_facet_limit(@mock_facet)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should get the partial name from the configuration" do
|
|
66
|
+
@mock_facet = mock(:name => 'my_facet_field_with_custom_partial')
|
|
67
|
+
helper.should_receive(:render).with(hash_including(:partial => 'custom_facet_partial'))
|
|
68
|
+
helper.render_facet_limit(@mock_facet)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
4
72
|
describe "add_facet_params" do
|
|
5
73
|
before do
|
|
6
74
|
@params_no_existing_facet = {:q => "query", :search_field => "search_field", :per_page => "50"}
|
|
@@ -12,6 +12,7 @@ describe HtmlHeadHelper do
|
|
|
12
12
|
end
|
|
13
13
|
it "should include script tags specified in controller#javascript_includes" do
|
|
14
14
|
html = helper.render_js_includes
|
|
15
|
+
|
|
15
16
|
if use_asset_pipeline?
|
|
16
17
|
html.should have_selector("script[src='/assets/some_js.js'][type='text/javascript']")
|
|
17
18
|
html.should have_selector("script[src='/assets/other_js.js'][type='text/javascript']")
|
|
@@ -35,6 +36,7 @@ describe HtmlHeadHelper do
|
|
|
35
36
|
end
|
|
36
37
|
it "should render stylesheets specified in controller #stylesheet_links" do
|
|
37
38
|
html = helper.render_stylesheet_includes
|
|
39
|
+
|
|
38
40
|
if use_asset_pipeline?
|
|
39
41
|
html.should have_selector("link[href='/assets/my_stylesheet.css'][rel='stylesheet'][type='text/css']")
|
|
40
42
|
html.should have_selector("link[href='/assets/other_stylesheet.css'][rel='stylesheet'][type='text/css']")
|
|
@@ -42,6 +44,7 @@ describe HtmlHeadHelper do
|
|
|
42
44
|
html.should have_selector("link[href='/stylesheets/my_stylesheet.css'][rel='stylesheet'][type='text/css']")
|
|
43
45
|
html.should have_selector("link[href='/stylesheets/other_stylesheet.css'][rel='stylesheet'][type='text/css']")
|
|
44
46
|
end
|
|
47
|
+
|
|
45
48
|
html.html_safe?.should == true
|
|
46
49
|
end
|
|
47
50
|
end
|
|
@@ -72,6 +75,40 @@ describe HtmlHeadHelper do
|
|
|
72
75
|
end
|
|
73
76
|
end
|
|
74
77
|
describe "with methods defined" do
|
|
78
|
+
helper do
|
|
79
|
+
def javascript_includes
|
|
80
|
+
[["my_js"]]
|
|
81
|
+
end
|
|
82
|
+
def stylesheet_links
|
|
83
|
+
[["my_css"]]
|
|
84
|
+
end
|
|
85
|
+
def extra_head_content
|
|
86
|
+
[
|
|
87
|
+
"<madeup_tag></madeup_tag>",
|
|
88
|
+
'<link rel="rel" type="type" href="href">'
|
|
89
|
+
]
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
before(:each) do
|
|
93
|
+
helper.should_receive(:content_for).with(:head).and_return("<meta keywords=\"foo bar\"/>".html_safe)
|
|
94
|
+
@output = helper.render_head_content
|
|
95
|
+
end
|
|
96
|
+
it "should include extra_head_content" do
|
|
97
|
+
@output.should have_selector("madeup_tag")
|
|
98
|
+
@output.should have_selector("link[rel=rel][type=type][href=href]")
|
|
99
|
+
end
|
|
100
|
+
it "should include render_javascript_includes" do
|
|
101
|
+
@output.should have_selector("script[src='/assets/my_js.js'][type='text/javascript']")
|
|
102
|
+
#@output.index( render_js_includes ).should_not be_nil
|
|
103
|
+
end
|
|
104
|
+
it "should include render_stylesheet_links" do
|
|
105
|
+
@output.should have_selector("link[href='/assets/my_css.css'][type='text/css']")
|
|
106
|
+
#@output.index( render_stylesheet_includes ).should_not be_nil
|
|
107
|
+
end
|
|
108
|
+
it "should include content_for :head" do
|
|
109
|
+
@output.should have_selector("meta[keywords]")
|
|
110
|
+
end
|
|
111
|
+
|
|
75
112
|
it "should include all head content" do
|
|
76
113
|
helper.should_receive(:render_extra_head_content).and_return("".html_safe)
|
|
77
114
|
helper.should_receive(:render_js_includes).and_return("".html_safe)
|
|
@@ -1,13 +1,29 @@
|
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
|
2
2
|
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
describe SearchHistoryConstraintsHelper do
|
|
5
|
+
|
|
6
|
+
before(:all) do
|
|
7
|
+
@config = Blacklight::Configuration.from_legacy_configuration({
|
|
8
|
+
:default_search_field => {
|
|
9
|
+
:key => 'default_search_field',
|
|
10
|
+
:display_label => "Default"
|
|
11
|
+
},
|
|
12
|
+
:facet => {
|
|
13
|
+
:field_names => [
|
|
14
|
+
'some_facet',
|
|
15
|
+
'other_facet'
|
|
16
|
+
],
|
|
17
|
+
:labels => {
|
|
18
|
+
'some_facet' => 'Some',
|
|
19
|
+
'other_facet' => 'Other'
|
|
20
|
+
},
|
|
21
|
+
:limits => {
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
})
|
|
25
|
+
end
|
|
26
|
+
|
|
11
27
|
|
|
12
28
|
describe "render_search_to_s_*" do
|
|
13
29
|
describe "render_search_to_s_element" do
|
|
@@ -49,6 +65,9 @@ describe RenderConstraintsHelper do
|
|
|
49
65
|
@params = {:q => "history", :f => {"some_facet" => ["value1", "value1"], "other_facet" => ["other1"]}}
|
|
50
66
|
end
|
|
51
67
|
it "should call lesser methods" do
|
|
68
|
+
helper.stub!(:blacklight_config).and_return(@config)
|
|
69
|
+
helper.stub!(:default_search_field).and_return(Blacklight::Configuration::SearchField.new(:key => 'default_search_field', :display_label => 'Default'))
|
|
70
|
+
helper.should_receive(:label_for_search_field).with(nil).any_number_of_times.and_return('')
|
|
52
71
|
# API hooks expect this to be so
|
|
53
72
|
response = helper.render_search_to_s(@params)
|
|
54
73
|
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
#ste -*- encoding : utf-8 -*-
|
|
2
|
+
# -*- coding: UTF-8 -*-
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
4
|
+
|
|
5
|
+
describe "Blacklight::Configurable" do
|
|
6
|
+
|
|
7
|
+
describe "inheritence" do
|
|
8
|
+
before(:all) do
|
|
9
|
+
module TestCaseInheritence
|
|
10
|
+
class Parent
|
|
11
|
+
include Blacklight::Configurable
|
|
12
|
+
|
|
13
|
+
blacklight_config.configure do |config|
|
|
14
|
+
config.list = [1,2,3]
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
class Child < Parent
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
it "should inherit the configuration when subclassed" do
|
|
23
|
+
TestCaseInheritence::Child.blacklight_config.list.should include(1,2,3)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "inherited version should be a deep copy, not original" do
|
|
27
|
+
TestCaseInheritence::Child.blacklight_config.should_not be(TestCaseInheritence::Parent.blacklight_config)
|
|
28
|
+
|
|
29
|
+
TestCaseInheritence::Child.blacklight_config.list << "child_only"
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
TestCaseInheritence::Child.blacklight_config.list.should include("child_only")
|
|
33
|
+
TestCaseInheritence::Parent.blacklight_config.list.should_not include("child_only")
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
describe "default configuration" do
|
|
38
|
+
before(:each) do
|
|
39
|
+
Blacklight::Configurable.default_configuration = nil
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
after do
|
|
43
|
+
Blacklight::Configurable.default_configuration = nil
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should load an empty configuration" do
|
|
47
|
+
a = Class.new
|
|
48
|
+
a.send(:include, Blacklight::Configurable)
|
|
49
|
+
|
|
50
|
+
a.blacklight_config.default_solr_params.should be_empty
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should allow the user to provide a default configuration" do
|
|
54
|
+
a = Class.new
|
|
55
|
+
|
|
56
|
+
Blacklight::Configurable.default_configuration = Blacklight::Configuration.new :a => 1
|
|
57
|
+
|
|
58
|
+
a.send(:include, Blacklight::Configurable)
|
|
59
|
+
a.blacklight_config.a.should == 1
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "has configure_blacklight convenience method" do
|
|
63
|
+
klass = Class.new
|
|
64
|
+
klass.send(:include, Blacklight::Configurable)
|
|
65
|
+
|
|
66
|
+
klass.configure_blacklight do |config|
|
|
67
|
+
config.my_key = 'value'
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
klass.blacklight_config.my_key.should == 'value'
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it "allows instance to set it's own config seperate from class" do
|
|
74
|
+
# this is built into class_attribute; we spec it both to document it,
|
|
75
|
+
# and to ensure we preserve this feature if we change implementation
|
|
76
|
+
# to not use class_attribute
|
|
77
|
+
klass = Class.new
|
|
78
|
+
klass.send(:include, Blacklight::Configurable)
|
|
79
|
+
klass.blacklight_config.foo = "bar"
|
|
80
|
+
|
|
81
|
+
instance = klass.new
|
|
82
|
+
|
|
83
|
+
instance.blacklight_config = Blacklight::Configuration.new
|
|
84
|
+
|
|
85
|
+
instance.blacklight_config.should_not == klass.blacklight_config
|
|
86
|
+
instance.blacklight_config.foo.should be_nil
|
|
87
|
+
klass.blacklight_config.foo.should == "bar"
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
#ste -*- encoding : utf-8 -*-
|
|
2
|
+
# -*- coding: UTF-8 -*-
|
|
3
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
|
4
|
+
|
|
5
|
+
describe "Blacklight::Configuration" do
|
|
6
|
+
|
|
7
|
+
before(:each) do
|
|
8
|
+
@config = Blacklight::Configuration.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it "should support arbitrary configuration values" do
|
|
12
|
+
@config.a = 1
|
|
13
|
+
|
|
14
|
+
@config.a.should == 1
|
|
15
|
+
@config[:a].should == 1
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
describe "initialization" do
|
|
19
|
+
it "should be an OpenStructWithHashAccess" do
|
|
20
|
+
@config.should be_a_kind_of Blacklight::OpenStructWithHashAccess
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should accept a block for configuration" do
|
|
24
|
+
config = Blacklight::Configuration.new(:a => 1) { |c| c.a = 2 }
|
|
25
|
+
|
|
26
|
+
config.a.should == 2
|
|
27
|
+
|
|
28
|
+
config.configure { |c| c.a = 3 }
|
|
29
|
+
|
|
30
|
+
config.a.should == 3
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
describe "defaults" do
|
|
35
|
+
it "should have a hash of default rsolr query parameters" do
|
|
36
|
+
@config.default_solr_params.should be_a_kind_of Hash
|
|
37
|
+
end
|
|
38
|
+
it "should have openstruct values for show and index parameters" do
|
|
39
|
+
@config.show.should be_a_kind_of OpenStruct
|
|
40
|
+
@config.index.should be_a_kind_of OpenStruct
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "should have ordered hashes for field configuration" do
|
|
44
|
+
@config.facet_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
45
|
+
@config.index_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
46
|
+
@config.show_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
47
|
+
@config.search_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
48
|
+
@config.show_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
49
|
+
@config.search_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
50
|
+
@config.sort_fields.should be_a_kind_of ActiveSupport::OrderedHash
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
describe "spell_max" do
|
|
55
|
+
it "should default to 5" do
|
|
56
|
+
Blacklight::Configuration.new.spell_max.should == 5
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it "should accept config'd value" do
|
|
60
|
+
Blacklight::Configuration.new(:spell_max => 10).spell_max.should == 10
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
describe "inheritable_copy" do
|
|
65
|
+
it "should provide a deep copy of the configuration" do
|
|
66
|
+
config_copy = @config.inheritable_copy
|
|
67
|
+
config_copy.a = 1
|
|
68
|
+
|
|
69
|
+
@mock_facet = Blacklight::Configuration::FacetField.new
|
|
70
|
+
config_copy.add_facet_field "dummy_field", @mock_facet
|
|
71
|
+
|
|
72
|
+
@config.a.should be_nil
|
|
73
|
+
@config.facet_fields.should_not include(@mock_facet)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe "add_facet_field" do
|
|
78
|
+
it "should accept field name and hash form arg" do
|
|
79
|
+
@config.add_facet_field('format', :label => "Format", :limit => true)
|
|
80
|
+
|
|
81
|
+
@config.facet_fields["format"].should_not be_nil
|
|
82
|
+
@config.facet_fields["format"]["label"].should == "Format"
|
|
83
|
+
@config.facet_fields["format"]["limit"].should == true
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
it "should accept FacetField obj arg" do
|
|
87
|
+
@config.add_facet_field("format", Blacklight::Configuration::FacetField.new( :label => "Format"))
|
|
88
|
+
|
|
89
|
+
@config.facet_fields["format"].should_not be_nil
|
|
90
|
+
@config.facet_fields["format"]["label"].should == "Format"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should accept field name and block form" do
|
|
94
|
+
@config.add_facet_field("format") do |facet|
|
|
95
|
+
facet.label = "Format"
|
|
96
|
+
facet.limit = true
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
@config.facet_fields["format"].should_not be_nil
|
|
100
|
+
@config.facet_fields["format"].limit.should == true
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "should accept block form" do
|
|
104
|
+
@config.add_facet_field do |facet|
|
|
105
|
+
facet.field = "format"
|
|
106
|
+
facet.label = "Format"
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
@config.facet_fields['format'].should_not be_nil
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
it "should accept a configuration hash" do
|
|
113
|
+
@config.add_facet_field :field => 'format', :label => 'Format'
|
|
114
|
+
@config.facet_fields['format'].should_not be_nil
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
it "should accept array form" do
|
|
118
|
+
@config.add_facet_field([{ :field => 'format', :label => 'Format'}, { :field => 'publication_date', :label => 'Publication Date' }])
|
|
119
|
+
|
|
120
|
+
@config.facet_fields.length.should == 2
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
it "should create default label from titleized solr field" do
|
|
124
|
+
@config.add_facet_field("publication_date")
|
|
125
|
+
|
|
126
|
+
@config.facet_fields["publication_date"].label.should == "Publication Date"
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
it "should raise on nil solr field name" do
|
|
130
|
+
lambda { @config.add_facet_field(nil) }.should raise_error ArgumentError
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
describe "add_index_field" do
|
|
136
|
+
it "takes hash form" do
|
|
137
|
+
@config.add_index_field("title_display", :label => "Title")
|
|
138
|
+
|
|
139
|
+
@config.index_fields["title_display"].should_not be_nil
|
|
140
|
+
@config.index_fields["title_display"].label.should == "Title"
|
|
141
|
+
end
|
|
142
|
+
it "takes IndexField param" do
|
|
143
|
+
@config.add_index_field("title_display", Blacklight::Configuration::IndexField.new(:field => "title_display", :label => "Title"))
|
|
144
|
+
|
|
145
|
+
@config.index_fields["title_display"].should_not be_nil
|
|
146
|
+
@config.index_fields["title_display"].label.should == "Title"
|
|
147
|
+
end
|
|
148
|
+
it "takes block form" do
|
|
149
|
+
@config.add_index_field("title_display") do |field|
|
|
150
|
+
field.label = "Title"
|
|
151
|
+
end
|
|
152
|
+
@config.index_fields["title_display"].should_not be_nil
|
|
153
|
+
@config.index_fields["title_display"].label.should == "Title"
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
it "creates default label from titleized field" do
|
|
157
|
+
@config.add_index_field("title_display")
|
|
158
|
+
|
|
159
|
+
@config.index_fields["title_display"].label.should == "Title Display"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it "should raise on nil solr field name" do
|
|
163
|
+
lambda { @config.add_index_field(nil) }.should raise_error ArgumentError
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
describe "add_show_field" do
|
|
169
|
+
it "takes hash form" do
|
|
170
|
+
@config.add_show_field("title_display", :label => "Title")
|
|
171
|
+
|
|
172
|
+
@config.show_fields["title_display"].should_not be_nil
|
|
173
|
+
@config.show_fields["title_display"].label.should == "Title"
|
|
174
|
+
end
|
|
175
|
+
it "takes ShowField argument" do
|
|
176
|
+
@config.add_show_field("title_display", Blacklight::Configuration::ShowField.new(:field => "title_display", :label => "Title"))
|
|
177
|
+
|
|
178
|
+
@config.show_fields["title_display"].should_not be_nil
|
|
179
|
+
@config.show_fields["title_display"].label.should == "Title"
|
|
180
|
+
end
|
|
181
|
+
it "takes block form" do
|
|
182
|
+
@config.add_show_field("title_display") do |f|
|
|
183
|
+
f.label = "Title"
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
@config.show_fields["title_display"].should_not be_nil
|
|
187
|
+
@config.show_fields["title_display"].label.should == "Title"
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it "creates default label humanized from field" do
|
|
191
|
+
@config.add_show_field("my_custom_field")
|
|
192
|
+
|
|
193
|
+
@config.show_fields["my_custom_field"].label.should == "My Custom Field"
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
it "should raise on nil solr field name" do
|
|
197
|
+
lambda { @config.add_show_field(nil) }.should raise_error ArgumentError
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
describe "add_search_field" do
|
|
204
|
+
it "should accept hash form" do
|
|
205
|
+
c = Blacklight::Configuration.new
|
|
206
|
+
|
|
207
|
+
c.add_search_field("my_search_type",
|
|
208
|
+
:key => "my_search_type",
|
|
209
|
+
:solr_parameters => { :qf => "my_field_qf^10" },
|
|
210
|
+
:solr_local_parameters => { :pf=>"$my_field_pf"})
|
|
211
|
+
|
|
212
|
+
field = c.search_fields["my_search_type"]
|
|
213
|
+
|
|
214
|
+
field.should_not be_nil
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
field.solr_parameters.should_not be_nil
|
|
218
|
+
field.solr_local_parameters.should_not be_nil
|
|
219
|
+
|
|
220
|
+
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
it "should accept block form" do
|
|
224
|
+
c = Blacklight::Configuration.new
|
|
225
|
+
|
|
226
|
+
c.add_search_field("some_field") do |field|
|
|
227
|
+
field.solr_parameters = {:qf => "solr_field^10"}
|
|
228
|
+
field.solr_local_parameters = {:pf => "$some_field_pf"}
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
f = c.search_fields["some_field"]
|
|
232
|
+
|
|
233
|
+
f.should_not be_nil
|
|
234
|
+
f.solr_parameters.should_not be_nil
|
|
235
|
+
f.solr_local_parameters.should_not be_nil
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
it "should accept SearchField object" do
|
|
239
|
+
c = Blacklight::Configuration.new
|
|
240
|
+
|
|
241
|
+
f = Blacklight::Configuration::SearchField.new( :foo => "bar")
|
|
242
|
+
|
|
243
|
+
c.add_search_field("foo", f)
|
|
244
|
+
|
|
245
|
+
c.search_fields["foo"].should_not be_nil
|
|
246
|
+
end
|
|
247
|
+
|
|
248
|
+
it "should raise on nil key" do
|
|
249
|
+
lambda {@config.add_search_field(nil, :foo => "bar")}.should raise_error ArgumentError
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
it "creates default label from titleized field key" do
|
|
253
|
+
@config.add_search_field("author_name")
|
|
254
|
+
|
|
255
|
+
@config.search_fields["author_name"].label.should == "Author Name"
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
end
|
|
260
|
+
|
|
261
|
+
describe "add_sort_field" do
|
|
262
|
+
it "should take a hash" do
|
|
263
|
+
@config.add_sort_field("score desc, pub_date_sort desc, title_sort asc", :label => "relevance")
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
@config.sort_fields.values.find{|f| f.label == "relevance"}.should_not be_nil
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
it "should take a SortField object" do
|
|
270
|
+
@config.add_sort_field(Blacklight::Configuration::SortField.new(:label => "relevance", :sort => "score desc, pub_date_sort desc, title_sort asc"
|
|
271
|
+
))
|
|
272
|
+
@config.sort_fields.values.find{|f| f.label == "relevance"}.should_not be_nil
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
it "should take block form" do
|
|
276
|
+
@config.add_sort_field do |field|
|
|
277
|
+
field.label = "relevance"
|
|
278
|
+
field.sort = "score desc, pub_date_sort desc, title_sort asc"
|
|
279
|
+
end
|
|
280
|
+
|
|
281
|
+
@config.sort_fields.values.find{|f| f.label == "relevance"}.should_not be_nil
|
|
282
|
+
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
describe "#default_search_field" do
|
|
287
|
+
it "should use the field with a :default key" do
|
|
288
|
+
@config.add_search_field('search_field_1')
|
|
289
|
+
@config.add_search_field('search_field_2', :default => true)
|
|
290
|
+
|
|
291
|
+
@config.default_search_field.key.should == 'search_field_2'
|
|
292
|
+
end
|
|
293
|
+
end
|
|
294
|
+
|
|
295
|
+
end
|