blacklight 3.0pre1 → 3.0pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (114) hide show
  1. data/.gitmodules +0 -6
  2. data/README.rdoc +94 -87
  3. data/blacklight.gemspec +1 -1
  4. data/config/routes.rb +1 -1
  5. data/lib/blacklight.rb +2 -2
  6. data/lib/blacklight/catalog.rb +10 -12
  7. data/lib/blacklight/controller.rb +2 -2
  8. data/lib/blacklight/engine.rb +5 -2
  9. data/lib/blacklight/solr/document.rb +1 -1
  10. data/lib/blacklight/solr/document/marc.rb +1 -16
  11. data/lib/blacklight/solr_helper.rb +43 -14
  12. data/lib/blacklight/version.rb +1 -1
  13. data/lib/generators/blacklight/assets_generator.rb +25 -0
  14. data/lib/generators/blacklight/blacklight_generator.rb +16 -1
  15. data/lib/generators/blacklight/jetty_generator.rb +101 -0
  16. data/lib/generators/blacklight/solr_conf_generator.rb +25 -0
  17. data/lib/generators/blacklight/templates/catalog_controller.rb +0 -1
  18. data/lib/generators/blacklight/templates/config/solr.yml +14 -2
  19. data/lib/generators/blacklight/templates/public/images/{blacklight/bg.png → bg.png} +0 -0
  20. data/lib/generators/blacklight/templates/public/images/{blacklight/border.png → border.png} +0 -0
  21. data/lib/generators/blacklight/templates/public/images/{blacklight/bul_sq_gry.gif → bul_sq_gry.gif} +0 -0
  22. data/lib/generators/blacklight/templates/public/images/{blacklight/checkmark.gif → checkmark.gif} +0 -0
  23. data/lib/generators/blacklight/templates/public/images/{blacklight/logo.png → logo.png} +0 -0
  24. data/lib/generators/blacklight/templates/public/images/{blacklight/magnifying_glass.gif → magnifying_glass.gif} +0 -0
  25. data/lib/generators/blacklight/templates/public/images/{blacklight/remove.gif → remove.gif} +0 -0
  26. data/lib/generators/blacklight/templates/public/images/{blacklight/separator.gif → separator.gif} +0 -0
  27. data/lib/generators/blacklight/templates/public/images/{blacklight/start_over.gif → start_over.gif} +0 -0
  28. data/lib/generators/blacklight/templates/public/javascripts/blacklight.js +5 -0
  29. data/lib/generators/blacklight/templates/public/stylesheets/blacklight.css +9 -3
  30. data/lib/generators/blacklight/templates/solr_conf/schema.xml +339 -0
  31. data/lib/generators/blacklight/templates/solr_conf/solrconfig.xml +578 -0
  32. data/lib/railties/all_tests.rake +11 -0
  33. data/lib/railties/blacklight.rake +0 -52
  34. data/lib/railties/blacklight_cucumber.rake +125 -0
  35. data/lib/railties/blacklight_rspec.rake +128 -0
  36. data/lib/railties/{test_solr_server.rb → jetty_solr_server.rb} +22 -45
  37. data/lib/railties/solr_marc.rake +24 -5
  38. data/test_support/.rspec +1 -0
  39. data/test_support/data/test_data.utf8.mrc +1 -0
  40. data/test_support/features/bookmarks.feature +88 -0
  41. data/test_support/features/did_you_mean.feature +129 -0
  42. data/test_support/features/folder.feature +67 -0
  43. data/test_support/features/librarian_view.feature +17 -0
  44. data/test_support/features/record_view.feature +34 -0
  45. data/test_support/features/saved_searches.feature +49 -0
  46. data/test_support/features/search.feature +86 -0
  47. data/test_support/features/search_filters.feature +121 -0
  48. data/test_support/features/search_history.feature +95 -0
  49. data/test_support/features/search_results.feature +61 -0
  50. data/test_support/features/search_sort.feature +29 -0
  51. data/test_support/features/step_definitions/bookmarks_steps.rb +5 -0
  52. data/test_support/features/step_definitions/error_steps.rb +4 -0
  53. data/test_support/features/step_definitions/folder_steps.rb +26 -0
  54. data/test_support/features/step_definitions/general_steps.rb +49 -0
  55. data/test_support/features/step_definitions/record_view_steps.rb +11 -0
  56. data/test_support/features/step_definitions/saved_searches_steps.rb +21 -0
  57. data/test_support/features/step_definitions/search_facets_steps.rb +28 -0
  58. data/test_support/features/step_definitions/search_history_steps.rb +8 -0
  59. data/test_support/features/step_definitions/search_result_steps.rb +113 -0
  60. data/test_support/features/step_definitions/search_steps.rb +102 -0
  61. data/test_support/features/step_definitions/user_steps.rb +4 -0
  62. data/test_support/features/step_definitions/web_steps.rb +211 -0
  63. data/test_support/features/support/env.rb +49 -0
  64. data/test_support/features/support/paths.rb +55 -0
  65. data/test_support/features/support/selectors.rb +39 -0
  66. data/test_support/features/unapi.feature +30 -0
  67. data/test_support/spec/controllers/application_controller_spec.rb +22 -0
  68. data/test_support/spec/controllers/catalog_controller_spec.rb +480 -0
  69. data/test_support/spec/controllers/folder_controller_spec.rb +40 -0
  70. data/test_support/spec/controllers/search_history_controller_spec.rb +45 -0
  71. data/test_support/spec/data/sample_docs.yml +655 -0
  72. data/test_support/spec/data/test_data.utf8.mrc +1 -0
  73. data/test_support/spec/helpers/blacklight_helper_spec.rb +482 -0
  74. data/test_support/spec/helpers/hash_as_hidden_fields_spec.rb +23 -0
  75. data/test_support/spec/helpers/render_constraints_helper_spec.rb +64 -0
  76. data/test_support/spec/helpers/search_history_helper_spec.rb +11 -0
  77. data/test_support/spec/helpers/solr_helper_spec.rb +873 -0
  78. data/test_support/spec/lib/blacklight_email_spec.rb +23 -0
  79. data/test_support/spec/lib/blacklight_sms_spec.rb +23 -0
  80. data/test_support/spec/lib/blacklight_solr_document_dublin_core_spec.rb +41 -0
  81. data/test_support/spec/lib/blacklight_solr_document_marc_spec.rb +88 -0
  82. data/test_support/spec/lib/blacklight_solr_document_spec.rb +173 -0
  83. data/test_support/spec/lib/blacklight_spec.rb +39 -0
  84. data/test_support/spec/lib/configurable_spec.rb +97 -0
  85. data/test_support/spec/lib/facet_paginator_spec.rb +93 -0
  86. data/test_support/spec/lib/marc_export_spec.rb +444 -0
  87. data/test_support/spec/lib/search_fields_spec.rb +105 -0
  88. data/test_support/spec/lib/tasks/blacklight_task_spec.rb +21 -0
  89. data/test_support/spec/lib/tasks/solr_marc_task_spec.rb +59 -0
  90. data/test_support/spec/models/bookmark_spec.rb +37 -0
  91. data/test_support/spec/models/record_mailer_spec.rb +67 -0
  92. data/test_support/spec/models/search_spec.rb +55 -0
  93. data/test_support/spec/models/solr_docment_spec.rb +111 -0
  94. data/test_support/spec/rcov.opts +3 -0
  95. data/test_support/spec/spec.opts +4 -0
  96. data/test_support/spec/spec_helper.rb +38 -0
  97. data/test_support/spec/support/action_controller.rb +42 -0
  98. data/test_support/spec/support/assert_difference.rb +16 -0
  99. data/test_support/spec/support/include_text.rb +20 -0
  100. data/test_support/spec/views/catalog/_constraints_element.html.erb_spec.rb +59 -0
  101. data/test_support/spec/views/catalog/_document_list.html.erb_spec.rb +8 -0
  102. data/test_support/spec/views/catalog/_facets.html.erb_spec.rb +182 -0
  103. data/test_support/spec/views/catalog/_index_partials/_default.erb_spec.rb +70 -0
  104. data/test_support/spec/views/catalog/_show_partials/_default.html.erb_spec.rb +70 -0
  105. data/test_support/spec/views/catalog/index.atom.builder_spec.rb +141 -0
  106. data/test_support/spec/views/catalog/show.html.erb_spec.rb +100 -0
  107. data/test_support/spec/views/catalog/unapi.xml.builder_spec.rb +45 -0
  108. metadata +95 -98
  109. data/lib/blacklight/marc.rb +0 -46
  110. data/lib/blacklight/marc/citation.rb +0 -251
  111. data/lib/railties/cucumber.rake +0 -53
  112. data/lib/railties/rspec.rake +0 -188
  113. data/spec/helpers/catalog_helper_spec.rb +0 -111
  114. data/spec/views/catalog/_sms_form.html.erb_spec.rb +0 -19
@@ -0,0 +1,11 @@
1
+ namespace :blacklight do
2
+ desc "Run Blacklight cucumber and rspec"
3
+ task :all_tests => ['blacklight:spec:with_solr', 'blacklight:cucumber:with_solr']
4
+
5
+ namespace :all_tests do
6
+ desc "Run Blacklight rspec and cucumber tests with rcov"
7
+ rm "blacklight-coverage.data" if File.exist?("blacklight-coverage.data")
8
+ task :rcov => ['blacklight:spec:rcov', 'blacklight:cucumber:rcov']
9
+ end
10
+ end
11
+
@@ -11,56 +11,4 @@ namespace :blacklight do
11
11
 
12
12
  end
13
13
 
14
- # Rake tasks for Blacklight plugin
15
-
16
- # if you would like to see solr startup messages on STDERR
17
- # when starting solr test server during functional tests use:
18
- #
19
- # rake SOLR_CONSOLE=true
20
- require File.expand_path(File.join(File.dirname(__FILE__), 'test_solr_server.rb'))
21
-
22
-
23
- SOLR_PARAMS = {
24
- :quiet => ENV['SOLR_CONSOLE'] ? false : true,
25
- :jetty_home => ENV['SOLR_JETTY_HOME'] || File.expand_path('./jetty'),
26
- :jetty_port => ENV['SOLR_JETTY_PORT'] || 8888,
27
- :solr_home => ENV['SOLR_HOME'] || File.expand_path('./jetty/solr')
28
- }
29
-
30
- NO_JETTY_MSG = "In order to use solr:spec, you much checkout Blacklight-jetty from our github repository, and place it in the root of your application under the directory /jetty. \n prompt> git clone git@github.com:projectblacklight/blacklight-jetty.git jetty \n You will also need to pupulate your test instance of solr with test data. You can do this with: \n prompt> rake solr:marc:index_test_data RAILS_ENV=test"
31
-
32
- namespace :solr do
33
-
34
- desc "Calls RSpec Examples wrapped in the test instance of Solr"
35
- task :spec do
36
- raise NO_JETTY_MSG unless File.exists? SOLR_PARAMS[:jetty_home]
37
- # wrap tests with a test-specific Solr server
38
- error = TestSolrServer.wrap(SOLR_PARAMS) do
39
- rm_f "coverage.data"
40
- Rake::Task["rake:spec"].invoke
41
- #puts `ps aux | grep start.jar`
42
- end
43
- raise "test failures: #{error}" if error
44
- end
45
-
46
- desc "Calls Cucumber Features wrapped in the test instance of Solr"
47
- task :features do
48
- # wrap tests with a test-specific Solr server
49
- error = TestSolrServer.wrap(SOLR_PARAMS) do
50
- Rake::Task["cucumber:all"].invoke
51
- #puts `ps aux | grep start.jar`
52
- end
53
- raise "test failures: #{error}" if error
54
- end
55
-
56
- desc "Runs all features and specs"
57
- task :all do
58
- error = TestSolrServer.wrap(SOLR_PARAMS) do
59
- Rake::Task["rake:spec"].invoke
60
- Rake::Task["cucumber:all"].invoke
61
- end
62
- raise "test failures: #{error}" if error
63
- end
64
-
65
- end
66
14
 
@@ -0,0 +1,125 @@
1
+ # IMPORTANT: This file is generated by cucumber-rails - edit at your own peril.
2
+ # It is recommended to regenerate this file in the future when you upgrade to a
3
+ # newer version of cucumber-rails. Consider adding your own code to a new file
4
+ # instead of editing this one. Cucumber will automatically load all features/**/*.rb
5
+ # files.
6
+
7
+ # Blacklight customization, trick Cucumber into looking in our current
8
+ # location for Rails.root, even though we're going to give it features
9
+ # from elsewhere.
10
+ ENV['RAILS_ROOT'] = Rails.root
11
+
12
+ # blacklight_features, where to find features inside blacklight source?
13
+ blacklight_features = File.expand_path("./test_support/features", Blacklight.root)
14
+
15
+ unless ARGV.any? {|a| a =~ /^gems/} # Don't load anything when running the gems:* tasks
16
+
17
+ vendored_cucumber_bin = Dir["#{Rails.root}/vendor/{gems,plugins}/cucumber*/bin/cucumber"].first
18
+ $LOAD_PATH.unshift(File.dirname(vendored_cucumber_bin) + '/../lib') unless vendored_cucumber_bin.nil?
19
+
20
+ begin
21
+ require 'cucumber/rake/task'
22
+
23
+ namespace :blacklight do
24
+ namespace :cucumber do
25
+ Cucumber::Rake::Task.new({:ok => 'db:test:prepare'}, 'Run features that should pass') do |t|
26
+ # Blacklight customization, call features from external location, pass
27
+ # in feature location wtih cucumber_opts, yeah it's weird but that's how.
28
+ t.cucumber_opts = blacklight_features
29
+
30
+ t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
31
+ t.fork = true # You may get faster startup if you set this to false
32
+ t.profile = 'default'
33
+ end
34
+
35
+ Cucumber::Rake::Task.new({:wip => 'db:test:prepare'}, 'Run features that are being worked on') do |t|
36
+ # Blacklight customization, call features from external location, pass
37
+ # in feature location wtih cucumber_opts, yeah it's weird but that's how.
38
+ t.cucumber_opts = blacklight_features
39
+
40
+
41
+ t.binary = vendored_cucumber_bin
42
+ t.fork = true # You may get faster startup if you set this to false
43
+ t.profile = 'wip'
44
+ end
45
+
46
+ Cucumber::Rake::Task.new({:rerun => 'db:test:prepare'}, 'Record failing features and run only them if any exist') do |t|
47
+ # Blacklight customization, call features from external location, pass
48
+ # in feature location wtih cucumber_opts, yeah it's weird but that's how.
49
+ t.cucumber_opts = blacklight_features
50
+
51
+ t.binary = vendored_cucumber_bin
52
+ t.fork = true # You may get faster startup if you set this to false
53
+ t.profile = 'rerun'
54
+ end
55
+
56
+ Cucumber::Rake::Task.new({:rcov => 'db:test:prepare'}, 'Run features with rcov') do |t|
57
+ # Blacklight customization, call features from external location, pass
58
+ # in feature location wtih cucumber_opts, yeah it's weird but that's how.
59
+ t.cucumber_opts = blacklight_features
60
+
61
+ t.binary = vendored_cucumber_bin # If nil, the gem's binary is used.
62
+ t.fork = true # You may get faster startup if you set this to false
63
+ t.profile = 'default'
64
+ t.rcov = true
65
+ t.rcov_opts = %w{--rails --exclude osx\/objc,gems\/,spec\/,features\/ --aggregate blacklight-coverage.data}
66
+ t.rcov_opts << %[-o "blacklight-coverage"]
67
+ end
68
+
69
+
70
+ desc 'Run all features'
71
+ task :all => [:ok, :wip]
72
+
73
+
74
+ # Solr wrapper. for now just for blacklight:cucumber, plan to
75
+ # provide it for all variants eventually.
76
+ # if you would like to see solr startup messages on STDERR
77
+ # when starting solr test server during functional tests use:
78
+ #
79
+ # rake SOLR_CONSOLE=true
80
+ require File.expand_path('../jetty_solr_server.rb', __FILE__)
81
+ desc "blacklight:cucumber with jetty/solr launch"
82
+ task :with_solr do
83
+ # wrap tests with a test-specific Solr server
84
+ # Need to look up where the test jetty is located
85
+ # from solr.yml, we don't hardcode it anymore.
86
+
87
+ solr_yml_path = locate_path("config", "solr.yml")
88
+ jetty_path = if ( File.exists?( solr_yml_path ))
89
+ solr_config = YAML::load(File.open(solr_yml_path))
90
+ solr_config["test"]["jetty_path"] if solr_config["test"]
91
+ end
92
+ 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
93
+
94
+ JettySolrServer.new(
95
+ :jetty_home => File.expand_path(jetty_path, Rails.root),
96
+ :sleep_after_start => 2).wrap do
97
+ Rake::Task["blacklight:cucumber"].invoke
98
+ end
99
+ end
100
+
101
+ end
102
+
103
+ desc 'Alias for blacklight:cucumber:ok'
104
+ task :cucumber => 'blacklight:cucumber:ok'
105
+
106
+ end
107
+
108
+
109
+
110
+
111
+ task :features => :cucumber do
112
+ STDERR.puts "*** The 'features' task is deprecated. See rake -T cucumber ***"
113
+ end
114
+
115
+ # In case we don't have ActiveRecord, append a no-op task that we can depend upon.
116
+ task 'db:test:prepare' do
117
+ end
118
+ rescue LoadError
119
+ desc 'cucumber rake task not available (cucumber not installed)'
120
+ task :cucumber do
121
+ abort 'Cucumber rake task is not available. Be sure to install cucumber as a gem or plugin'
122
+ end
123
+ end
124
+
125
+ end
@@ -0,0 +1,128 @@
1
+ # Blacklight customization of the Rake tasks that come with rspec-2, to run
2
+ # specs located in alternate location (inside BL plugin), and to provide
3
+ # rake tasks for jetty/solr wrapping.
4
+ #
5
+ # Same tasks as in ordinary rspec, but prefixed with blacklight:.
6
+ #
7
+ # rspec2 keeps it's rake tasks inside it's own code, it doesn't generate them.
8
+ # We had to copy them from there and modify, may have to be done again
9
+ # if rspec2 changes a lot, but this code looks relatively cleanish.
10
+ begin
11
+ require 'rspec/core'
12
+ require 'rspec/core/rake_task'
13
+ Rake.application.instance_variable_get('@tasks')['default'].prerequisites.delete('test')
14
+
15
+ spec_prereq = Rails.configuration.generators.options[:rails][:orm] == :active_record ? "db:test:prepare" : :noop
16
+ task :noop do; end
17
+ #task :default => :spec
18
+
19
+ blacklight_spec = File.expand_path("./test_support/spec", Blacklight.root)
20
+
21
+ # Set env variable to tell our spec/spec_helper.rb where we really are,
22
+ # so it doesn't have to guess with relative path, which will be wrong
23
+ # since we allow spec_dir to be in a remote location. spec_helper.rb
24
+ # needs it before Rails.root is defined there, even though we can
25
+ # oddly get it here, i dunno.
26
+ ENV['RAILS_ROOT'] = Rails.root
27
+
28
+ namespace :blacklight do
29
+
30
+ desc "Run all specs in spec directory (excluding plugin specs)"
31
+ RSpec::Core::RakeTask.new(:spec => spec_prereq) do |t|
32
+ # the user might not have run rspec generator because they don't
33
+ # actually need it, but without an ./.rspec they won't get color,
34
+ # let's insist.
35
+ t.rspec_opts = "--colour"
36
+
37
+ # pattern directory name defaults to ./**/*_spec.rb, but has a more concise command line echo
38
+ t.pattern = "#{blacklight_spec}"
39
+ end
40
+
41
+ # Don't understand what this does or how to make it use our remote stats_directory
42
+ #task :stats => "spec:statsetup"
43
+
44
+ namespace :spec do
45
+ [:requests, :models, :controllers, :views, :helpers, :mailers, :lib, :routing].each do |sub|
46
+ desc "Run the code examples in spec/#{sub}"
47
+ RSpec::Core::RakeTask.new(sub => spec_prereq) do |t|
48
+ # the user might not have run rspec generator because they don't
49
+ # actually need it, but without an ./.rspec they won't get color,
50
+ # let's insist.
51
+ t.rspec_opts = "--colour"
52
+
53
+ # pattern directory name defaults to ./**/*_spec.rb, but has a more concise command line echo
54
+ t.pattern = "#{blacklight_spec}/#{sub}"
55
+ end
56
+ end
57
+
58
+ desc "Run all specs with rcov"
59
+ RSpec::Core::RakeTask.new(:rcov => spec_prereq) do |t|
60
+ t.rcov = true
61
+ # pattern directory name defaults to ./**/*_spec.rb, but has a more concise command line echo
62
+ t.pattern = File.join(blacklight_spec, "/**/*_spec.rb")
63
+ t.rspec_opts = "--colour"
64
+ t.rcov_opts = '-o "blacklight-coverage" --exclude /gems/,/Library/,/usr/,lib/tasks,.bundle,config,/lib/rspec/,/lib/rspec-'
65
+ end
66
+
67
+ # Blacklight. Solr wrapper. for now just for blacklight:spec, plan to
68
+ # provide it for all variants eventually.
69
+ # if you would like to see solr startup messages on STDERR
70
+ # when starting solr test server during functional tests use:
71
+ #
72
+ # rake SOLR_CONSOLE=true
73
+ require File.expand_path('../jetty_solr_server.rb', __FILE__)
74
+ desc "blacklight:solr with jetty/solr launch"
75
+ task :with_solr do
76
+ # wrap tests with a test-specific Solr server
77
+ # Need to look up where the test jetty is located
78
+ # from solr.yml, we don't hardcode it anymore.
79
+
80
+ solr_yml_path = locate_path("config", "solr.yml")
81
+ jetty_path = if ( File.exists?( solr_yml_path ))
82
+ solr_config = YAML::load(File.open(solr_yml_path))
83
+ solr_config["test"]["jetty_path"] if solr_config["test"]
84
+ end
85
+ 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
86
+
87
+
88
+ # wrap tests with a test-specific Solr server
89
+ JettySolrServer.new(
90
+ :jetty_home => File.expand_path(jetty_path, Rails.root),
91
+ :sleep_after_start => 2).wrap do
92
+ Rake::Task["blacklight:spec"].invoke
93
+ end
94
+ end
95
+
96
+
97
+ # Don't understand what this does or how to make it use our remote stats_directory.
98
+ # task :statsetup do
99
+ # require 'rails/code_statistics'
100
+ # ::STATS_DIRECTORIES << %w(Model\ specs spec/models) if File.exist?('spec/models')
101
+ # ::STATS_DIRECTORIES << %w(View\ specs spec/views) if File.exist?('spec/views')
102
+ # ::STATS_DIRECTORIES << %w(Controller\ specs spec/controllers) if File.exist?('spec/controllers')
103
+ # ::STATS_DIRECTORIES << %w(Helper\ specs spec/helpers) if File.exist?('spec/helpers')
104
+ # ::STATS_DIRECTORIES << %w(Library\ specs spec/lib) if File.exist?('spec/lib')
105
+ # ::STATS_DIRECTORIES << %w(Mailer\ specs spec/mailers) if File.exist?('spec/mailers')
106
+ # ::STATS_DIRECTORIES << %w(Routing\ specs spec/routing) if File.exist?('spec/routing')
107
+ # ::STATS_DIRECTORIES << %w(Request\ specs spec/requests) if File.exist?('spec/requests')
108
+ # ::CodeStatistics::TEST_TYPES << "Model specs" if File.exist?('spec/models')
109
+ # ::CodeStatistics::TEST_TYPES << "View specs" if File.exist?('spec/views')
110
+ # ::CodeStatistics::TEST_TYPES << "Controller specs" if File.exist?('spec/controllers')
111
+ # ::CodeStatistics::TEST_TYPES << "Helper specs" if File.exist?('spec/helpers')
112
+ # ::CodeStatistics::TEST_TYPES << "Library specs" if File.exist?('spec/lib')
113
+ # ::CodeStatistics::TEST_TYPES << "Mailer specs" if File.exist?('spec/mailers')
114
+ # ::CodeStatistics::TEST_TYPES << "Routing specs" if File.exist?('spec/routing')
115
+ # ::CodeStatistics::TEST_TYPES << "Request specs" if File.exist?('spec/requests')
116
+ # end
117
+ end
118
+ end
119
+ rescue LoadError
120
+ # This rescue pattern stolen from cucumber; rspec didn't need it before since
121
+ # tasks only lived in rspec gem itself, but for Blacklight since we're copying
122
+ # these tasks into BL, we use the rescue so you can still run BL (without
123
+ # these tasks) even if you don't have rspec installed.
124
+ desc 'rspec rake tasks not available (rspec not installed)'
125
+ task :spec do
126
+ abort 'Rspec rake tasks not available. Be sure to install rspec gems. '
127
+ end
128
+ end
@@ -14,37 +14,28 @@
14
14
  # The behavior of TestSolrServer can be modified prior to start() by changing
15
15
  # port, solr_home, and quiet properties.
16
16
 
17
- class TestSolrServer
18
- require 'singleton'
19
- include Singleton
20
- attr_accessor :port, :jetty_home, :solr_home, :quiet
17
+ class JettySolrServer
18
+ attr_accessor :port, :jetty_home, :solr_home, :quiet, :sleep_after_start, :pid
21
19
 
22
20
  # configure the singleton with some defaults
23
- def initialize
21
+ def initialize(params = {})
24
22
  @pid = nil
23
+ self.quiet = params.has_key?(:quiet) ? !!params[:quiet] : true
24
+ self.jetty_home = params[:jetty_home]
25
+ self.solr_home = params[:solr_home] || File.expand_path("./solr", self.jetty_home)
26
+ self.port = params[:jetty_port] || 8888
27
+ self.sleep_after_start = params[:sleep_after_start]
25
28
  end
26
29
 
27
- def self.wrap(params = {})
28
- error = false
29
- solr_server = self.instance
30
- solr_server.quiet = params[:quiet] || true
31
- solr_server.jetty_home = params[:jetty_home]
32
- solr_server.solr_home = params[:solr_home]
33
- solr_server.port = params[:jetty_port] || 8888
30
+ def wrap
31
+ puts "JettySolrServer: starting server on #{RUBY_PLATFORM}"
32
+ self.start
34
33
  begin
35
- puts "starting solr server on #{RUBY_PLATFORM}"
36
- solr_server.start
37
- sleep params[:startup_wait] || 5
38
34
  yield
39
- rescue
40
- error = $!
41
- puts "*** Solr/Jetty Startup Error: #{error}"
42
- ensure
43
- puts "stopping solr server"
44
- solr_server.stop
35
+ ensure
36
+ puts "JettySolrServer: stopping solr server"
37
+ self.stop
45
38
  end
46
-
47
- return error
48
39
  end
49
40
 
50
41
  def jetty_command
@@ -52,10 +43,14 @@ class TestSolrServer
52
43
  end
53
44
 
54
45
  def start
55
- puts "jetty_home: #{@jetty_home}"
56
- puts "solr_home: #{@solr_home}"
57
- puts "jetty_command: #{jetty_command}"
46
+ puts "\nexecuting: #{jetty_command}\n\n"
47
+
58
48
  platform_specific_start
49
+
50
+ if self.sleep_after_start
51
+ puts "sleeping #{self.sleep_after_start}s waiting for startup."
52
+ sleep self.sleep_after_start
53
+ end
59
54
  end
60
55
 
61
56
  def stop
@@ -86,15 +81,13 @@ class TestSolrServer
86
81
  else # Not Windows
87
82
 
88
83
  def jruby_raise_error?
89
- raise 'JRuby requires that you start solr manually, then run "rake spec" or "rake features"' if defined?(JRUBY_VERSION)
84
+ raise 'JRuby requires that you start solr manually."' if defined?(JRUBY_VERSION)
90
85
  end
91
86
 
92
87
  # start the solr server
93
88
  def platform_specific_start
94
-
95
89
  jruby_raise_error?
96
90
 
97
- puts self.inspect
98
91
  Dir.chdir(@jetty_home) do
99
92
  @pid = fork do
100
93
  STDERR.close if @quiet
@@ -112,19 +105,3 @@ class TestSolrServer
112
105
  end
113
106
 
114
107
  end
115
- #
116
- # puts "hello"
117
- # SOLR_PARAMS = {
118
- # :quiet => ENV['SOLR_CONSOLE'] ? false : true,
119
- # :jetty_home => ENV['SOLR_JETTY_HOME'] || File.expand_path('../../jetty'),
120
- # :jetty_port => ENV['SOLR_JETTY_PORT'] || 8888,
121
- # :solr_home => ENV['SOLR_HOME'] || File.expand_path('test')
122
- # }
123
- #
124
- # # wrap functional tests with a test-specific Solr server
125
- # got_error = TestSolrServer.wrap(SOLR_PARAMS) do
126
- # puts `ps aux | grep start.jar`
127
- # end
128
- #
129
- # raise "test failures" if got_error
130
- #
@@ -14,8 +14,12 @@ namespace :solr do
14
14
 
15
15
  desc "Index the supplied test data into Solr"
16
16
  task :index_test_data do
17
- ENV['MARC_FILE'] = locate_path("spec", "data", "test_data.utf8.mrc")
18
-
17
+ # for now we are assuming test data is located in BL source checkout.
18
+ ENV['MARC_FILE'] = File.expand_path("./test_support/data/test_data.utf8.mrc", Blacklight.root )
19
+
20
+ # solr_path and solr_war_path will be picked up from
21
+ # jetty_path in solr.yml by main work task.
22
+
19
23
  Rake::Task[ "solr:marc:index:work" ].invoke
20
24
  end
21
25
 
@@ -117,11 +121,23 @@ def compute_arguments
117
121
  # Solr URL, find from solr.yml, app or plugin
118
122
  # use :replicate_master_url for current env if present, otherwise :url
119
123
  # for current env.
124
+ # Also take jetty_path from there if present.
120
125
  solr_yml_path = locate_path("config", "solr.yml")
121
126
  if ( File.exists?( solr_yml_path ))
122
127
  solr_config = YAML::load(File.open(solr_yml_path))
123
- arguments[:solr_url] = solr_config[ ::Rails.env ]['url'] if solr_config[::Rails.env]
128
+ if c = solr_config[::Rails.env]
129
+ arguments[:solr_url] = c['url']
130
+ if c['jetty_path']
131
+ arguments[:solr_path] = File.expand_path(File.join(c['jetty_path'], "solr"), Rails.root)
132
+ arguments[:solr_war_path] = File.expand_path(File.join(c['jetty_path'], "webapps", "solr.war"), Rails.root)
133
+ end
134
+ end
124
135
  end
136
+
137
+ # solrmarc.solr.war.path and solr.path, for now pull out of ENV
138
+ # if present. In progress. jrochkind 25 Apr 2011.
139
+ arguments[:solr_war_path] = ENV["SOLR_WAR_PATH"] if ENV["SOLR_WAR_PATH"]
140
+ arguments[:solr_path] = ENV['SOLR_PATH'] if ENV['SOLR_PATH']
125
141
 
126
142
 
127
143
  return arguments
@@ -130,14 +146,17 @@ end
130
146
  def solrmarc_command_line(arguments)
131
147
  cmd = "java #{arguments[:solrmarc_mem_arg]} "
132
148
  cmd += " -Dsolr.hosturl=#{arguments[:solr_url]} " unless arguments[:solr_url].blank?
149
+
150
+ cmd += " -Dsolrmarc.solr.war.path=#{arguments[:solr_war_path]}" unless arguments[:solr_war_path].blank?
151
+ cmd += " -Dsolr.path=#{arguments[:solr_path]}" unless arguments[:solr_path].blank?
152
+
133
153
  cmd += " -jar #{arguments[:solrmarc_jar_path]} #{arguments[:config_properties_path]} #{arguments["MARC_FILE"]}"
134
154
  return cmd
135
155
  end
136
156
 
137
157
 
138
158
  def locate_path(*subpath_fragments)
139
- local_root = File.expand_path File.join(File.dirname(__FILE__), '..', '..')
140
- puts "The local_root is #{local_root}"
159
+ local_root = File.expand_path File.join(File.dirname(__FILE__), '..', '..')
141
160
  subpath = subpath_fragments.join('/')
142
161
  base_match = [Rails.root, local_root].find do |base|
143
162
  File.exists? File.join(base, subpath)