blacklight 4.3.0 → 4.4.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 (141) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.travis.yml +0 -6
  4. data/Gemfile +5 -0
  5. data/README.md +1 -1
  6. data/Rakefile +0 -1
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/blacklight/autofocus.js +16 -0
  9. data/app/assets/javascripts/blacklight/blacklight.js +1 -0
  10. data/app/assets/javascripts/blacklight/bookmark_toggle.js +2 -5
  11. data/app/assets/javascripts/blacklight/checkbox_submit.js +3 -6
  12. data/app/assets/javascripts/blacklight/core.js +24 -1
  13. data/app/assets/javascripts/blacklight/css_dropdowns.js +2 -2
  14. data/app/assets/javascripts/blacklight/facet_expand_contract.js +4 -3
  15. data/app/assets/javascripts/blacklight/lightbox_dialog.js +7 -1
  16. data/app/assets/javascripts/blacklight/search_context.js +1 -1
  17. data/app/assets/javascripts/blacklight/select_submit.js +1 -1
  18. data/app/assets/javascripts/blacklight/zebra_stripe.js +1 -1
  19. data/app/assets/stylesheets/blacklight/_blacklight_base.css.scss +1 -0
  20. data/app/assets/stylesheets/blacklight/_catalog.css.scss +5 -0
  21. data/app/assets/stylesheets/blacklight/_facets.css.scss +6 -0
  22. data/app/assets/stylesheets/blacklight/_group.css.scss +14 -0
  23. data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +1 -0
  24. data/app/controllers/bookmarks_controller.rb +2 -2
  25. data/app/helpers/blacklight/blacklight_helper_behavior.rb +41 -24
  26. data/app/helpers/blacklight/catalog_helper_behavior.rb +48 -28
  27. data/app/helpers/blacklight/facets_helper_behavior.rb +9 -75
  28. data/app/models/record_mailer.rb +1 -16
  29. data/app/views/bookmarks/index.html.erb +2 -0
  30. data/app/views/catalog/_bookmark_control.html.erb +3 -4
  31. data/app/views/catalog/_document.html.erb +2 -1
  32. data/app/views/catalog/_document_header.html.erb +6 -3
  33. data/app/views/catalog/_email_form.html.erb +0 -7
  34. data/app/views/catalog/_facet_layout.html.erb +1 -1
  35. data/app/views/catalog/_group_default.html.erb +12 -0
  36. data/app/views/catalog/_index_default.html.erb +1 -1
  37. data/app/views/catalog/_opensearch_response_metadata.html.erb +2 -3
  38. data/app/views/catalog/_paginate_compact.html.erb +2 -2
  39. data/app/views/catalog/_results_pagination.html.erb +2 -2
  40. data/app/views/catalog/_search_form.html.erb +1 -1
  41. data/app/views/catalog/_sms_form.html.erb +1 -21
  42. data/app/views/catalog/_thumbnail_default.html.erb +5 -0
  43. data/app/views/catalog/email_sent.html.erb +9 -0
  44. data/app/views/catalog/index.atom.builder +7 -8
  45. data/app/views/catalog/index.html.erb +6 -3
  46. data/app/views/catalog/librarian_view.html.erb +1 -1
  47. data/app/views/catalog/sms_sent.html.erb +9 -0
  48. data/app/views/feedback/complete.html.erb +2 -0
  49. data/app/views/feedback/show.html.erb +7 -5
  50. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +1 -1
  51. data/app/views/layouts/blacklight.html.erb +1 -2
  52. data/app/views/saved_searches/index.html.erb +2 -0
  53. data/app/views/search_history/index.html.erb +1 -1
  54. data/blacklight.gemspec +1 -1
  55. data/config/locales/blacklight.en.yml +11 -0
  56. data/config/locales/blacklight.fr.yml +15 -1
  57. data/gemfiles/rails3.gemfile +7 -0
  58. data/gemfiles/rails4.gemfile +7 -0
  59. data/lib/blacklight.rb +1 -0
  60. data/lib/blacklight/catalog.rb +101 -56
  61. data/lib/blacklight/configuration.rb +1 -1
  62. data/lib/blacklight/controller.rb +7 -4
  63. data/lib/blacklight/facet.rb +79 -0
  64. data/lib/blacklight/routes.rb +0 -1
  65. data/lib/blacklight/solr/document.rb +4 -0
  66. data/lib/blacklight/solr/document/marc_export.rb +1 -1
  67. data/lib/blacklight/solr_helper.rb +39 -8
  68. data/lib/blacklight/solr_response.rb +35 -3
  69. data/lib/blacklight/solr_response/facets.rb +4 -0
  70. data/lib/blacklight/solr_response/group.rb +33 -0
  71. data/lib/blacklight/solr_response/group_response.rb +49 -0
  72. data/lib/blacklight/solr_response/pagination_methods.rb +27 -0
  73. data/lib/blacklight/user.rb +30 -32
  74. data/lib/generators/blacklight/assets_generator.rb +3 -1
  75. data/lib/generators/blacklight/blacklight_generator.rb +28 -125
  76. data/lib/generators/blacklight/marc_generator.rb +66 -0
  77. data/lib/generators/blacklight/models_generator.rb +113 -0
  78. data/lib/generators/blacklight/templates/alternate_controller.rb +9 -0
  79. data/lib/generators/blacklight/templates/config/solr.yml +0 -2
  80. data/lib/generators/blacklight/templates/solr_document.rb +1 -13
  81. data/lib/railties/all_tests.rake +5 -8
  82. data/spec/controllers/catalog_controller_spec.rb +185 -113
  83. data/spec/features/alternate_controller_spec.rb +34 -0
  84. data/spec/features/bookmarks_spec.rb +58 -0
  85. data/spec/features/did_you_mean_spec.rb +135 -0
  86. data/spec/features/librarian_view_spec.rb +13 -0
  87. data/spec/features/record_view_spec.rb +37 -0
  88. data/spec/features/saved_searches_spec.rb +47 -0
  89. data/spec/features/search_filters_spec.rb +137 -0
  90. data/spec/features/search_history_spec.rb +75 -0
  91. data/spec/features/search_pagination_spec.rb +91 -0
  92. data/spec/features/search_results_spec.rb +68 -0
  93. data/spec/features/search_sort_spec.rb +20 -0
  94. data/spec/features/search_spec.rb +108 -0
  95. data/spec/helpers/blacklight_helper_spec.rb +45 -2
  96. data/spec/helpers/catalog_helper_spec.rb +134 -1
  97. data/spec/helpers/facets_helper_spec.rb +8 -0
  98. data/spec/lib/blacklight/solr_response/group_response_spec.rb +78 -0
  99. data/spec/lib/blacklight/solr_response/group_spec.rb +70 -0
  100. data/spec/lib/blacklight_solr_response_spec.rb +11 -5
  101. data/spec/lib/blacklight_user_spec.rb +22 -41
  102. data/spec/lib/solr_helper_spec.rb +73 -1
  103. data/spec/models/record_mailer_spec.rb +3 -3
  104. data/spec/models/{solr_docment_spec.rb → solr_document_spec.rb} +1 -1
  105. data/spec/spec_helper.rb +0 -1
  106. data/spec/support/features.rb +7 -0
  107. data/spec/support/features/session_helpers.rb +22 -0
  108. data/spec/test_app_templates/Gemfile.extra +0 -4
  109. data/spec/test_app_templates/lib/generators/test_app_generator.rb +0 -6
  110. data/spec/test_app_templates/lib/tasks/blacklight_test_app.rake +1 -9
  111. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -1
  112. data/tasks/blacklight.rake +0 -10
  113. metadata +49 -58
  114. data/features/bookmarks.feature +0 -68
  115. data/features/did_you_mean.feature +0 -123
  116. data/features/librarian_view.feature +0 -18
  117. data/features/record_view.feature +0 -40
  118. data/features/saved_searches.feature +0 -49
  119. data/features/search.feature +0 -83
  120. data/features/search_filters.feature +0 -119
  121. data/features/search_history.feature +0 -85
  122. data/features/search_pagination.feature +0 -53
  123. data/features/search_results.feature +0 -61
  124. data/features/search_sort.feature +0 -27
  125. data/features/step_definitions/bookmarks_steps.rb +0 -6
  126. data/features/step_definitions/error_steps.rb +0 -5
  127. data/features/step_definitions/general_steps.rb +0 -50
  128. data/features/step_definitions/record_view_steps.rb +0 -12
  129. data/features/step_definitions/saved_searches_steps.rb +0 -19
  130. data/features/step_definitions/search_facets_steps.rb +0 -29
  131. data/features/step_definitions/search_history_steps.rb +0 -9
  132. data/features/step_definitions/search_pagination_steps.rb +0 -29
  133. data/features/step_definitions/search_result_steps.rb +0 -115
  134. data/features/step_definitions/search_steps.rb +0 -118
  135. data/features/step_definitions/user_steps.rb +0 -5
  136. data/features/step_definitions/web_steps.rb +0 -217
  137. data/features/support/env.rb +0 -65
  138. data/features/support/paths.rb +0 -48
  139. data/features/support/selectors.rb +0 -40
  140. data/lib/railties/blacklight_cucumber.rake +0 -126
  141. data/lib/solrmarc.log.1 +0 -854
@@ -0,0 +1,91 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "Search Pagination" do
5
+ it "should have results with pagination" do
6
+ visit root_path
7
+ fill_in "q", with: ''
8
+ click_button 'search'
9
+ within ("#sortAndPerPage") do
10
+ expect(page).to have_content "1 - 10 of "
11
+ within '#per_page-dropdown' do
12
+ expect(page).to have_link('10')
13
+ expect(page).to have_link('20')
14
+ expect(page).to have_link('50')
15
+ expect(page).to have_link('100')
16
+ end
17
+
18
+ end
19
+ click_link "Next »"
20
+ within ("#sortAndPerPage") do
21
+ expect(page).to have_content "11 - 20 of "
22
+ end
23
+ click_link "« Previous"
24
+ within ("#sortAndPerPage") do
25
+ expect(page).to have_content "1 - 10 of "
26
+ end
27
+ end
28
+
29
+ it "should be able to change the number of items per page" do
30
+ visit root_path
31
+ fill_in "q", with: ''
32
+ click_button 'search'
33
+ within ("#sortAndPerPage") do
34
+ expect(page).to have_content "1 - 10 of "
35
+ end
36
+
37
+ within ("#per_page-dropdown") do
38
+ click_link '20'
39
+ end
40
+ within ("#sortAndPerPage") do
41
+ expect(page).to have_content "1 - 20 of "
42
+ end
43
+ end
44
+
45
+ describe "when the application is configured for other per page values" do
46
+ let!(:original_per_page) { CatalogController.blacklight_config[:per_page] }
47
+ let!(:original_rows) { CatalogController.blacklight_config[:default_solr_params][:rows] }
48
+ before do
49
+ CatalogController.blacklight_config[:per_page] = [15, 30]
50
+ CatalogController.blacklight_config[:default_solr_params][:rows] = 15
51
+ end
52
+ after do
53
+ CatalogController.blacklight_config[:per_page] = original_per_page
54
+ CatalogController.blacklight_config[:default_solr_params][:rows] = original_rows
55
+ end
56
+ it "should use the configured values" do
57
+ visit root_path
58
+ fill_in "q", with: ''
59
+ click_button 'search'
60
+ within ("#sortAndPerPage") do
61
+ expect(page).to have_content "1 - 15 of "
62
+ within '#per_page-dropdown' do
63
+ expect(page).to have_link('15')
64
+ expect(page).to have_link('30')
65
+ end
66
+ end
67
+ within ("#per_page-dropdown") do
68
+ click_link '30'
69
+ end
70
+ within ("#sortAndPerPage") do
71
+ expect(page).to have_content "1 - 30 of "
72
+ end
73
+ end
74
+ end
75
+
76
+ it "should reset the page offset to 1 when changing per page" do
77
+ visit root_path
78
+ fill_in "q", with: ''
79
+ click_button 'search'
80
+ click_link "Next »"
81
+ within ("#sortAndPerPage") do
82
+ expect(page).to have_content "11 - 20 of "
83
+ end
84
+ within ("#per_page-dropdown") do
85
+ click_link '20'
86
+ end
87
+ within ("#sortAndPerPage") do
88
+ expect(page).to have_content "1 - 20 of "
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,68 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "Search Results" do
5
+ it "should have for an empty query" do
6
+ visit root_path
7
+ click_button 'search'
8
+ number_of_results_from_page(page).should == 30
9
+ page.should have_xpath("//a[contains(@href, #{2007020969})]")
10
+ fill_in "q", with: 'korea'
11
+ click_button 'search'
12
+ number_of_results_from_page(page).should == 4
13
+ end
14
+
15
+ it "should find same result set with or without diacritcs" do
16
+ visit root_path
17
+ fill_in "q", with: 'inmul'
18
+ click_button 'search'
19
+ number_of_results_from_page(page).should == 1
20
+ page.should have_xpath("//a[contains(@href, #{77826928})]")
21
+
22
+ fill_in "q", with: 'inmül'
23
+ click_button 'search'
24
+ number_of_results_from_page(page).should == 1
25
+ end
26
+ it "should find same result set for a case-insensitive query " do
27
+ visit root_path
28
+ fill_in "q", with: 'inmul'
29
+ click_button 'search'
30
+ number_of_results_from_page(page).should == 1
31
+ page.should have_xpath("//a[contains(@href, #{77826928})]")
32
+
33
+ fill_in "q", with: 'INMUL'
34
+ click_button 'search'
35
+ number_of_results_from_page(page).should == 1
36
+ end
37
+
38
+ it "should order by relevancy" do
39
+ visit root_path
40
+ fill_in "q", with: 'Korea'
41
+ click_button 'search'
42
+ position_in_result_page(page, '77826928').should == 1
43
+ position_in_result_page(page, '94120425').should == 2
44
+
45
+ end
46
+
47
+ end
48
+
49
+
50
+
51
+ def position_in_result_page(page, id)
52
+ i = -1
53
+ page.all(".index_title a").each_with_index do |link, idx|
54
+ i = (idx+1) if link['href'] =~ Regexp.new(Regexp.escape(id) + "$")
55
+ end
56
+ i.to_i
57
+ end
58
+
59
+ def number_of_results_for_query(query)
60
+ visit root_path
61
+ fill_in "q", :with => query
62
+ click_button "search"
63
+ get_number_of_results_from_page(page)
64
+ end
65
+
66
+ def number_of_results_from_page(page)
67
+ page.find("meta[name=totalResults]")['content'].to_i rescue 0
68
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe "Search Sort" do
4
+ it "should sort on facet results with no search terms" do
5
+ visit root_path
6
+ click_link 'English'
7
+ expect(page).to have_content 'Sort by relevance'
8
+ click_link 'title'
9
+ expect(page).to have_content 'Sort by title'
10
+ end
11
+
12
+ it "should sort on search" do
13
+ visit root_path
14
+ fill_in "q", with: 'bod'
15
+ click_button 'search'
16
+ expect(page).to have_content 'Sort by relevance'
17
+ click_link 'title'
18
+ expect(page).to have_content 'Sort by title'
19
+ end
20
+ end
@@ -0,0 +1,108 @@
1
+ # -*- encoding : utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe "Search Page" do
5
+ it "should show welcome" do
6
+ visit root_path
7
+ expect(page).to have_selector("input#q")
8
+ within ("select#search_field") do
9
+ expect(page).to have_selector('option', text: 'All Fields')
10
+ expect(page).to have_selector('option', text: 'Title')
11
+ expect(page).to have_selector('option', text: 'Author')
12
+ expect(page).to have_selector('option', text: 'Subject')
13
+ end
14
+ expect(page).to have_selector("button[type='submit'] .submit-search-text")
15
+ expect(page).to_not have_selector("#startOverLink")
16
+
17
+ expect(page).to have_content "Welcome!"
18
+ expect(page).to have_selector("link[rel=stylesheet]")
19
+ end
20
+
21
+ it "should do searches across all fields" do
22
+ visit root_path
23
+ fill_in "q", with: 'history'
24
+ select 'All Fields', from: 'search_field'
25
+ click_button 'search'
26
+
27
+ expect(page).to have_selector("link[rel=alternate][type='application/rss+xml']")
28
+ expect(page).to have_selector("link[rel=alternate][type='application/atom+xml']")
29
+
30
+ # opensearch
31
+ expect(page).to have_selector("meta[name=totalResults]")
32
+ expect(page).to have_selector("meta[name=startIndex]")
33
+ expect(page).to have_selector("meta[name=itemsPerPage]")
34
+
35
+ within "#appliedParams" do
36
+ expect(page).to have_content "You searched for:"
37
+ expect(page).to have_content "history"
38
+ end
39
+
40
+ within ("select#search_field") do
41
+ expect(page).to have_selector("option[selected]", text: "All Fields")
42
+ end
43
+
44
+ within ("#sortAndPerPage") do
45
+ expect(page).to have_content "Sort by"
46
+ expect(page).to have_content "1 - 9 of 9"
47
+ within '#sort-dropdown' do
48
+ expect(page).to have_link('relevance')
49
+ expect(page).to have_link('year')
50
+ expect(page).to have_link('author')
51
+ expect(page).to have_link('title')
52
+ end
53
+ end
54
+ within "#documents" do
55
+ expect(page).to have_selector(".document", count: 9)
56
+ end
57
+ end
58
+
59
+ it "should do searches constrained to a single field" do
60
+ visit root_path
61
+ fill_in "q", with: 'inmul'
62
+ select 'Title', from: 'search_field'
63
+ click_button 'search'
64
+
65
+ within "#appliedParams" do
66
+ expect(page).to have_content "You searched for:"
67
+ expect(page).to have_content "Title"
68
+ expect(page).to have_content "inmul"
69
+ end
70
+ within ("select#search_field") do
71
+ expect(page).to have_selector("option[selected]", text: "Title")
72
+ end
73
+ within(".index_title") do
74
+ expect(page).to have_content "1."
75
+ end
76
+ within ("#sortAndPerPage") do
77
+ expect(page).to have_content "1 to 1 of 1"
78
+ end
79
+ end
80
+
81
+ it "should show vernacular (Linked 880) and call number" do
82
+ visit root_path
83
+ fill_in "q", with: 'history'
84
+ click_button 'search'
85
+ within "#documents" do
86
+ expect(page).to have_content "次按驟變"
87
+ expect(page).to have_content "DK861.K3 V5"
88
+ end
89
+ end
90
+
91
+ it "should allow you to clear the search" do
92
+ visit root_path
93
+ fill_in "q", with: 'history'
94
+ click_button 'search'
95
+ within "#appliedParams" do
96
+ expect(page).to have_content "You searched for:"
97
+ expect(page).to have_content "history"
98
+ end
99
+
100
+ expect(page).to have_selector "#q[value='history']"
101
+
102
+ click_link "Start Over"
103
+
104
+ expect(page).to have_content "Welcome!"
105
+ expect(page).to_not have_selector "#q[value='history']"
106
+ end
107
+ end
108
+
@@ -165,9 +165,9 @@ describe BlacklightHelper do
165
165
  end
166
166
 
167
167
  it "should not return blacklisted elements" do
168
- source_params = { :action => 'action', :controller => 'controller', :commit => 'commit'}
168
+ source_params = { :action => 'action', :controller => 'controller', :id => "id", :commit => 'commit'}
169
169
  result = params_for_search(:params => source_params )
170
- result.keys.should_not include(:action, :controller, :commit)
170
+ result.keys.should_not include(:action, :controller, :commit, :id)
171
171
 
172
172
  end
173
173
 
@@ -479,6 +479,8 @@ describe BlacklightHelper do
479
479
  @config = Blacklight::Configuration.new.configure do |config|
480
480
  config.add_index_field 'qwer'
481
481
  config.add_index_field 'asdf', :helper_method => :render_asdf_index_field
482
+ config.add_index_field 'link_to_search_true', :link_to_search => true
483
+ config.add_index_field 'link_to_search_named', :link_to_search => :some_field
482
484
  config.add_index_field 'highlight', :highlight => true
483
485
  end
484
486
  helper.stub(:blacklight_config).and_return(@config)
@@ -499,6 +501,20 @@ describe BlacklightHelper do
499
501
  value.should == 'custom asdf value'
500
502
  end
501
503
 
504
+ it "should check for a link_to_search" do
505
+ doc = double()
506
+ doc.should_receive(:get).with('link_to_search_true', :sep => nil).and_return('x')
507
+ value = helper.render_index_field_value :document => doc, :field => 'link_to_search_true'
508
+ value.should == helper.link_to("x", helper.search_action_url(:f => { :link_to_search_true => ['x'] }))
509
+ end
510
+
511
+ it "should check for a link_to_search with a field name" do
512
+ doc = double()
513
+ doc.should_receive(:get).with('link_to_search_named', :sep => nil).and_return('x')
514
+ value = helper.render_index_field_value :document => doc, :field => 'link_to_search_named'
515
+ value.should == helper.link_to("x", helper.search_action_url(:f => { :some_field => ['x'] }))
516
+ end
517
+
502
518
  it "should gracefully handle when no highlight field is available" do
503
519
  doc = double()
504
520
  doc.should_not_receive(:get)
@@ -537,6 +553,8 @@ describe BlacklightHelper do
537
553
  @config = Blacklight::Configuration.new.configure do |config|
538
554
  config.add_show_field 'qwer'
539
555
  config.add_show_field 'asdf', :helper_method => :render_asdf_document_show_field
556
+ config.add_show_field 'link_to_search_true', :link_to_search => true
557
+ config.add_show_field 'link_to_search_named', :link_to_search => :some_field
540
558
  config.add_show_field 'highlight', :highlight => true
541
559
  end
542
560
  helper.stub(:blacklight_config).and_return(@config)
@@ -558,6 +576,20 @@ describe BlacklightHelper do
558
576
  value.should == 'custom asdf value'
559
577
  end
560
578
 
579
+ it "should check for a link_to_search" do
580
+ doc = double()
581
+ doc.should_receive(:get).with('link_to_search_true', :sep => nil).and_return('x')
582
+ value = helper.render_document_show_field_value :document => doc, :field => 'link_to_search_true'
583
+ value.should == helper.link_to("x", helper.search_action_url(:f => { :link_to_search_true => ['x'] }))
584
+ end
585
+
586
+ it "should check for a link_to_search with a field name" do
587
+ doc = double()
588
+ doc.should_receive(:get).with('link_to_search_named', :sep => nil).and_return('x')
589
+ value = helper.render_document_show_field_value :document => doc, :field => 'link_to_search_named'
590
+ value.should == helper.link_to("x", helper.search_action_url(:f => { :some_field => ['x'] }))
591
+ end
592
+
561
593
  it "should gracefully handle when no highlight field is available" do
562
594
  doc = double()
563
595
  doc.should_not_receive(:get)
@@ -626,4 +658,15 @@ describe BlacklightHelper do
626
658
  end
627
659
  end
628
660
 
661
+
662
+ describe "render_grouped_response?" do
663
+ it "should check if the response contains grouped data" do
664
+ assign(:response, double("SolrResponse", :grouped? => true))
665
+ expect(helper.render_grouped_response?).to be_true
666
+ end
667
+ end
668
+
669
+ describe "render_grouped_document_index" do
670
+
671
+ end
629
672
  end
@@ -11,13 +11,20 @@ describe CatalogHelper do
11
11
  start = (current_page - 1) * per_page
12
12
 
13
13
  mock_response = double("Blacklight::SolrResponse")
14
- mock_response.stub(:total).and_return(total)
14
+ mock_response.stub(:total_count).and_return(total)
15
+ mock_response.stub(:current_page).and_return(current_page)
16
+ mock_response.stub(:total_pages).and_return((total / per_page).to_i + 1)
15
17
  mock_response.stub(:rows).and_return(per_page)
16
18
  mock_response.stub(:start).and_return(start)
17
19
  mock_response.stub(:docs).and_return((1..total).to_a.slice(start, per_page))
18
20
 
19
21
  mock_response
20
22
  end
23
+
24
+ def render_grouped_response?
25
+ false
26
+ end
27
+
21
28
 
22
29
  describe "render_pagination_info" do
23
30
  before(:all) do
@@ -87,4 +94,130 @@ describe CatalogHelper do
87
94
  end
88
95
 
89
96
  end
97
+
98
+ describe "should_autofocus_on_search_box?" do
99
+ it "should be focused if we're on a catalog-like index page without query or facet parameters" do
100
+ helper.stub(:controller => CatalogController.new, :action_name => "index", :params => { })
101
+ expect(helper.should_autofocus_on_search_box?).to be_true
102
+ end
103
+
104
+ it "should not be focused if we're not on a catalog controller" do
105
+ helper.stub(:controller => ApplicationController.new)
106
+ expect(helper.should_autofocus_on_search_box?).to be_false
107
+ end
108
+
109
+ it "should not be focused if we're not on a catalog controller index" do
110
+ helper.stub(:controller => CatalogController.new, :action_name => "show")
111
+ expect(helper.should_autofocus_on_search_box?).to be_false
112
+ end
113
+
114
+ it "should not be focused if a search string is provided" do
115
+ helper.stub(:controller => CatalogController.new, :action_name => "index", :params => { :q => "hello"})
116
+ expect(helper.should_autofocus_on_search_box?).to be_false
117
+ end
118
+
119
+ it "should not be focused if a facet is selected" do
120
+ helper.stub(:controller => CatalogController.new, :action_name => "index", :params => { :f => { "field" => ["value"]}})
121
+ expect(helper.should_autofocus_on_search_box?).to be_false
122
+ end
123
+ end
124
+
125
+ describe "has_thumbnail?" do
126
+ it "should have a thumbnail if a thumbnail_method is configured" do
127
+ helper.stub(:blacklight_config => OpenStruct.new(:index => OpenStruct.new(:thumbnail_method => :xyz) ))
128
+ document = double()
129
+ expect(helper.has_thumbnail? document).to be_true
130
+ end
131
+
132
+ it "should have a thumbnail if a thumbnail_field is configured and it exists in the document" do
133
+ helper.stub(:blacklight_config => OpenStruct.new(:index => OpenStruct.new(:thumbnail_field => :xyz) ))
134
+ document = double(:has_field? => true)
135
+ expect(helper.has_thumbnail? document).to be_true
136
+ end
137
+
138
+ it "should not have a thumbnail if the thumbnail_field is missing from the document" do
139
+ helper.stub(:blacklight_config => OpenStruct.new(:index => OpenStruct.new(:thumbnail_field => :xyz) ))
140
+ document = double(:has_field? => false)
141
+ expect(helper.has_thumbnail? document).to be_false
142
+ end
143
+
144
+ it "should not have a thumbnail if none of the fields are configured" do
145
+ helper.stub(:blacklight_config => OpenStruct.new(:index => OpenStruct.new()))
146
+ expect(helper.has_thumbnail? double()).to be_false
147
+ end
148
+ end
149
+
150
+ describe "render_thumbnail_tag" do
151
+ it "should call the provided thumbnail method" do
152
+ helper.stub(:blacklight_config => double(:index => double(:thumbnail_method => :xyz)))
153
+ document = double()
154
+ helper.stub(:xyz => "some-thumbnail")
155
+
156
+ helper.should_receive(:link_to_document).with(document, :label => "some-thumbnail")
157
+ helper.render_thumbnail_tag document
158
+ end
159
+
160
+ it "should create an image tag from the given field" do
161
+ helper.stub(:blacklight_config => double(:index => OpenStruct.new(:thumbnail_field => :xyz)))
162
+ document = double()
163
+
164
+ document.stub(:has_field?).with(:xyz).and_return(true)
165
+ document.stub(:get).with(:xyz, :sep => nil).and_return(["http://example.com/some.jpg"])
166
+
167
+ helper.should_receive(:link_to_document).with(document, :label => image_tag("http://example.com/some.jpg"))
168
+ helper.render_thumbnail_tag document
169
+ end
170
+
171
+ it "should return nil if no thumbnail is available" do
172
+ helper.stub(:blacklight_config => double(:index => OpenStruct.new()))
173
+
174
+ document = double()
175
+ expect(helper.render_thumbnail_tag document).to be_nil
176
+ end
177
+
178
+ it "should return nil if no thumbnail is returned from the thumbnail method" do
179
+ helper.stub(:blacklight_config => double(:index => OpenStruct.new(:thumbnail_method => :xyz)))
180
+ helper.stub(:xyz => nil)
181
+ document = double()
182
+
183
+ expect(helper.render_thumbnail_tag document).to be_nil
184
+ end
185
+ end
186
+
187
+ describe "thumbnail_url" do
188
+ it "should pull the configured thumbnail field out of the document" do
189
+ helper.stub(:blacklight_config => double(:index => double(:thumbnail_field => "xyz")))
190
+ document = double()
191
+ document.stub(:has_field?).with("xyz").and_return(true)
192
+ document.stub(:get).with("xyz", :sep => nil).and_return(["asdf"])
193
+ expect(helper.thumbnail_url document).to eq("asdf")
194
+ end
195
+
196
+ it "should return nil if the thumbnail field doesn't exist" do
197
+ helper.stub(:blacklight_config => double(:index => double(:thumbnail_field => "xyz")))
198
+ document = double()
199
+ document.stub(:has_field?).with("xyz").and_return(false)
200
+ expect(helper.thumbnail_url document).to be_nil
201
+ end
202
+ end
203
+
204
+ describe "document_counter_with_offset" do
205
+ it "should render the document index with the appropriate offset" do
206
+ assign(:response, double(:params => { :start => 0 }, :grouped? => false))
207
+ expect(helper.document_counter_with_offset(0)).to be(1)
208
+ expect(helper.document_counter_with_offset(1)).to be(2)
209
+ end
210
+
211
+ it "should render the document index with the appropriate offset" do
212
+ assign(:response, double(:params => { :start => 10 }, :grouped? => false))
213
+ expect(helper.document_counter_with_offset(0)).to be(11)
214
+ expect(helper.document_counter_with_offset(1)).to be(12)
215
+ end
216
+
217
+ it "should not provide a counter for grouped responses" do
218
+ assign(:response, double(:params => { :start => 10 }, :grouped? => true))
219
+ expect(helper.document_counter_with_offset(0)).to be_nil
220
+ end
221
+ end
222
+
90
223
  end