hydra-testing 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +9 -0
- data/.rvmrc +1 -0
- data/Gemfile +3 -0
- data/Rakefile +40 -0
- data/hydra-testing.gemspec +39 -0
- data/lib/hydra-testing.rb +125 -0
- data/lib/hydra-testing/version.rb +5 -0
- data/spec/lib/hydra-testing_spec.rb +98 -0
- data/spec/spec_helper.rb +7 -0
- metadata +223 -0
data/.gitignore
ADDED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use 1.8.7@hydra-testing --create
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'bundler'
|
3
|
+
require 'spec/rake/spectask'
|
4
|
+
require 'yard'
|
5
|
+
|
6
|
+
Bundler::GemHelper.install_tasks
|
7
|
+
Dir.glob('lib/tasks/*.rake').each { |r| import r }
|
8
|
+
|
9
|
+
|
10
|
+
begin
|
11
|
+
Bundler.setup(:default, :development)
|
12
|
+
rescue Bundler::BundlerError => e
|
13
|
+
$stderr.puts e.message
|
14
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
15
|
+
exit e.status_code
|
16
|
+
end
|
17
|
+
|
18
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
19
|
+
spec.libs << 'lib' << 'spec'
|
20
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
22
|
+
|
23
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
24
|
+
spec.libs << 'lib' << 'spec'
|
25
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
26
|
+
spec.rcov = true
|
27
|
+
spec.rcov_opts = %w{--exclude spec\/*,gems\/*,ruby\/* --aggregate coverage.data}
|
28
|
+
end
|
29
|
+
|
30
|
+
task :clean do
|
31
|
+
puts 'Cleaning old coverage.data'
|
32
|
+
FileUtils.rm('coverage.data') if(File.exists? 'coverage.data')
|
33
|
+
end
|
34
|
+
|
35
|
+
YARD::Rake::YardocTask.new(:doc) do |t|
|
36
|
+
t.files = ['lib/**/*.rb'] # optional
|
37
|
+
# t.options = ['--any', '--extra', '--opts'] # optional
|
38
|
+
end
|
39
|
+
|
40
|
+
task :default => [:rcov, :doc]
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "hydra-testing/version"
|
4
|
+
require 'bundler'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "hydra-testing"
|
8
|
+
s.version = Hydra::Testing::VERSION
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.authors = ["Bess Sadler"]
|
11
|
+
s.email = ["bess@stanford.edu"]
|
12
|
+
s.homepage = ""
|
13
|
+
s.summary = %q{Convenience tasks for automated testing for the hydra project.}
|
14
|
+
s.description = %q{Spin up a jetty instance (maybe even the one at https://github.com/projecthydra/hydra-jetty) and wrap test in it. This lets us run tests against a real copy of solr and fedora.}
|
15
|
+
|
16
|
+
s.rubyforge_project = "hydra-testing"
|
17
|
+
|
18
|
+
s.files = `git ls-files`.split("\n")
|
19
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
21
|
+
s.require_paths = ["lib"]
|
22
|
+
|
23
|
+
s.required_rubygems_version = ">= 1.3.6"
|
24
|
+
|
25
|
+
# Bundler will install these gems too if you've checked this out from source from git and run 'bundle install'
|
26
|
+
# It will not add these as dependencies if you require lyber-core for other projects
|
27
|
+
s.add_development_dependency "ruby-debug"
|
28
|
+
s.add_development_dependency "ruby-debug-base"
|
29
|
+
s.add_development_dependency "rspec", "< 2.0" # We're not ready to upgrade to rspec 2
|
30
|
+
s.add_development_dependency 'rspec-rails', '<2.0.0' # rspec-rails 2.0.0 requires Rails 3.
|
31
|
+
s.add_development_dependency 'mocha'
|
32
|
+
s.add_development_dependency 'cucumber', '>=0.8.5'
|
33
|
+
s.add_development_dependency 'cucumber-rails'
|
34
|
+
s.add_development_dependency 'gherkin'
|
35
|
+
s.add_development_dependency 'rcov'
|
36
|
+
s.add_development_dependency 'yard'
|
37
|
+
|
38
|
+
end
|
39
|
+
|
@@ -0,0 +1,125 @@
|
|
1
|
+
module Hydra
|
2
|
+
module Testing
|
3
|
+
class TestServer
|
4
|
+
|
5
|
+
require 'singleton'
|
6
|
+
include Singleton
|
7
|
+
attr_accessor :port, :jetty_home, :solr_home, :quiet, :fedora_home, :startup_wait
|
8
|
+
|
9
|
+
# configure the singleton with some defaults
|
10
|
+
def initialize
|
11
|
+
@pid = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
class << self
|
15
|
+
def configure(params = {})
|
16
|
+
hydra_server = self.instance
|
17
|
+
hydra_server.quiet = params[:quiet].nil? ? true : params[:quiet]
|
18
|
+
if defined?(Rails.root)
|
19
|
+
base_path = Rails.root
|
20
|
+
else
|
21
|
+
raise "You must set either RAILS_ROOT or :jetty_home so I know where jetty is" unless params[:jetty_home]
|
22
|
+
end
|
23
|
+
hydra_server.jetty_home = params[:jetty_home] || File.expand_path(File.join(base_path, 'jetty'))
|
24
|
+
hydra_server.solr_home = params[:solr_home] || File.join( hydra_server.jetty_home, "solr")
|
25
|
+
hydra_server.fedora_home = params[:fedora_home] || File.join( hydra_server.jetty_home, "fedora","default")
|
26
|
+
hydra_server.port = params[:jetty_port] || 8888
|
27
|
+
hydra_server.startup_wait = params[:startup_wait] || 5
|
28
|
+
return hydra_server
|
29
|
+
end
|
30
|
+
|
31
|
+
def wrap(params = {})
|
32
|
+
error = false
|
33
|
+
jetty_server = self.instance
|
34
|
+
jetty_server.quiet = params[:quiet] || true
|
35
|
+
jetty_server.jetty_home = params[:jetty_home]
|
36
|
+
jetty_server.solr_home = params[:solr_home]
|
37
|
+
jetty_server.port = params[:jetty_port] || 8888
|
38
|
+
jetty_server.startup_wait = params[:startup_wait] || 5
|
39
|
+
jetty_server.fedora_home = params[:fedora_home] || File.join( jetty_server.jetty_home, "fedora","default")
|
40
|
+
|
41
|
+
begin
|
42
|
+
# puts "starting jetty on #{RUBY_PLATFORM}"
|
43
|
+
jetty_server.start
|
44
|
+
sleep jetty_server.startup_wait
|
45
|
+
yield
|
46
|
+
rescue
|
47
|
+
error = $!
|
48
|
+
puts "*** Error starting hydra-jetty: #{error}"
|
49
|
+
ensure
|
50
|
+
# puts "stopping jetty server"
|
51
|
+
jetty_server.stop
|
52
|
+
end
|
53
|
+
|
54
|
+
return error
|
55
|
+
end
|
56
|
+
|
57
|
+
end #end of class << self
|
58
|
+
|
59
|
+
def jetty_command
|
60
|
+
"java -Djetty.port=#{@port} -Dsolr.solr.home=#{@solr_home} -jar start.jar"
|
61
|
+
end
|
62
|
+
|
63
|
+
def start
|
64
|
+
puts "jetty_home: #{@jetty_home}"
|
65
|
+
puts "solr_home: #{@solr_home}"
|
66
|
+
puts "jetty_command: #{jetty_command}"
|
67
|
+
platform_specific_start
|
68
|
+
end
|
69
|
+
|
70
|
+
def stop
|
71
|
+
platform_specific_stop
|
72
|
+
end
|
73
|
+
|
74
|
+
if RUBY_PLATFORM =~ /mswin32/
|
75
|
+
require 'win32/process'
|
76
|
+
|
77
|
+
# start the solr server
|
78
|
+
def platform_specific_start
|
79
|
+
Dir.chdir(@jetty_home) do
|
80
|
+
@pid = Process.create(
|
81
|
+
:app_name => jetty_command,
|
82
|
+
:creation_flags => Process::DETACHED_PROCESS,
|
83
|
+
:process_inherit => false,
|
84
|
+
:thread_inherit => true,
|
85
|
+
:cwd => "#{@jetty_home}"
|
86
|
+
).process_id
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# stop a running solr server
|
91
|
+
def platform_specific_stop
|
92
|
+
Process.kill(1, @pid)
|
93
|
+
Process.wait
|
94
|
+
end
|
95
|
+
else # Not Windows
|
96
|
+
|
97
|
+
def jruby_raise_error?
|
98
|
+
raise 'JRuby requires that you start solr manually, then run "rake spec" or "rake features"' if defined?(JRUBY_VERSION)
|
99
|
+
end
|
100
|
+
|
101
|
+
# start the solr server
|
102
|
+
def platform_specific_start
|
103
|
+
|
104
|
+
jruby_raise_error?
|
105
|
+
|
106
|
+
puts self.inspect
|
107
|
+
Dir.chdir(@jetty_home) do
|
108
|
+
@pid = fork do
|
109
|
+
STDERR.close if @quiet
|
110
|
+
exec jetty_command
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
# stop a running solr server
|
116
|
+
def platform_specific_stop
|
117
|
+
jruby_raise_error?
|
118
|
+
Process.kill('TERM', @pid)
|
119
|
+
Process.wait
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "/../spec_helper")
|
2
|
+
require File.join(File.dirname(__FILE__), "/../../lib/hydra-testing")
|
3
|
+
|
4
|
+
module Hydra
|
5
|
+
module Testing
|
6
|
+
describe TestServer do
|
7
|
+
|
8
|
+
before(:all) do
|
9
|
+
@jetty_params = {
|
10
|
+
:quiet => false,
|
11
|
+
:jetty_home => "/path/to/jetty",
|
12
|
+
:jetty_port => 8888,
|
13
|
+
:solr_home => "/path/to/solr",
|
14
|
+
:fedora_home => "/path/to/fedora",
|
15
|
+
:startup_wait => 0
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
context "instantiation" do
|
20
|
+
it "can be instantiated" do
|
21
|
+
ts = Hydra::Testing::TestServer.instance
|
22
|
+
ts.class.should eql(Hydra::Testing::TestServer)
|
23
|
+
end
|
24
|
+
|
25
|
+
it "can be configured with a params hash" do
|
26
|
+
ts = Hydra::Testing::TestServer.configure(@jetty_params)
|
27
|
+
ts.quiet.should == false
|
28
|
+
ts.jetty_home.should == "/path/to/jetty"
|
29
|
+
ts.port.should == 8888
|
30
|
+
ts.solr_home.should == '/path/to/solr'
|
31
|
+
ts.fedora_home.should == '/path/to/fedora'
|
32
|
+
ts.startup_wait.should == 0
|
33
|
+
end
|
34
|
+
|
35
|
+
# passing in a hash is no longer optional
|
36
|
+
it "raises an error when called without a :jetty_home value" do
|
37
|
+
lambda { ts = Hydra::Testing::TestServer.configure }.should raise_exception
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should override nil params with defaults" do
|
41
|
+
jetty_params = {
|
42
|
+
:quiet => nil,
|
43
|
+
:jetty_home => '/path/to/jetty',
|
44
|
+
:jetty_port => nil,
|
45
|
+
:solr_home => nil,
|
46
|
+
:fedora_home => nil,
|
47
|
+
:startup_wait => nil
|
48
|
+
}
|
49
|
+
|
50
|
+
ts = Hydra::Testing::TestServer.configure(jetty_params)
|
51
|
+
ts.quiet.should == true
|
52
|
+
ts.jetty_home.should == "/path/to/jetty"
|
53
|
+
ts.port.should == 8888
|
54
|
+
ts.solr_home.should == File.join(ts.jetty_home, "solr")
|
55
|
+
ts.fedora_home.should == File.join(ts.jetty_home, "fedora","default")
|
56
|
+
ts.startup_wait.should == 5
|
57
|
+
end
|
58
|
+
end # end of instantiation context
|
59
|
+
|
60
|
+
context "wrapping a task" do
|
61
|
+
it "wraps another method" do
|
62
|
+
Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
|
63
|
+
Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
|
64
|
+
error = Hydra::Testing::TestServer.wrap(@jetty_params) do
|
65
|
+
end
|
66
|
+
error.should eql(false)
|
67
|
+
end
|
68
|
+
|
69
|
+
it "configures itself correctly when invoked via the wrap method" do
|
70
|
+
Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
|
71
|
+
Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
|
72
|
+
error = Hydra::Testing::TestServer.wrap(@jetty_params) do
|
73
|
+
ts = Hydra::Testing::TestServer.instance
|
74
|
+
ts.quiet.should == true
|
75
|
+
ts.jetty_home.should == "/path/to/jetty"
|
76
|
+
ts.port.should == 8888
|
77
|
+
ts.solr_home.should == "/path/to/solr"
|
78
|
+
ts.fedora_home.should == "/path/to/fedora"
|
79
|
+
ts.startup_wait.should == 0
|
80
|
+
end
|
81
|
+
error.should eql(false)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "captures any errors produced" do
|
85
|
+
Hydra::Testing::TestServer.any_instance.stubs(:start).returns(true)
|
86
|
+
Hydra::Testing::TestServer.any_instance.stubs(:stop).returns(true)
|
87
|
+
error = Hydra::Testing::TestServer.wrap(@jetty_params) do
|
88
|
+
raise "foo"
|
89
|
+
end
|
90
|
+
error.class.should eql(RuntimeError)
|
91
|
+
error.message.should eql("foo")
|
92
|
+
end
|
93
|
+
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,223 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hydra-testing
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Bess Sadler
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-04-06 00:00:00 -07:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
version_requirements: &id001 !ruby/object:Gem::Requirement
|
23
|
+
none: false
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
hash: 3
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
prerelease: false
|
32
|
+
requirement: *id001
|
33
|
+
name: ruby-debug
|
34
|
+
type: :development
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
hash: 3
|
42
|
+
segments:
|
43
|
+
- 0
|
44
|
+
version: "0"
|
45
|
+
prerelease: false
|
46
|
+
requirement: *id002
|
47
|
+
name: ruby-debug-base
|
48
|
+
type: :development
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
version_requirements: &id003 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - <
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
hash: 3
|
56
|
+
segments:
|
57
|
+
- 2
|
58
|
+
- 0
|
59
|
+
version: "2.0"
|
60
|
+
prerelease: false
|
61
|
+
requirement: *id003
|
62
|
+
name: rspec
|
63
|
+
type: :development
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
version_requirements: &id004 !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - <
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 15
|
71
|
+
segments:
|
72
|
+
- 2
|
73
|
+
- 0
|
74
|
+
- 0
|
75
|
+
version: 2.0.0
|
76
|
+
prerelease: false
|
77
|
+
requirement: *id004
|
78
|
+
name: rspec-rails
|
79
|
+
type: :development
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
version_requirements: &id005 !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
hash: 3
|
87
|
+
segments:
|
88
|
+
- 0
|
89
|
+
version: "0"
|
90
|
+
prerelease: false
|
91
|
+
requirement: *id005
|
92
|
+
name: mocha
|
93
|
+
type: :development
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
version_requirements: &id006 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
hash: 53
|
101
|
+
segments:
|
102
|
+
- 0
|
103
|
+
- 8
|
104
|
+
- 5
|
105
|
+
version: 0.8.5
|
106
|
+
prerelease: false
|
107
|
+
requirement: *id006
|
108
|
+
name: cucumber
|
109
|
+
type: :development
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
version_requirements: &id007 !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
hash: 3
|
117
|
+
segments:
|
118
|
+
- 0
|
119
|
+
version: "0"
|
120
|
+
prerelease: false
|
121
|
+
requirement: *id007
|
122
|
+
name: cucumber-rails
|
123
|
+
type: :development
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
version_requirements: &id008 !ruby/object:Gem::Requirement
|
126
|
+
none: false
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
hash: 3
|
131
|
+
segments:
|
132
|
+
- 0
|
133
|
+
version: "0"
|
134
|
+
prerelease: false
|
135
|
+
requirement: *id008
|
136
|
+
name: gherkin
|
137
|
+
type: :development
|
138
|
+
- !ruby/object:Gem::Dependency
|
139
|
+
version_requirements: &id009 !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ">="
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
hash: 3
|
145
|
+
segments:
|
146
|
+
- 0
|
147
|
+
version: "0"
|
148
|
+
prerelease: false
|
149
|
+
requirement: *id009
|
150
|
+
name: rcov
|
151
|
+
type: :development
|
152
|
+
- !ruby/object:Gem::Dependency
|
153
|
+
version_requirements: &id010 !ruby/object:Gem::Requirement
|
154
|
+
none: false
|
155
|
+
requirements:
|
156
|
+
- - ">="
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
hash: 3
|
159
|
+
segments:
|
160
|
+
- 0
|
161
|
+
version: "0"
|
162
|
+
prerelease: false
|
163
|
+
requirement: *id010
|
164
|
+
name: yard
|
165
|
+
type: :development
|
166
|
+
description: Spin up a jetty instance (maybe even the one at https://github.com/projecthydra/hydra-jetty) and wrap test in it. This lets us run tests against a real copy of solr and fedora.
|
167
|
+
email:
|
168
|
+
- bess@stanford.edu
|
169
|
+
executables: []
|
170
|
+
|
171
|
+
extensions: []
|
172
|
+
|
173
|
+
extra_rdoc_files: []
|
174
|
+
|
175
|
+
files:
|
176
|
+
- .gitignore
|
177
|
+
- .rvmrc
|
178
|
+
- Gemfile
|
179
|
+
- Rakefile
|
180
|
+
- hydra-testing.gemspec
|
181
|
+
- lib/hydra-testing.rb
|
182
|
+
- lib/hydra-testing/version.rb
|
183
|
+
- spec/lib/hydra-testing_spec.rb
|
184
|
+
- spec/spec_helper.rb
|
185
|
+
has_rdoc: true
|
186
|
+
homepage: ""
|
187
|
+
licenses: []
|
188
|
+
|
189
|
+
post_install_message:
|
190
|
+
rdoc_options: []
|
191
|
+
|
192
|
+
require_paths:
|
193
|
+
- lib
|
194
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
195
|
+
none: false
|
196
|
+
requirements:
|
197
|
+
- - ">="
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
hash: 3
|
200
|
+
segments:
|
201
|
+
- 0
|
202
|
+
version: "0"
|
203
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
|
+
none: false
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
hash: 23
|
209
|
+
segments:
|
210
|
+
- 1
|
211
|
+
- 3
|
212
|
+
- 6
|
213
|
+
version: 1.3.6
|
214
|
+
requirements: []
|
215
|
+
|
216
|
+
rubyforge_project: hydra-testing
|
217
|
+
rubygems_version: 1.4.1
|
218
|
+
signing_key:
|
219
|
+
specification_version: 3
|
220
|
+
summary: Convenience tasks for automated testing for the hydra project.
|
221
|
+
test_files:
|
222
|
+
- spec/lib/hydra-testing_spec.rb
|
223
|
+
- spec/spec_helper.rb
|