blacklight 4.0.1 → 4.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. checksums.yaml +6 -6
  2. checksums.yaml.gz.sig +2 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +1 -0
  5. data/.travis.yml +14 -6
  6. data/Gemfile +2 -3
  7. data/README.md +3 -1
  8. data/VERSION +1 -1
  9. data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +1 -0
  10. data/app/assets/stylesheets/blacklight/_dropdown.css.scss +2 -1
  11. data/app/assets/stylesheets/blacklight/_search_history.css.scss +1 -1
  12. data/app/assets/stylesheets/blacklight/blacklight.css.scss +2 -0
  13. data/app/assets/stylesheets/improved-modal/bootstrap-modal.css +2 -0
  14. data/app/helpers/blacklight/blacklight_helper_behavior.rb +199 -48
  15. data/app/helpers/blacklight/catalog_helper_behavior.rb +1 -1
  16. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +1 -1
  17. data/app/views/catalog/_document_header.html.erb +1 -1
  18. data/app/views/catalog/_index_default.html.erb +3 -3
  19. data/app/views/catalog/_per_page_widget.html.erb +1 -1
  20. data/app/views/catalog/_show_default.html.erb +3 -3
  21. data/app/views/catalog/_sort_widget.html.erb +1 -1
  22. data/app/views/catalog/show.html.erb +29 -32
  23. data/app/views/layouts/blacklight.html.erb +1 -1
  24. data/blacklight.gemspec +1 -1
  25. data/config/locales/blacklight.fr.yml +236 -0
  26. data/gemfiles/rails3.gemfile +9 -0
  27. data/gemfiles/rails4.gemfile +10 -0
  28. data/lib/blacklight/catalog.rb +22 -10
  29. data/lib/blacklight/configurable.rb +2 -3
  30. data/lib/blacklight/configuration/fields.rb +5 -4
  31. data/lib/blacklight/mash.rb +7 -139
  32. data/lib/blacklight/routes.rb +19 -18
  33. data/lib/blacklight/solr_helper.rb +14 -11
  34. data/lib/blacklight/solr_response.rb +1 -1
  35. data/lib/generators/blacklight/blacklight_generator.rb +9 -1
  36. data/lib/generators/blacklight/test_support_generator.rb +15 -0
  37. data/test_support/bin/setup-test-app.sh +8 -12
  38. data/test_support/bin/test.sh +20 -24
  39. data/test_support/features/search.feature +0 -3
  40. data/test_support/features/search_pagination.feature +53 -0
  41. data/test_support/features/step_definitions/search_pagination_steps.rb +29 -0
  42. data/test_support/features/step_definitions/search_steps.rb +0 -11
  43. data/test_support/spec/controllers/catalog_controller_spec.rb +15 -80
  44. data/test_support/spec/helpers/blacklight_helper_spec.rb +75 -22
  45. data/test_support/spec/helpers/catalog_helper_spec.rb +8 -1
  46. data/test_support/spec/helpers/html_head_helper_spec.rb +21 -7
  47. data/test_support/spec/lib/blacklight_configurable_spec.rb +18 -4
  48. data/test_support/spec/lib/blacklight_configuration_spec.rb +28 -0
  49. data/test_support/spec/lib/solr_helper_spec.rb +14 -4
  50. data/test_support/spec/routing/catalog_routing_spec.rb +67 -0
  51. data/test_support/spec/views/catalog/index.atom.builder_spec.rb +3 -7
  52. metadata +42 -15
  53. metadata.gz.sig +0 -0
@@ -30,13 +30,10 @@ Feature: Search
30
30
  And I should see "All Fields"
31
31
  And I should see "history"
32
32
  And I should see select list "select#search_field" with "All Fields" selected
33
- And I should see "per page"
34
- And I should see a selectable list with per page choices
35
33
  And I should see "1."
36
34
  And I should see "2."
37
35
  And I should see "3."
38
36
  And I should see "Sort by"
39
-
40
37
 
41
38
  Scenario: Submitting a Search with specific field selected
42
39
  When I am on the home page
@@ -0,0 +1,53 @@
1
+ @search_pagination
2
+ Feature: Search Pagination
3
+ In order to find lower ranked documents
4
+ As a user
5
+ I want to be able to page through search results and be able to choose how
6
+ many documents to display per page
7
+
8
+ Background:
9
+ Given the application is configured to have per page with values "10, 20, 50"
10
+
11
+ Scenario: Results Page Supports Paging
12
+ Given I am on the home page
13
+ When I fill in "q" with ""
14
+ And I press "search"
15
+ Then I should see "1 - 10 of"
16
+ When I follow "Next »"
17
+ Then I should see "11 - 20 of"
18
+ When I follow "« Previous"
19
+ Then I should see "1 - 10 of"
20
+
21
+ Scenario: Results Page Has Per Page Available
22
+ Given I am on the home page
23
+ When I fill in "q" with ""
24
+ And I press "search"
25
+ Then I should see "per page"
26
+ And I should see the per_page dropdown with values "10, 20, 50"
27
+
28
+ Scenario: Results Page Can Display 20 Items Per Page
29
+ Given I am on the home page
30
+ And I fill in "q" with ""
31
+ When I press "search"
32
+ Then I should see "1 - 10 of"
33
+ When I show 20 per page
34
+ Then I should see "1 - 20 of"
35
+
36
+ Scenario: Application Can Be Configured for Other Per Page Values
37
+ Given the application is configured to have per page with values "15, 30"
38
+ And I am on the home page
39
+ When I fill in "q" with ""
40
+ And I press "search"
41
+ Then I should see the per_page dropdown with values "15, 30"
42
+ And I should see "1 - 15 of"
43
+ When I show 30 per page
44
+ Then I should see "1 - 30 of"
45
+
46
+ Scenario: Page Offset Resets to 1 When Changing Per Page
47
+ Given I am on the home page
48
+ And I fill in "q" with ""
49
+ When I press "search"
50
+ And I follow "Next »"
51
+ Then I should see "11 - 20 of"
52
+ When I show 20 per page
53
+ Then I should see "1 - 20 of"
@@ -0,0 +1,29 @@
1
+ # -*- encoding : utf-8 -*-
2
+ Given /^the application is configured to have per page with values "([^\"]*)"$/ do |values|
3
+ values = values.split(", ")
4
+ CatalogController.blacklight_config[:per_page] = []
5
+ values.each do |value|
6
+ CatalogController.blacklight_config[:per_page] << value
7
+ end
8
+ CatalogController.blacklight_config[:default_solr_params][:rows] = values[0]
9
+ end
10
+
11
+
12
+ Then /^I should see a selectable list with per page choices$/ do
13
+ page.should have_selector("#per_page-dropdown")
14
+ end
15
+
16
+ Then /^I should see the per_page dropdown with values "(.*?)"$/ do |arg1|
17
+ page.should have_selector('#per_page-dropdown') do
18
+ labels = values.split(", ")
19
+ labels.each do |label|
20
+ with_tag('li', label)
21
+ end
22
+ end
23
+ end
24
+
25
+ When /^I show (\d+) per page$/ do |value|
26
+ within('#per_page-dropdown .css-dropdown ul') do
27
+ click_link("#{value} per page")
28
+ end
29
+ end
@@ -8,17 +8,6 @@ Then /^I should see a selectable list with field choices$/ do
8
8
  page.should have_selector("select#search_field")
9
9
  end
10
10
 
11
- Then /^I should see a selectable list with per page choices$/ do
12
- page.should have_selector("#per_page-dropdown")
13
- end
14
-
15
-
16
- When /^I show (\d+) per page$/ do |value|
17
- page.should have_selector('#per_page-dropdown') do
18
- click_link(value)
19
- end
20
- end
21
-
22
11
  Then /^I should see the sort dropdown$/ do
23
12
  page.should have_selector("#sort-dropdown")
24
13
  end
@@ -5,83 +5,6 @@ require 'marc'
5
5
 
6
6
  describe CatalogController do
7
7
  include Devise::TestHelpers
8
- #=begin
9
- # ROUTES and MAPPING
10
- describe "Paths Generated by Custom Routes:" do
11
- # paths generated by custom routes
12
- it "should map {:controller => 'catalog', :action => 'email'} to /catalog/email" do
13
- # RSpec <1.2.9: route_for(:controller => 'catalog', :action => 'email').should == '/catalog/email'
14
- { :get => "/catalog/email" }.should route_to(:controller => 'catalog', :action => 'email')
15
-
16
- end
17
- it "should map {:controller => 'catalog', :action => 'sms'} to /catalog/sms" do
18
- # RSpec <1.2.9: route_for(:controller => 'catalog', :action => 'sms').should == '/catalog/sms'
19
- { :get => "/catalog/sms" }.should route_to(:controller => 'catalog', :action => 'sms')
20
- end
21
- it "should map { :controller => 'catalog', :action => 'show', :id => 666 } to /catalog/666" do
22
- # RSpec <1.2.9: route_for(:controller => 'catalog', :action => 'show', :id => '666').should == '/catalog/666'
23
- { :get => "/catalog/666" }.should route_to(:controller => 'catalog', :action => 'show', :id => "666")
24
- end
25
- it "should map {:controller => 'catalog', :id => '111', :action => 'librarian_view'} to /catalog/111/librarian_view" do
26
- # RSpec <1.2.9: route_for(:controller => 'catalog', :action => 'librarian_view', :id => '111').should == '/catalog/111/librarian_view'
27
- { :get => "/catalog/111/librarian_view" }.should route_to(:controller => 'catalog', :action => 'librarian_view', :id => "111")
28
- end
29
- end
30
-
31
- # parameters generated from routes
32
- describe "Parameters Generated from Routes:" do
33
- it "should map /catalog/email to {:controller => 'catalog', :action => 'email'}" do
34
- # RSpec <1.2.9: params_from(:get, '/catalog/email').should == {:controller => 'catalog', :action => 'email'}
35
- { :get => "/catalog/email" }.should route_to(:controller => 'catalog', :action => 'email')
36
- end
37
- it "should map /catalog/sms to {:controller => 'catalog', :action => 'sms'}" do
38
- #RSpec <1.2.9 :params_from(:get, '/catalog/sms').should == {:controller => 'catalog', :action => 'sms'}
39
- { :get => "/catalog/sms" }.should route_to(:controller => 'catalog', :action => 'sms')
40
- end
41
- it "should map /catalog/666 to {:controller => 'catalog', :action => 'show', :id => 666}" do
42
- #RSPEC <1.2.9 params_from(:get, '/catalog/666').should == {:controller => 'catalog', :action => 'show', :id => '666'}
43
- { :get => "/catalog/666" }.should route_to(:controller => 'catalog', :action => 'show', :id => "666")
44
- end
45
- it "should map /catalog/111/librarian_view to {:controller => 'catalog', :action => 'librarian_view', :id => 111}" do
46
- # params_from(:get, '/catalog/111/librarian_view').should == {:controller => 'catalog', :action => 'librarian_view', :id => '111'}
47
- { :get => "/catalog/111/librarian_view" }.should route_to(:controller => 'catalog', :action => 'librarian_view', :id => "111")
48
- end
49
- end
50
-
51
- describe "catalog_url for SolrDocument", :test => true do
52
- it "should route correctly" do
53
- { :get => catalog_url(SolrDocument.new(:id => 'asdf')) }.should route_to(:controller => 'catalog', :action => 'show', :id => 'asdf')
54
- end
55
-
56
- context "should escape solr document ids" do
57
-
58
- it "should pass-through url-valid ids" do
59
- { :get => catalog_url(SolrDocument.new(:id => 'qwerty'))}.should route_to(:controller => 'catalog', :action => 'show', :id => 'qwerty')
60
- end
61
-
62
- it "should route url-like ids" do
63
- pending "This works if you configure your routing to have very liberal constraints on :id.. not sure how to go about testing it though"
64
- { :get => catalog_url(SolrDocument.new(:id => 'http://example.com'))}.should route_to(:controller => 'catalog', :action => 'show', :id => 'http://example.com')
65
- end
66
-
67
- it "should route ids with whitespace" do
68
- { :get => catalog_url(SolrDocument.new(:id => 'mm 123')) }.should route_to(:controller => 'catalog', :action => 'show', :id => 'mm 123')
69
- end
70
-
71
- it "should route ids with a literal '+'" do
72
- { :get => catalog_url(SolrDocument.new(:id => 'this+that')) }.should route_to(:controller => 'catalog', :action => 'show', :id => 'this+that')
73
- end
74
-
75
- it "should route ids with a literal '/" do
76
- pending "This works if you configure your routing to have very liberal constraints on :id.. not sure how to go about testing it though"
77
- { :get => catalog_url(SolrDocument.new(:id => 'and/or')) }.should route_to(:controller => 'catalog', :action => 'show', :id => 'and/or')
78
- end
79
- end
80
-
81
- end
82
-
83
-
84
-
85
8
  # INDEX ACTION
86
9
  describe "index action" do
87
10
  before(:each) do
@@ -452,18 +375,30 @@ describe CatalogController do
452
375
  response.should_not be_success
453
376
  response.status.should == 404
454
377
  end
455
- it "should return a status 500 for a bad search" do
378
+ it "should redirect the user to the root url for a bad search" do
456
379
  req = {}
457
380
  res = {}
458
381
  fake_error = RSolr::Error::Http.new(req, res)
459
382
  controller.stub(:get_search_results) { |*args| raise fake_error }
460
383
  controller.logger.should_receive(:error).with(fake_error)
461
384
  get :index, :q=>"+"
385
+
462
386
  response.redirect_url.should == root_url
463
387
  request.flash[:notice].should == "Sorry, I don't understand your search."
464
388
  response.should_not be_success
465
- response.status.should == 500
466
- response.should render_template(:file=>"#{Rails.root}/public/500.html")
389
+ response.status.should == 302
390
+ end
391
+ it "should return status 500 if the catalog path is raising an exception" do
392
+
393
+ req = {}
394
+ res = {}
395
+ fake_error = RSolr::Error::Http.new(req, res)
396
+ controller.stub(:get_search_results) { |*args| raise fake_error }
397
+ controller.flash.stub!(:sweep)
398
+ controller.stub(:flash).and_return(:notice => I18n.t('blacklight.search.errors.request_error'))
399
+ expect {
400
+ get :index, :q=>"+"
401
+ }.to raise_error
467
402
  end
468
403
 
469
404
  end
@@ -146,35 +146,88 @@ describe BlacklightHelper do
146
146
  end
147
147
  end
148
148
 
149
- describe "search_as_hidden_fields", :asdf => true do
149
+ describe "params_for_search" do
150
150
  def params
151
- {: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"}
151
+ { 'default' => 'params'}
152
152
  end
153
- describe "for default arguments" do
154
- it "should default to omitting :page" do
155
- search_as_hidden_fields.should have_selector("input[type='hidden']", :count =>8)
156
- search_as_hidden_fields.should_not have_selector("input[name='page']")
153
+
154
+ it "should default to using the controller's params" do
155
+ result = params_for_search
156
+ result.should == params
157
+ params.object_id.should_not == result.object_id
158
+ end
159
+
160
+ it "should let you pass in params to use" do
161
+ source_params = { :q => 'query'}
162
+ result = params_for_search(:params => source_params )
163
+ source_params.should == result
164
+ source_params.object_id.should_not == result.object_id
165
+ end
166
+
167
+ it "should not return blacklisted elements" do
168
+ source_params = { :action => 'action', :controller => 'controller', :commit => 'commit'}
169
+ result = params_for_search(:params => source_params )
170
+ result.keys.should_not include(:action, :controller, :commit)
171
+
172
+ end
173
+
174
+ it "should adjust the current page if the per_page changes" do
175
+ source_params = { :per_page => 20, :page => 5}
176
+ result = params_for_search(:params => source_params, :per_page => 100)
177
+ result[:page].should == 1
178
+ end
179
+
180
+ it "should not adjust the current page if the per_page is the same as it always was" do
181
+ source_params = { :per_page => 20, :page => 5}
182
+ result = params_for_search(:params => source_params, :per_page => 20)
183
+ result[:page].should == 5
184
+ end
185
+
186
+ it "should adjust the current page if the sort changes" do
187
+ source_params = { :sort => 'field_a', :page => 5}
188
+ result = params_for_search(:params => source_params, :sort => 'field_b')
189
+ result[:page].should == 1
190
+ end
191
+
192
+ it "should not adjust the current page if the sort is the same as it always was" do
193
+ source_params = { :sort => 'field_a', :page => 5}
194
+ result = params_for_search(:params => source_params, :sort => 'field_a')
195
+ result[:page].should == 5
196
+ end
197
+
198
+ describe "omit keys parameter" do
199
+ it "should omit keys by key name" do
200
+ source_params = { :a => 1, :b => 2, :c => 3}
201
+ result = params_for_search(:params => source_params, :omit_keys => [:a, :b] )
202
+
203
+ result.keys.should_not include(:a, :b)
204
+ result[:c].should == 3
157
205
  end
158
- it "should not return blacklisted elements" do
159
- search_as_hidden_fields.should_not have_selector("input[name='action']")
160
- search_as_hidden_fields.should_not have_selector("input[name='controller']")
161
- search_as_hidden_fields.should_not have_selector("input[name='commit']")
206
+
207
+ it "should remove keys if a key/value pair was passed and no values are left for that key" do
208
+ source_params = { :f => ['a']}
209
+ result = params_for_search(:params => source_params, :omit_keys => [{:f => 'a' }])
210
+ result.keys.should_not include(:f)
162
211
  end
163
- describe "for omit_keys parameter" do
164
- it "should not include those keys" do
165
- generated = search_as_hidden_fields(:omit_keys => [:per_page, :sort])
166
212
 
167
- generated.should_not have_selector("input[name=sort]")
168
- generated.should_not have_selector("input[name=per_page]")
213
+ it "should only remove keys when a key/value pair is based that are in that pair" do
169
214
 
170
- generated.should have_selector("input[name=page]")
171
- end
215
+ source_params = { :f => ['a', 'b']}
216
+ result = params_for_search(:params => source_params, :omit_keys => [{:f => 'a' }])
217
+ result[:f].should_not include('a')
218
+ result[:f].should include('b')
219
+ end
220
+ end
172
221
 
173
- it "should support hash-based deleting" do
174
- generated = search_as_hidden_fields(:omit_keys => [{:f => 'field' }])
175
- generated.should have_selector("input[name='f[other_field][]']")
176
- generated.should_not have_selector("input[name='f[field][]']")
177
- end
222
+ end
223
+
224
+ describe "search_as_hidden_fields" do
225
+ def params
226
+ {: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"}
227
+ end
228
+ describe "for default arguments" do
229
+ it "should default to omitting :page" do
230
+ search_as_hidden_fields.should_not have_selector("input[name='page']")
178
231
  end
179
232
  end
180
233
  end
@@ -6,7 +6,7 @@ describe CatalogHelper do
6
6
 
7
7
  def mock_response args
8
8
  current_page = args[:current_page] || 1
9
- per_page = args[:per_page] || 10
9
+ per_page = args[:rows] || args[:per_page] || 10
10
10
  total = args[:total]
11
11
  start = (current_page - 1) * per_page
12
12
 
@@ -78,6 +78,13 @@ describe CatalogHelper do
78
78
  html.should == "<strong>41</strong> - <strong>47</strong> of <strong>47</strong>"
79
79
  html.html_safe?.should == true
80
80
  end
81
+ it "should work with rows the same as per_page" do
82
+ @response = mock_response :total => 47, :rows => 20, :current_page => 2
83
+
84
+ html = render_pagination_info(@response, { :entry_name => 'entry_name' })
85
+ html.should == "<strong>21</strong> - <strong>40</strong> of <strong>47</strong>"
86
+ html.html_safe?.should == true
87
+ end
81
88
 
82
89
  end
83
90
  end
@@ -13,10 +13,15 @@ describe HtmlHeadHelper do
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
+ if Rails::VERSION::MAJOR == 4
17
+ html.should have_selector("script[src='/javascripts/some_js.js']")
18
+ html.should have_selector("script[src='/javascripts/other_js.js']")
19
+ elsif use_asset_pipeline?
20
+ # only for rails 3 with asset pipeline enabled
17
21
  html.should have_selector("script[src='/assets/some_js.js'][type='text/javascript']")
18
22
  html.should have_selector("script[src='/assets/other_js.js'][type='text/javascript']")
19
23
  else
24
+ # rails 3 with asset pipeline disabled
20
25
  html.should have_selector("script[src='/javascripts/some_js.js'][type='text/javascript']")
21
26
  html.should have_selector("script[src='/javascripts/other_js.js'][type='text/javascript']")
22
27
  end
@@ -37,7 +42,10 @@ describe HtmlHeadHelper do
37
42
  it "should render stylesheets specified in controller #stylesheet_links" do
38
43
  html = helper.render_stylesheet_includes
39
44
 
40
- if use_asset_pipeline?
45
+ if Rails::VERSION::MAJOR == 4
46
+ html.should have_selector("link[href='/stylesheets/my_stylesheet.css'][rel='stylesheet']")
47
+ html.should have_selector("link[href='/stylesheets/other_stylesheet.css'][rel='stylesheet']")
48
+ elsif use_asset_pipeline?
41
49
  html.should have_selector("link[href='/assets/my_stylesheet.css'][rel='stylesheet'][type='text/css']")
42
50
  html.should have_selector("link[href='/assets/other_stylesheet.css'][rel='stylesheet'][type='text/css']")
43
51
  else
@@ -98,12 +106,18 @@ describe HtmlHeadHelper do
98
106
  @output.should have_selector("link[rel=rel][type=type][href=href]")
99
107
  end
100
108
  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
109
+ if Rails::VERSION::MAJOR == 4
110
+ @output.should have_selector("script[src='/javascripts/my_js.js']")
111
+ else
112
+ @output.should have_selector("script[src='/assets/my_js.js'][type='text/javascript']")
113
+ end
103
114
  end
104
115
  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
116
+ if Rails::VERSION::MAJOR == 4
117
+ @output.should have_selector("link[href='/stylesheets/my_css.css']")
118
+ else
119
+ @output.should have_selector("link[href='/assets/my_css.css'][type='text/css']")
120
+ end
107
121
  end
108
122
  it "should include content_for :head" do
109
123
  @output.should have_selector("meta[keywords]")
@@ -121,7 +135,7 @@ describe HtmlHeadHelper do
121
135
 
122
136
  private
123
137
  def use_asset_pipeline?
124
- (Rails::VERSION::MAJOR >= 3 and Rails::VERSION::MINOR >= 1) and Rails.application.config.assets.enabled
138
+ Rails::VERSION::MAJOR == 4 || ((Rails::VERSION::MAJOR == 3 and Rails::VERSION::MINOR >= 1) and Rails.application.config.assets.enabled)
125
139
  end
126
140
 
127
141
  end
@@ -69,6 +69,18 @@ describe "Blacklight::Configurable" do
69
69
 
70
70
  klass.blacklight_config.my_key.should == 'value'
71
71
  end
72
+
73
+ it "allows the instance to set a radically different config from the class" do
74
+ klass = Class.new
75
+ klass.send(:include, Blacklight::Configurable)
76
+ klass.blacklight_config.foo = "bar"
77
+
78
+ instance = klass.new
79
+ instance.blacklight_config = Blacklight::Configuration.new
80
+
81
+ instance.blacklight_config.should_not == klass.blacklight_config
82
+ instance.blacklight_config.foo.should be_nil
83
+ end
72
84
 
73
85
  it "allows instance to set it's own config seperate from class" do
74
86
  # this is built into class_attribute; we spec it both to document it,
@@ -77,14 +89,16 @@ describe "Blacklight::Configurable" do
77
89
  klass = Class.new
78
90
  klass.send(:include, Blacklight::Configurable)
79
91
  klass.blacklight_config.foo = "bar"
92
+ klass.blacklight_config.bar = []
93
+ klass.blacklight_config.bar << "asd"
80
94
 
81
95
  instance = klass.new
82
-
83
- instance.blacklight_config = Blacklight::Configuration.new
84
-
96
+ instance.blacklight_config.bar << "123"
85
97
  instance.blacklight_config.should_not == klass.blacklight_config
86
- instance.blacklight_config.foo.should be_nil
87
98
  klass.blacklight_config.foo.should == "bar"
99
+ instance.blacklight_config.foo.should == "bar"
100
+ klass.blacklight_config.bar.should_not include("123")
101
+ instance.blacklight_config.bar.should include("asd", "123")
88
102
  end
89
103
 
90
104
  it "configurable classes should not mutate the default configuration object" do