blacklight 3.1.2 → 3.2.0pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. data/.gitignore +5 -2
  2. data/README.md +7 -2
  3. data/VERSION +1 -1
  4. data/app/assets/images/favicon.ico +0 -0
  5. data/app/assets/javascripts/blacklight/blacklight.js +23 -1
  6. data/app/assets/stylesheets/blacklight/_catalog.css.scss +369 -0
  7. data/app/assets/stylesheets/blacklight/_facets.css.scss +117 -0
  8. data/app/assets/stylesheets/blacklight/_folder.css.scss +38 -0
  9. data/app/assets/stylesheets/blacklight/_formatting.css.scss +164 -0
  10. data/app/assets/stylesheets/blacklight/_header.css.scss +36 -0
  11. data/app/assets/stylesheets/blacklight/_layout.css.scss +79 -0
  12. data/app/assets/stylesheets/blacklight/_print.css.scss +54 -0
  13. data/app/assets/stylesheets/blacklight/_search_history.css.scss +44 -0
  14. data/app/assets/stylesheets/blacklight/_susy_framework.css.scss +228 -0
  15. data/app/assets/stylesheets/blacklight/blacklight.css.scss +27 -0
  16. data/app/assets/stylesheets/blacklight/blacklight_defaults.css.scss +48 -0
  17. data/app/controllers/bookmarks_controller.rb +2 -1
  18. data/app/controllers/folder_controller.rb +4 -0
  19. data/app/controllers/saved_searches_controller.rb +4 -0
  20. data/app/controllers/search_history_controller.rb +4 -0
  21. data/app/helpers/blacklight/blacklight_helper_behavior.rb +64 -104
  22. data/app/helpers/blacklight/catalog_helper_behavior.rb +4 -4
  23. data/app/helpers/blacklight/facets_helper_behavior.rb +52 -5
  24. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +14 -59
  25. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +56 -0
  26. data/app/helpers/search_history_constraints_helper.rb +3 -0
  27. data/app/models/record_mailer.rb +1 -2
  28. data/app/views/_flash_msg.html.erb +4 -5
  29. data/app/views/_user_util_links.html.erb +3 -1
  30. data/app/views/bookmarks/index.html.erb +2 -2
  31. data/app/views/catalog/_bookmark_control.html.erb +6 -6
  32. data/app/views/catalog/_facet_layout.html.erb +4 -0
  33. data/app/views/catalog/_facet_limit.html.erb +20 -33
  34. data/app/views/catalog/_facets.html.erb +1 -5
  35. data/app/views/catalog/_folder_control.html.erb +5 -5
  36. data/app/views/catalog/_index_default.html.erb +1 -1
  37. data/app/views/catalog/_search_form.html.erb +4 -3
  38. data/app/views/catalog/_show_default.html.erb +1 -1
  39. data/app/views/catalog/_show_tools.html.erb +6 -6
  40. data/app/views/catalog/_sort_and_per_page.html.erb +1 -1
  41. data/app/views/catalog/index.atom.builder +2 -2
  42. data/app/views/catalog/index.rss.builder +1 -1
  43. data/app/views/catalog/opensearch.xml.builder +10 -0
  44. data/app/views/catalog/show.html.erb +1 -1
  45. data/app/views/folder/_tools.html.erb +4 -4
  46. data/app/views/layouts/blacklight.html.erb +25 -37
  47. data/app/views/record_mailer/email_record.text.erb +1 -1
  48. data/app/views/record_mailer/sms_record.text.erb +2 -2
  49. data/app/views/search_history/index.html.erb +1 -1
  50. data/blacklight.gemspec +11 -9
  51. data/lib/{generators/blacklight/templates/SolrMarc.jar → SolrMarc.jar} +0 -0
  52. data/lib/blacklight.rb +5 -3
  53. data/lib/blacklight/catalog.rb +3 -4
  54. data/lib/blacklight/configurable.rb +54 -39
  55. data/lib/blacklight/configuration.rb +126 -0
  56. data/lib/blacklight/configuration/fields.rb +142 -0
  57. data/lib/blacklight/configuration/search_field.rb +12 -0
  58. data/lib/blacklight/configuration/solr_field.rb +12 -0
  59. data/lib/blacklight/configuration/sort_field.rb +17 -0
  60. data/lib/blacklight/controller.rb +16 -14
  61. data/lib/blacklight/engine.rb +1 -1
  62. data/lib/blacklight/global_configurable.rb +46 -0
  63. data/lib/blacklight/search_fields.rb +21 -54
  64. data/lib/blacklight/solr/document.rb +13 -3
  65. data/lib/blacklight/solr_helper.rb +88 -52
  66. data/lib/blacklight/utils.rb +18 -0
  67. data/lib/generators/blacklight/assets_generator.rb +14 -20
  68. data/lib/generators/blacklight/blacklight_generator.rb +14 -6
  69. data/lib/generators/blacklight/jetty_generator.rb +1 -1
  70. data/lib/generators/blacklight/templates/assets/standard.css.scss +51 -0
  71. data/lib/generators/blacklight/templates/catalog_controller.rb +148 -0
  72. data/lib/generators/blacklight/templates/config/blacklight_config.rb +2 -239
  73. data/lib/generators/blacklight/templates/config/sass.rb +5 -0
  74. data/lib/generators/blacklight/templates/solr_conf/schema.xml +514 -164
  75. data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +1591 -323
  76. data/lib/generators/blacklight/templates/solr_document.rb +2 -0
  77. data/lib/railties/all_tests.rake +36 -3
  78. data/lib/railties/blacklight_cucumber.rake +6 -4
  79. data/lib/railties/blacklight_rspec.rake +5 -4
  80. data/test_support/bin/run-tests.sh +2 -13
  81. data/test_support/bin/test.sh +30 -23
  82. data/test_support/features/did_you_mean.feature +14 -13
  83. data/test_support/features/step_definitions/saved_searches_steps.rb +1 -1
  84. data/test_support/features/step_definitions/search_steps.rb +4 -4
  85. data/test_support/spec/controllers/application_controller_spec.rb +3 -13
  86. data/test_support/spec/controllers/catalog_controller_spec.rb +102 -24
  87. data/test_support/spec/controllers/folder_controller_spec.rb +7 -1
  88. data/test_support/spec/helpers/blacklight_helper_spec.rb +45 -34
  89. data/test_support/spec/helpers/facets_helper_spec.rb +68 -0
  90. data/test_support/spec/helpers/html_head_helper_spec.rb +37 -0
  91. data/test_support/spec/helpers/{render_constraints_helper_spec.rb → search_history_constraints_helper_spec.rb} +26 -7
  92. data/test_support/spec/lib/blacklight_configurable_spec.rb +92 -0
  93. data/test_support/spec/lib/blacklight_configuration_spec.rb +295 -0
  94. data/test_support/spec/lib/{configurable_spec.rb → global_configurable_spec.rb} +2 -2
  95. data/test_support/spec/lib/search_fields_spec.rb +26 -29
  96. data/test_support/spec/{helpers → lib}/solr_helper_spec.rb +268 -287
  97. data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +1 -1
  98. data/test_support/spec/lib/utils_spec.rb +58 -0
  99. data/test_support/spec/models/solr_docment_spec.rb +4 -8
  100. data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +27 -170
  101. data/test_support/spec/views/catalog/_index_default.erb_spec.rb +38 -20
  102. data/test_support/spec/views/catalog/_show_default.erb_spec.rb +38 -19
  103. data/test_support/spec/views/catalog/index.atom.builder_spec.rb +19 -1
  104. metadata +148 -145
  105. data/app/assets/stylesheets/blacklight/blacklight.css +0 -493
  106. data/app/assets/stylesheets/yui.css +0 -31
  107. data/app/views/catalog/opensearch.xml.erb +0 -11
  108. data/doc/Atom-Responses.md +0 -90
  109. data/doc/CUSTOMIZING.md +0 -121
  110. data/doc/Extending-blacklight-with-the-document-extension-framework.md +0 -1
  111. data/doc/Extending-or-Modifying-Blacklight-Search-Behavior.md +0 -131
  112. data/doc/Features.md +0 -147
  113. data/doc/Integration-with-Rails-Footnotes.md +0 -20
  114. data/doc/Pagination.md +0 -38
  115. data/doc/Quickstart.md +0 -97
  116. data/doc/Upgrading-Guide.md +0 -98
  117. data/doc/User-Authentication.md +0 -54
  118. data/doc/Using-a-custom-solr-uniquekey-field.md +0 -36
  119. data/lib/blacklight/comma_link_renderer.rb +0 -28
  120. data/lib/railties/jetty_solr_server.rb +0 -108
  121. data/test_support/spec/views/catalog/show.html.erb_spec.rb +0 -101
@@ -2,6 +2,8 @@
2
2
  class SolrDocument
3
3
 
4
4
  include Blacklight::Solr::Document
5
+
6
+ # unique_key = 'id'
5
7
 
6
8
  # The following shows how to setup this blacklight document to display marc documents
7
9
  extension_parameters[:marc_source_field] = :marc_display
@@ -5,13 +5,47 @@ namespace :blacklight do
5
5
  require 'rspec/core/rake_task'
6
6
 
7
7
  desc "Run Blacklight cucumber and rspec, with test solr"
8
- task :all_tests => ['blacklight:spec:with_solr', 'blacklight:cucumber:with_solr']
8
+ task :all_tests => :hudson
9
+
10
+ desc "Run Blacklight cucumber and rspec, with test solr"
11
+ task :hudson do
12
+ solr_yml_path = Blacklight.locate_path("config", "solr.yml")
13
+ jetty_path = if ( File.exists?( solr_yml_path ))
14
+ solr_config = YAML::load(File.open(solr_yml_path))
15
+ solr_config["test"]["jetty_path"] if solr_config["test"]
16
+ end
17
+ raise Exception.new("Can't find jetty path to start test jetty. Expect a jetty_path key in config/solr.yml for test environment.") unless jetty_path
18
+
19
+ error = Jettywrapper.wrap(
20
+ :jetty_home => File.expand_path(jetty_path, Rails.root),
21
+ :sleep_after_start => 2) do
22
+ Rake::Task["blacklight:spec"].invoke
23
+ Rake::Task["blacklight:cucumber"].invoke
24
+ end
25
+
26
+ raise "test failures: #{error}" if error
27
+ end
9
28
 
10
29
  namespace :all_tests do
30
+ task :rcov do
11
31
  desc "Run Blacklight rspec and cucumber tests with rcov"
32
+ solr_yml_path = Blacklight.locate_path("config", "solr.yml")
33
+ jetty_path = if ( File.exists?( solr_yml_path ))
34
+ solr_config = YAML::load(File.open(solr_yml_path))
35
+ solr_config["test"]["jetty_path"] if solr_config["test"]
36
+ end
37
+ raise Exception.new("Can't find jetty path to start test jetty. Expect a jetty_path key in config/solr.yml for test environment.") unless jetty_path
38
+
12
39
  rm "blacklight-coverage.data" if File.exist?("blacklight-coverage.data")
13
- task :rcov => ['blacklight:spec:rcov', 'blacklight:cucumber:rcov']
40
+ error = Jettywrapper.wrap(
41
+ :jetty_home => File.expand_path(jetty_path, Rails.root),
42
+ :sleep_after_start => 2) do
43
+ Rake::Task["blacklight:spec:rcov"].invoke
44
+ Rake::Task["blacklight:cucumber:rcov"].invoke
45
+ end
46
+ raise "test failures: #{error}" if error
14
47
  end
48
+ end
15
49
 
16
50
  rescue LoadError
17
51
  desc "Not available! (cucumber and rspec not avail)"
@@ -20,4 +54,3 @@ namespace :blacklight do
20
54
  end
21
55
  end
22
56
  end
23
-
@@ -78,25 +78,27 @@ begin
78
78
  # when starting solr test server during functional tests use:
79
79
  #
80
80
  # rake SOLR_CONSOLE=true
81
- require File.expand_path('../jetty_solr_server.rb', __FILE__)
82
81
  desc "blacklight:cucumber with jetty/solr launch"
83
82
  task :with_solr do
83
+ require 'jettywrapper'
84
84
  # wrap tests with a test-specific Solr server
85
85
  # Need to look up where the test jetty is located
86
86
  # from solr.yml, we don't hardcode it anymore.
87
87
 
88
- solr_yml_path = locate_path("config", "solr.yml")
88
+ solr_yml_path = Blacklight.locate_path("config", "solr.yml")
89
89
  jetty_path = if ( File.exists?( solr_yml_path ))
90
90
  solr_config = YAML::load(File.open(solr_yml_path))
91
91
  solr_config["test"]["jetty_path"] if solr_config["test"]
92
92
  end
93
93
  raise Exception.new("Can't find jetty path to start test jetty. Expect a jetty_path key in config/solr.yml for test environment.") unless jetty_path
94
94
 
95
- JettySolrServer.new(
95
+ error = Jettywrapper.wrap(
96
96
  :jetty_home => File.expand_path(jetty_path, Rails.root),
97
- :sleep_after_start => 2).wrap do
97
+ :sleep_after_start => 2) do
98
98
  Rake::Task["blacklight:cucumber"].invoke
99
99
  end
100
+
101
+ raise "test failures: #{error}" if error
100
102
  end
101
103
 
102
104
  end
@@ -72,14 +72,14 @@ begin
72
72
  # when starting solr test server during functional tests use:
73
73
  #
74
74
  # rake SOLR_CONSOLE=true
75
- require File.expand_path('../jetty_solr_server.rb', __FILE__)
76
75
  desc "blacklight:solr with jetty/solr launch"
77
76
  task :with_solr do
77
+ require 'jettywrapper'
78
78
  # wrap tests with a test-specific Solr server
79
79
  # Need to look up where the test jetty is located
80
80
  # from solr.yml, we don't hardcode it anymore.
81
81
 
82
- solr_yml_path = locate_path("config", "solr.yml")
82
+ solr_yml_path = Blacklight.locate_path("config", "solr.yml")
83
83
  jetty_path = if ( File.exists?( solr_yml_path ))
84
84
  solr_config = YAML::load(File.open(solr_yml_path))
85
85
  solr_config["test"]["jetty_path"] if solr_config["test"]
@@ -88,11 +88,12 @@ begin
88
88
 
89
89
 
90
90
  # wrap tests with a test-specific Solr server
91
- JettySolrServer.new(
91
+ error = Jettywrapper.wrap(
92
92
  :jetty_home => File.expand_path(jetty_path, Rails.root),
93
- :sleep_after_start => 2).wrap do
93
+ :sleep_after_start => 2) do
94
94
  Rake::Task["blacklight:spec"].invoke
95
95
  end
96
+ raise "test failures: #{error}" if error
96
97
  end
97
98
 
98
99
 
@@ -18,11 +18,6 @@ check_errs()
18
18
  if [ "${1}" -ne "0" ]; then
19
19
  echo "ERROR # ${1} : ${2}"
20
20
 
21
- # Attempt to shut down jetty, if set.
22
- if [ $jetty_pid ]
23
- then
24
- kill $jetty_pid
25
- fi
26
21
  benchmark
27
22
  exit 1
28
23
  fi
@@ -53,12 +48,6 @@ rvm use "$@" --create
53
48
  check_errs $? "rvm failed. please run 'rvm install $@', and then re-run these tests."
54
49
 
55
50
  cd tmp/test_app
56
- cd test_jetty
57
- java -Djetty.port=8888 -Dsolr.solr.home=./solr -jar start.jar &> /dev/null &
58
- jetty_pid=$!
59
- cd ..
60
- bundle exec rake blacklight:spec
61
- check_errs $? "Rpec Tests failed."
62
- bundle exec rake blacklight:cucumber
63
- check_errs $? "Cucumber Tests failed."
51
+ bundle exec rake blacklight:hudson
52
+ check_errs $? "Tests failed."
64
53
  benchmark
@@ -17,12 +17,6 @@ check_errs()
17
17
  # Para. 2 is text to display on failure.
18
18
  if [ "${1}" -ne "0" ]; then
19
19
  echo "ERROR # ${1} : ${2}"
20
-
21
- # Attempt to shut down jetty, if set.
22
- if [ $jetty_pid ]
23
- then
24
- kill $jetty_pid
25
- fi
26
20
  benchmark
27
21
  exit 1
28
22
  fi
@@ -57,7 +51,7 @@ fi
57
51
  rvm use "$@" --create
58
52
  check_errs $? "rvm failed. please run 'rvm install $@', and then re-run these tests."
59
53
 
60
- if ! gem query -n rails -v "~>3.0" --installed > /dev/null; then
54
+ if ! gem query -n rails -v ">=3.1.1" --installed > /dev/null; then
61
55
  gem install --no-rdoc --no-ri 'rails'
62
56
  fi
63
57
 
@@ -69,12 +63,13 @@ rails new test_app
69
63
  cd test_app
70
64
  echo "
71
65
  source 'http://rubygems.org'
72
-
73
- gem 'rails', '>=3.0.4'
66
+ gem 'rack', '1.3.3'
67
+ gem 'rails', '~> 3.1.1'
74
68
  platforms :jruby do
75
69
  gem 'jruby-openssl'
76
70
  gem 'activerecord-jdbcsqlite3-adapter'
77
71
  gem 'jdbc-sqlite3'
72
+ gem 'mediashelf-loggable', '>= 0.4.8'
78
73
  end
79
74
  platforms :ruby do
80
75
  gem 'sqlite3-ruby', :require => 'sqlite3'
@@ -82,6 +77,23 @@ end
82
77
  gem 'blacklight', :path => '../../'
83
78
  gem 'jquery-rails'
84
79
 
80
+ group :assets do
81
+ gem 'sass-rails', '~> 3.1.1'
82
+ gem 'coffee-rails', '~> 3.1.1'
83
+ gem 'uglifier'
84
+ gem 'compass', '0.12.alpha.2'
85
+
86
+ platforms :ruby do
87
+ gem 'execjs'
88
+ gem 'therubyracer'
89
+ end
90
+
91
+ platforms :jruby do
92
+ gem 'therubyrhino'
93
+ end
94
+ end
95
+
96
+
85
97
  # For testing
86
98
  group :development, :test do
87
99
  gem 'rspec'
@@ -91,13 +103,14 @@ group :development, :test do
91
103
  gem 'database_cleaner'
92
104
  gem 'capybara'
93
105
  gem 'webrat'
94
- gem 'aruba'
95
106
  end
96
107
 
97
- gem 'devise'
108
+ gem 'jettywrapper', '>= 1.2.0'
109
+ gem \"devise\"
98
110
  " > Gemfile
99
111
 
100
112
  bundle install --local &> /dev/null
113
+ bundle update
101
114
  # If a local install fails, try a full install.
102
115
  if [ "$?" -ne "0" ]
103
116
  then
@@ -106,25 +119,19 @@ fi
106
119
  check_errs $? "Bundle install failed."
107
120
  rails generate blacklight -d
108
121
  check_errs $? "Blacklight generator failed"
109
- rake db:migrate
122
+ bundle exec rake db:migrate
110
123
  check_errs $? "Rake Migration failed"
111
124
  rails g cucumber:install &> /dev/null
112
- jetty_zip="/tmp/bl_jetty.zip"
125
+ jetty_zip="/tmp/bl_jetty_3_5_0.zip"
113
126
  if [ ! -f $jetty_zip ]
114
127
  then
115
- curl -L https://github.com/projectblacklight/blacklight-jetty/zipball/v1.4.1-1 > $jetty_zip
128
+ curl -L https://github.com/projectblacklight/blacklight-jetty/zipball/v3.5.0 -o $jetty_zip
116
129
  check_errs $? "Jetty file does not exist, and cannot be downloaded."
117
130
  fi
118
131
  rails g blacklight:jetty test_jetty -e test -d $jetty_zip
119
132
  check_errs $? "Jetty setup failed."
120
133
  rm public/index.html
121
- rake solr:marc:index_test_data RAILS_ENV=test
122
- cd test_jetty
123
- java -Djetty.port=8888 -Dsolr.solr.home=./solr -jar start.jar &> /dev/null &
124
- jetty_pid=$!
125
- cd ..
126
- bundle exec rake blacklight:spec
127
- check_errs $? "Rpec Tests failed."
128
- bundle exec rake blacklight:cucumber
129
- check_errs $? "Cucumber Tests failed."
134
+ bundle exec rake solr:marc:index_test_data RAILS_ENV=test
135
+ bundle exec rake blacklight:hudson
136
+ check_errs $? "Tests failed."
130
137
  benchmark
@@ -96,19 +96,20 @@ Feature: Did You Mean
96
96
  And I press "search"
97
97
  Then I should not see "Did you mean"
98
98
 
99
- Scenario: Exact Threshold number of results for spelling suggestion
100
- Given I am on the home page
101
- # polit gives 5 results in 30 record demo index - 5 is default cutoff
102
- And I fill in "q" with "polit"
103
- And I press "search"
104
- Then I should see "Did you mean"
105
-
106
- Scenario: Same number of results as spelling suggestion
107
- Given I am on the home page
108
- # den gives 1 result in 30 record demo index - suggestion don is 1 result also
109
- And I fill in "q" with "den"
110
- And I press "search"
111
- Then I should not see "Did you mean"
99
+ ## can't get these to work with solr 3.4
100
+ # Scenario: Exact Threshold number of results for spelling suggestion
101
+ # Given I am on the home page
102
+ # # polit gives 5 results in 30 record demo index - 5 is default cutoff
103
+ # And I fill in "q" with "polit"
104
+ # And I press "search"
105
+ # Then I should see "Did you mean"
106
+ #
107
+ # Scenario: Same number of results as spelling suggestion
108
+ # Given I am on the home page
109
+ # # den gives 1 result in 30 record demo index - suggestion don is 1 result also
110
+ # And I fill in "q" with "den"
111
+ # And I press "search"
112
+ # Then I should not see "Did you mean"
112
113
 
113
114
  Scenario: Multiple terms should have individual links, not single query link
114
115
  Given I am on the home page
@@ -9,7 +9,7 @@ Given /^I am logged in as "([^\"]*)"$/ do |login|
9
9
  fill_in("user_password", :with => "password")
10
10
  click_button("Sign in")
11
11
  # response.body.should =~ /Logged/m
12
- Then 'I should see "Log Out"'
12
+ step 'I should see "Log Out"'
13
13
  end
14
14
 
15
15
  Given /^"([^\"]*)" has saved a search with term "([^\"]*)"$/ do |user, term|
@@ -28,9 +28,9 @@ Given /^the application is configured to have searchable fields "([^\"]*)" with
28
28
  labels = fields.split(", ")
29
29
  values = values.split(", ")
30
30
  combined = labels.zip(values)
31
- Blacklight.config[:search_fields] = []
31
+ CatalogController.blacklight_config[:search_fields] = []
32
32
  combined.each do |pair|
33
- Blacklight.config[:search_fields] << pair
33
+ CatalogController.blacklight_config[:search_fields] << pair
34
34
  end
35
35
  end
36
36
 
@@ -56,9 +56,9 @@ Given /^the application is configured to have sort fields "([^\"]*)" with values
56
56
  labels = fields.split(", ")
57
57
  values = values.split(", ")
58
58
  combined = labels.zip(values)
59
- Blacklight.config[:sort_fields] = []
59
+ CatalogController.blacklight_config[:sort_fields] = []
60
60
  combined.each do |pair|
61
- Blacklight.config[:sort_fields] << pair
61
+ CatalogController.blacklight_config[:sort_fields] << pair
62
62
  end
63
63
  end
64
64
 
@@ -7,21 +7,11 @@ describe ApplicationController do
7
7
 
8
8
  describe "#default_html_head" do
9
9
  it "should setup js and css defaults" do
10
-
11
- controller.should_receive(:use_asset_pipeline?).any_number_of_times.and_return(false)
12
10
  controller.send(:default_html_head)
13
- controller.javascript_includes.should include(["jquery-1.4.2.min.js", "jquery-ui-1.8.1.custom.min.js", "blacklight/blacklight"])#find do |item|
14
- # item == ["jquery-1.4.2.min.js", "jquery-ui-1.7.2.custom.min.js", "blacklight", "application", "accordion", "lightbox", {:plugin=>:blacklight}]
15
- #end
16
-
17
- controller.stylesheet_links.should include(["yui", "jquery/ui-lightness/jquery-ui-1.8.1.custom.css", "blacklight/blacklight", {:media=>"all"}])
18
- end
19
11
 
20
- it "should support rails 3.1 asset pipeline js and css defaults" do
21
- controller.should_receive(:use_asset_pipeline?).any_number_of_times.and_return(true)
22
- controller.send(:default_html_head)
23
- controller.javascript_includes.should include(["application"])
24
- controller.stylesheet_links.should include(["application"])
12
+ # by default, these should be empty, but left in for backwards compatibility
13
+ controller.javascript_includes.should be_empty
14
+ controller.stylesheet_links.should be_empty
25
15
  end
26
16
  end
27
17
  end
@@ -47,6 +47,18 @@ describe CatalogController do
47
47
  end
48
48
  end
49
49
 
50
+ describe "catalog_url for SolrDocument", :test => true do
51
+ it "should route correctly" do
52
+ { :get => catalog_url(SolrDocument.new(:id => 'asdf')) }.should route_to(:controller => 'catalog', :action => 'show', :id => 'asdf')
53
+ end
54
+
55
+ it "should escape solr document ids" do
56
+ catalog_path(SolrDocument.new(:id => 'http://example.com')).should == "/catalog/http%3A%2F%2Fexample%2Ecom"
57
+ { :get => catalog_url(SolrDocument.new(:id => 'http://example.com'))}.should route_to(:controller => 'catalog', :action => 'show', :id => 'http://example.com')
58
+ end
59
+
60
+ end
61
+
50
62
 
51
63
 
52
64
  # INDEX ACTION
@@ -66,38 +78,39 @@ describe CatalogController do
66
78
  end
67
79
 
68
80
  it "should have no search history if no search criteria" do
81
+ controller.should_receive(:get_search_results)
69
82
  session[:history] = []
70
83
  get :index
71
84
  session[:history].length.should == 0
72
85
  end
73
86
 
74
87
  # check each user manipulated parameter
75
- it "should have docs and facets for query with results" do
88
+ it "should have docs and facets for query with results", :integration => true do
76
89
  get :index, :q => @user_query
77
90
  assigns_response.docs.size.should > 1
78
91
  assert_facets_have_values(assigns_response.facets)
79
92
  end
80
- it "should have docs and facets for existing facet value" do
93
+ it "should have docs and facets for existing facet value", :integration => true do
81
94
  get :index, :f => @facet_query
82
95
  assigns_response.docs.size.should > 1
83
96
  assert_facets_have_values(assigns_response.facets)
84
97
  end
85
- it "should have docs and facets for non-default results per page" do
98
+ it "should have docs and facets for non-default results per page", :integration => true do
86
99
  num_per_page = 7
87
100
  get :index, :per_page => num_per_page
88
101
  assigns_response.docs.size.should == num_per_page
89
102
  assert_facets_have_values(assigns_response.facets)
90
103
  end
91
104
 
92
- it "should have docs and facets for second page" do
105
+ it "should have docs and facets for second page", :integration => true do
93
106
  page = 2
94
107
  get :index, :page => page
95
108
  assigns_response.docs.size.should > 1
96
- assigns_response.params[:start].to_i.should == (page-1) * Blacklight.config[:default_solr_params][:per_page]
109
+ assigns_response.params[:start].to_i.should == (page-1) * @controller.blacklight_config[:default_solr_params][:rows]
97
110
  assert_facets_have_values(assigns_response.facets)
98
111
  end
99
112
 
100
- it "should have no docs or facet values for query without results" do
113
+ it "should have no docs or facet values for query without results", :integration => true do
101
114
  get :index, :q => @no_docs_query
102
115
 
103
116
  assigns_response.docs.size.should == 0
@@ -106,12 +119,15 @@ describe CatalogController do
106
119
  end
107
120
  end
108
121
 
109
- it "should have a spelling suggestion for an appropriately poor query" do
122
+ it "should have a spelling suggestion for an appropriately poor query", :integration => true do
110
123
  get :index, :q => 'boo'
111
124
  assigns_response.spelling.words.should_not be_nil
112
125
  end
113
126
 
114
127
  describe "session" do
128
+ before do
129
+ controller.stub(:get_search_results)
130
+ end
115
131
  it "should include :search key with hash" do
116
132
  get :index
117
133
  session[:search].should_not be_nil
@@ -150,39 +166,30 @@ describe CatalogController do
150
166
  end
151
167
  end
152
168
 
153
- describe "with index action with arbitrary key" do
154
- before(:each) do
155
- session[:history] = []
156
- get :index, :arbitrary_key_from_plugin => "value"
157
- end
158
- it "should save search history" do
159
- session[:history].length.should_not == 0
160
- end
161
- end
162
-
163
169
  # check with no user manipulation
164
170
  describe "for default query" do
165
- it "should get documents when no query" do
171
+ it "should get documents when no query", :integration => true do
166
172
  get :index
167
173
  assigns_response.docs.size.should > 1
168
174
  end
169
- it "should get facets when no query" do
175
+ it "should get facets when no query", :integration => true do
170
176
  get :index
171
177
  assert_facets_have_values(assigns_response.facets)
172
178
  end
173
179
  end
174
180
 
175
- it "should get rss feed" do
181
+ it "should get rss feed", :integration => true do
176
182
  get :index, :format => 'rss'
177
183
  response.should be_success
178
184
  end
179
185
 
180
186
  it "should render index.html.erb" do
187
+ controller.stub(:get_search_results)
181
188
  get :index
182
189
  response.should render_template(:index)
183
190
  end
184
191
  # NOTE: status code is always 200 in isolation mode ...
185
- it "HTTP status code for GET should be 200" do
192
+ it "HTTP status code for GET should be 200", :integration => true do
186
193
  get :index
187
194
  response.should be_success
188
195
  end
@@ -208,10 +215,19 @@ describe CatalogController do
208
215
 
209
216
  doc_id = '2007020969'
210
217
 
211
- it "should get document" do
218
+ it "should get document", :integration => true do
212
219
  get :show, :id => doc_id
213
220
  assigns[:document].should_not be_nil
214
221
  end
222
+
223
+ describe "previous/next documents" do
224
+ before do
225
+ @mock_response = mock()
226
+ @mock_document = mock()
227
+ @mock_document.stub(:export_formats => {})
228
+ controller.stub(:get_solr_response_for_doc_id => [@mock_response, @mock_document],
229
+ :get_single_doc_via_search => @mock_document)
230
+ end
215
231
  it "should set previous document if counter present in session" do
216
232
  session[:search] = {:q => "", :counter => 2}
217
233
  get :show, :id => doc_id
@@ -239,22 +255,36 @@ describe CatalogController do
239
255
  assigns[:next_document].should_not be_nil
240
256
  end
241
257
  it "should not set next document if counter is >= number of docs" do
258
+ controller.stub(:get_single_doc_via_search => nil)
242
259
  session[:search] = {:counter => 66666666}
243
260
  get :show, :id => doc_id
244
261
  assigns[:next_document].should be_nil
245
262
  end
263
+ end
246
264
 
247
265
  # NOTE: status code is always 200 in isolation mode ...
248
- it "HTTP status code for GET should be 200" do
266
+ it "HTTP status code for GET should be 200", :integration => true do
249
267
  get :show, :id => doc_id
250
268
  response.should be_success
251
269
  end
252
270
  it "should render show.html.erb" do
271
+ @mock_response = mock()
272
+ @mock_document = mock()
273
+ @mock_document.stub(:export_formats => {})
274
+ controller.stub(:get_solr_response_for_doc_id => [@mock_response, @mock_document],
275
+ :get_single_doc_via_search => @mock_document)
253
276
  get :show, :id => doc_id
254
277
  response.should render_template(:show)
255
278
  end
256
279
 
257
280
  describe "@document" do
281
+ before do
282
+ @mock_response = mock()
283
+ @mock_response.stub(:docs => [{ :id => 'my_fake_doc' }])
284
+ @mock_document = mock()
285
+ controller.stub(:find => @mock_response,
286
+ :get_single_doc_via_search => @mock_document)
287
+ end
258
288
  before(:each) do
259
289
  get :show, :id => doc_id
260
290
  @document = assigns[:document]
@@ -275,6 +305,14 @@ describe CatalogController do
275
305
  "mock_export"
276
306
  end
277
307
  end
308
+ before do
309
+ @mock_response = mock()
310
+ @mock_document = mock()
311
+ @mock_response.stub(:docs => [{ :id => 'my_fake_doc' }])
312
+ @mock_document = mock()
313
+ controller.stub(:find => @mock_response,
314
+ :get_single_doc_via_search => @mock_document)
315
+ end
278
316
 
279
317
  before(:each) do
280
318
 
@@ -302,8 +340,15 @@ describe CatalogController do
302
340
 
303
341
  end # describe show action
304
342
 
305
-
306
343
  describe "opensearch" do
344
+ before do
345
+ @mock_response = mock()
346
+ @mock_document = mock()
347
+ @mock_response.stub(:docs => [{ :id => 'my_fake_doc' }, { :id => 'my_other_doc'}])
348
+ @mock_document = mock()
349
+ controller.stub(:find => @mock_response,
350
+ :get_single_doc_via_search => @mock_document)
351
+ end
307
352
  it "should return an opensearch description" do
308
353
  get :opensearch, :format => 'xml'
309
354
  response.should be_success
@@ -316,6 +361,14 @@ describe CatalogController do
316
361
  #=end
317
362
  describe "email/sms" do
318
363
  doc_id = '2007020969'
364
+ before do
365
+ @mock_response = mock()
366
+ @mock_document = mock()
367
+ @mock_response.stub(:docs => [{ :id => 'my_fake_doc' }, { :id => 'my_other_doc'}])
368
+ @mock_document = mock()
369
+ controller.stub(:find => @mock_response,
370
+ :get_single_doc_via_search => @mock_document)
371
+ end
319
372
  before(:each) do
320
373
  request.env["HTTP_REFERER"] = "/catalog/#{doc_id}"
321
374
  SolrDocument.use_extension( Blacklight::Solr::Document::Email )
@@ -382,6 +435,12 @@ describe CatalogController do
382
435
 
383
436
  describe "errors" do
384
437
  it "should return status 404 for a record that doesn't exist" do
438
+ @mock_response = mock()
439
+ @mock_document = mock()
440
+ @mock_response.stub(:docs => [])
441
+ @mock_document = mock()
442
+ controller.stub(:find => @mock_response,
443
+ :get_single_doc_via_search => @mock_document)
385
444
  get :show, :id=>"987654321"
386
445
  response.redirect_url.should == root_url
387
446
  request.flash[:notice].should == "Sorry, you have requested a record that doesn't exist."
@@ -389,6 +448,7 @@ describe CatalogController do
389
448
  response.status.should == 404
390
449
  end
391
450
  it "should return a status 500 for a bad search" do
451
+ controller.stub(:get_search_results) { |*args| raise RSolr::Error::Http.new(nil, nil) }
392
452
  get :index, :q=>"+"
393
453
  response.redirect_url.should == root_url
394
454
  request.flash[:notice].should == "Sorry, I don't understand your search."
@@ -398,6 +458,24 @@ describe CatalogController do
398
458
 
399
459
  end
400
460
 
461
+ context "without a user authentication provider" do
462
+ render_views
463
+
464
+ before do
465
+ controller.stub(:has_user_authentication_provider?) { false }
466
+ @mock_response = mock()
467
+ @mock_document = mock()
468
+ @mock_response.stub(:docs => [], :total => 1, :facets => [], :facet_by_field_name => nil)
469
+ @mock_document = mock()
470
+ controller.stub(:find => @mock_response,
471
+ :get_single_doc_via_search => @mock_document)
472
+ end
473
+
474
+ it "should not show user util links" do
475
+ get :index
476
+ response.body.should_not =~ /Login/
477
+ end
478
+ end
401
479
  end
402
480
 
403
481