onceover 3.15.0 → 3.17.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +72 -82
- data/.travis.yml +3 -8
- data/Gemfile +9 -2
- data/README.md +66 -3
- data/bin/onceover +3 -3
- data/factsets/Ubuntu-18.04-64.json +556 -0
- data/features/step_definitions/common.rb +12 -1
- data/features/windows.feature +30 -0
- data/features/{run.feature → zzz_run.feature} +5 -0
- data/lib/onceover/beaker.rb +6 -0
- data/lib/onceover/cli.rb +1 -1
- data/lib/onceover/cli/init.rb +1 -1
- data/lib/onceover/cli/run.rb +4 -3
- data/lib/onceover/cli/show.rb +3 -3
- data/lib/onceover/cli/update.rb +2 -2
- data/lib/onceover/controlrepo.rb +10 -6
- data/lib/onceover/deploy.rb +3 -1
- data/lib/onceover/group.rb +1 -1
- data/lib/onceover/logger.rb +2 -1
- data/lib/onceover/rake_tasks.rb +2 -1
- data/lib/onceover/rspec/formatters.rb +17 -5
- data/lib/onceover/runner.rb +17 -5
- data/lib/onceover/testconfig.rb +24 -14
- data/onceover.gemspec +13 -17
- data/spec/fixtures/controlrepos/caching/spec/r10k.yaml +3 -0
- data/spec/fixtures/controlrepos/windows/Gemfile +3 -0
- data/spec/fixtures/controlrepos/windows/Puppetfile +3 -0
- data/spec/fixtures/controlrepos/windows/environment.conf +1 -0
- data/spec/fixtures/controlrepos/windows/site-modules/role/manifests/acl.pp +12 -0
- data/spec/fixtures/controlrepos/windows/site-modules/role/manifests/groups.pp +8 -0
- data/spec/fixtures/controlrepos/windows/site-modules/role/manifests/users.pp +9 -0
- data/spec/fixtures/controlrepos/windows/site/role/manifests/groups.pp +8 -0
- data/spec/fixtures/controlrepos/windows/site/role/manifests/users.pp +9 -0
- data/spec/fixtures/controlrepos/windows/spec/onceover.yaml +24 -0
- data/templates/test_spec.rb.erb +60 -0
- metadata +81 -110
@@ -26,7 +26,7 @@ Given(/^control repo "([^"]*)" without "([^"]*)"$/) do |controlrepo_name, filena
|
|
26
26
|
end
|
27
27
|
|
28
28
|
When(/^I run onceover command "([^"]*)"$/) do |command|
|
29
|
-
@cmd.command = command
|
29
|
+
@cmd.command = "#{command} --debug"
|
30
30
|
puts @cmd
|
31
31
|
@cmd.run
|
32
32
|
end
|
@@ -37,6 +37,17 @@ When(/^I run onceover command "([^"]*)" with class "([^"]*)"$/) do |command, cl
|
|
37
37
|
@cmd.run
|
38
38
|
end
|
39
39
|
|
40
|
+
# The below can be used to skip tests if they only work on one os
|
41
|
+
When(/^test osfamily is "(\w*)"$/) do |osfamily|
|
42
|
+
require 'facter'
|
43
|
+
pending unless Facter.value(:os)['family'] == osfamily
|
44
|
+
end
|
45
|
+
|
46
|
+
When(/^test osfamily is not "(\w*)"$/) do |osfamily|
|
47
|
+
require 'facter'
|
48
|
+
pending if Facter.value(:os)['family'] == osfamily
|
49
|
+
end
|
50
|
+
|
40
51
|
Then(/^I see help for commands: "([^"]*)"$/) do |commands|
|
41
52
|
# Get chunk of output between COMMANDS and OPTION, there should be help section
|
42
53
|
commands_help = @cmd.output[/COMMANDS(.*)OPTIONS/m, 1]
|
@@ -0,0 +1,30 @@
|
|
1
|
+
@windows
|
2
|
+
Feature: Run onceover with windows
|
3
|
+
Onceover should allow to run rspec and acceptance test for all profvile and role classes
|
4
|
+
or for any part of them. Use should set if he wants to see only summary of tests or full
|
5
|
+
log info.
|
6
|
+
|
7
|
+
Background:
|
8
|
+
Given onceover executable
|
9
|
+
|
10
|
+
Scenario: Run with common Windows code
|
11
|
+
Given control repo "windows"
|
12
|
+
When I run onceover command "run spec" with class "role::users"
|
13
|
+
Then I should not see any errors
|
14
|
+
|
15
|
+
Scenario: Run with common Windows code without workarounds
|
16
|
+
Given existing control repo "windows"
|
17
|
+
When I run onceover command "run spec --no_workarounds" with class "role::users"
|
18
|
+
And test osfamily is not "windows"
|
19
|
+
Then Onceover should exit 1
|
20
|
+
|
21
|
+
Scenario: Compiling a windows role with groups that is valid should compile
|
22
|
+
Given control repo "windows"
|
23
|
+
When I run onceover command "run spec" with class "role::groups"
|
24
|
+
Then I should not see any errors
|
25
|
+
|
26
|
+
Scenario: Compiling a windows role with users that is valid should compile
|
27
|
+
Given control repo "windows"
|
28
|
+
When I run onceover command "run spec" with class "role::users"
|
29
|
+
Then I should not see any errors
|
30
|
+
|
@@ -27,6 +27,11 @@ Feature: Run rspec and acceptance test suites
|
|
27
27
|
When I run onceover command "run spec"
|
28
28
|
Then I should see message pattern "apache::params"
|
29
29
|
|
30
|
+
Scenario: Checking that r10k config works
|
31
|
+
Given initialized control repo "caching"
|
32
|
+
When I run onceover command "run spec --debug"
|
33
|
+
Then I should see message pattern "r10k.yaml"
|
34
|
+
|
30
35
|
Scenario: Run spec tests with misspelled module in Puppetfile
|
31
36
|
Given initialized control repo "basic"
|
32
37
|
And in Puppetfile is misspelled module's name
|
data/lib/onceover/beaker.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
# rubocop:disable Style/RescueStandardError
|
2
|
+
# ^^ I canlt be bothered fixing this because all of this code is deprecated
|
3
|
+
|
1
4
|
class Onceover
|
2
5
|
class Beaker
|
3
6
|
# WARNING: All of this functionality is deprecated. It will be left around
|
@@ -232,7 +235,10 @@ class Onceover
|
|
232
235
|
end
|
233
236
|
|
234
237
|
raise "The networkmanager created too many machines! Only expecting one" if hosts.count > 1
|
238
|
+
|
235
239
|
@nwm.instance_variable_get(:@hosts)[0]
|
236
240
|
end
|
237
241
|
end
|
238
242
|
end
|
243
|
+
|
244
|
+
# rubocop:enable Style/RescueStandardError
|
data/lib/onceover/cli.rb
CHANGED
data/lib/onceover/cli/init.rb
CHANGED
data/lib/onceover/cli/run.rb
CHANGED
@@ -10,7 +10,7 @@ class Onceover
|
|
10
10
|
class CLI
|
11
11
|
class Run
|
12
12
|
def self.command
|
13
|
-
@
|
13
|
+
@command ||= Cri::Command.define do
|
14
14
|
name 'run'
|
15
15
|
usage 'run [spec|acceptance]'
|
16
16
|
summary 'Runs either the spec or acceptance tests'
|
@@ -35,13 +35,14 @@ This includes deploying using r10k and running all custom tests.
|
|
35
35
|
|
36
36
|
class Spec
|
37
37
|
def self.command
|
38
|
-
@
|
38
|
+
@command ||= Cri::Command.define do
|
39
39
|
name 'spec'
|
40
40
|
usage 'spec'
|
41
41
|
summary 'Runs spec tests'
|
42
42
|
|
43
43
|
optional :p, :parallel, 'Runs spec tests in parallel. This increases speed at the cost of poorly formatted logs and irrelevant junit output.'
|
44
44
|
optional nil, :format, 'Which RSpec formatter to use, valid options are: documentation, progress, FailureCollector, OnceoverFormatter. You also specify this multiple times', multiple: true, default: :defaults
|
45
|
+
optional nil, :no_workarounds, 'Disables workarounds that have been added for convenience to get around common RSPec issues such as https://github.com/rodjek/rspec-puppet/issues/665'
|
45
46
|
|
46
47
|
run do |opts, args, cmd|
|
47
48
|
repo = Onceover::Controlrepo.new(opts)
|
@@ -56,7 +57,7 @@ This includes deploying using r10k and running all custom tests.
|
|
56
57
|
|
57
58
|
class Acceptance
|
58
59
|
def self.command
|
59
|
-
@
|
60
|
+
@command ||= Cri::Command.define do
|
60
61
|
name 'acceptance'
|
61
62
|
usage 'acceptance'
|
62
63
|
summary 'Runs acceptance tests'
|
data/lib/onceover/cli/show.rb
CHANGED
@@ -7,7 +7,7 @@ class Onceover
|
|
7
7
|
class CLI
|
8
8
|
class Show
|
9
9
|
def self.command
|
10
|
-
@
|
10
|
+
@command ||= Cri::Command.define do
|
11
11
|
name 'show'
|
12
12
|
usage 'show [controlrepo|puppetfile]'
|
13
13
|
summary 'Shows the current state of things'
|
@@ -25,7 +25,7 @@ Shows the state of either the controlrepo or the Puppetfile
|
|
25
25
|
|
26
26
|
class Repo
|
27
27
|
def self.command
|
28
|
-
@
|
28
|
+
@command ||= Cri::Command.define do
|
29
29
|
name 'repo'
|
30
30
|
usage 'repo [options]'
|
31
31
|
summary 'Shows the current state of the Controlrepo'
|
@@ -50,7 +50,7 @@ Useful for debugging.
|
|
50
50
|
|
51
51
|
class Puppetfile
|
52
52
|
def self.command
|
53
|
-
@
|
53
|
+
@command ||= Cri::Command.define do
|
54
54
|
name 'puppetfile'
|
55
55
|
usage 'puppetfile [options]'
|
56
56
|
summary 'Shows the current state of the puppetfile'
|
data/lib/onceover/cli/update.rb
CHANGED
@@ -7,7 +7,7 @@ class Onceover
|
|
7
7
|
class CLI
|
8
8
|
class Update
|
9
9
|
def self.command
|
10
|
-
@
|
10
|
+
@command ||= Cri::Command.define do
|
11
11
|
name 'update'
|
12
12
|
usage 'update puppetfile'
|
13
13
|
summary 'Updates stuff, currently only the Puppetfile'
|
@@ -22,7 +22,7 @@ class Onceover
|
|
22
22
|
|
23
23
|
class Puppetfile
|
24
24
|
def self.command
|
25
|
-
@
|
25
|
+
@command ||= Cri::Command.define do
|
26
26
|
name 'puppetfile'
|
27
27
|
usage 'puppetfile'
|
28
28
|
summary 'Update all modules in the Puppetfile'
|
data/lib/onceover/controlrepo.rb
CHANGED
@@ -3,7 +3,6 @@ require 'erb'
|
|
3
3
|
require 'yaml'
|
4
4
|
require 'find'
|
5
5
|
require 'pathname'
|
6
|
-
require 'thread'
|
7
6
|
require 'multi_json'
|
8
7
|
require 'onceover/beaker'
|
9
8
|
require 'onceover/logger'
|
@@ -115,7 +114,7 @@ class Onceover
|
|
115
114
|
@environment_conf = opts[:environment_conf] || File.expand_path('./environment.conf', @root)
|
116
115
|
@spec_dir = opts[:spec_dir] || File.expand_path('./spec', @root)
|
117
116
|
@facts_dir = opts[:facts_dir] || File.expand_path('factsets', @spec_dir)
|
118
|
-
_facts_dirs = [@facts_dir, File.expand_path('
|
117
|
+
_facts_dirs = [@facts_dir, File.expand_path('../../factsets', __dir__)]
|
119
118
|
_facts_files = opts[:facts_files] || _facts_dirs.map{|d| File.join(d, '*.json')}
|
120
119
|
@facts_files = _facts_files.map{|_path| Dir[_path]}.flatten
|
121
120
|
|
@@ -134,7 +133,7 @@ class Onceover
|
|
134
133
|
def to_s
|
135
134
|
require 'colored'
|
136
135
|
|
137
|
-
<<-
|
136
|
+
<<-REPO.gsub(/^\s{4}/,'')
|
138
137
|
#{'puppetfile'.green} #{@puppetfile}
|
139
138
|
#{'environment_conf'.green} #{@environment_conf}
|
140
139
|
#{'facts_dir'.green} #{@facts_dir}
|
@@ -144,7 +143,7 @@ class Onceover
|
|
144
143
|
#{'roles'.green} #{roles}
|
145
144
|
#{'profiles'.green} #{profiles}
|
146
145
|
#{'onceover.yaml'.green} #{@onceover_yaml}
|
147
|
-
|
146
|
+
REPO
|
148
147
|
end
|
149
148
|
|
150
149
|
def roles
|
@@ -190,6 +189,7 @@ class Onceover
|
|
190
189
|
if filter
|
191
190
|
# Allow us to pass a hash of facts to filter by
|
192
191
|
raise "Filter param must be a hash" unless filter.is_a?(Hash)
|
192
|
+
|
193
193
|
all_facts.keep_if do |hash|
|
194
194
|
matches = []
|
195
195
|
filter.each do |filter_fact,value|
|
@@ -254,13 +254,15 @@ class Onceover
|
|
254
254
|
|
255
255
|
threads.map(&:join)
|
256
256
|
|
257
|
-
tp
|
257
|
+
tp(
|
258
|
+
output_array,
|
258
259
|
{:full_name => {:display_name => "Full Name"}},
|
259
260
|
{:current_version => {:display_name => "Current Version"}},
|
260
261
|
{:latest_version => {:display_name => "Latest Version"}},
|
261
262
|
{:out_of_date => {:display_name => "Out of Date?"}},
|
262
263
|
{:endorsement => {:display_name => "Endorsement"}},
|
263
264
|
{:superseded_by => {:display_name => "Superseded by"}}
|
265
|
+
)
|
264
266
|
end
|
265
267
|
|
266
268
|
def update_puppetfile
|
@@ -305,6 +307,7 @@ class Onceover
|
|
305
307
|
# Load up the Puppetfile using R10k
|
306
308
|
puppetfile = R10K::Puppetfile.new(@root)
|
307
309
|
fail 'Could not load Puppetfile' unless puppetfile.load
|
310
|
+
|
308
311
|
modules = puppetfile.modules
|
309
312
|
|
310
313
|
# Iterate over everything and seperate it out for the sake of readability
|
@@ -395,6 +398,7 @@ class Onceover
|
|
395
398
|
possibe_datadirs = Dir["#{@root}/*/"]
|
396
399
|
possibe_datadirs.keep_if { |dir| dir =~ /hiera(?:.*data)?/i }
|
397
400
|
raise "There were too many directories that looked like hiera data: #{possibe_datadirs}" if possibe_datadirs.count > 1
|
401
|
+
|
398
402
|
File.expand_path(possibe_datadirs[0])
|
399
403
|
end
|
400
404
|
|
@@ -417,7 +421,7 @@ class Onceover
|
|
417
421
|
# Finally, split the modulepath values and return
|
418
422
|
begin
|
419
423
|
environment_config['modulepath'] = environment_config['modulepath'].split(':')
|
420
|
-
rescue
|
424
|
+
rescue StandardError
|
421
425
|
raise "modulepath was not found in environment.conf, don't know where to look for roles & profiles"
|
422
426
|
end
|
423
427
|
|
data/lib/onceover/deploy.rb
CHANGED
@@ -118,8 +118,10 @@ class Onceover
|
|
118
118
|
prod_dir = "#{repo.tempdir}/#{repo.environmentpath}/production"
|
119
119
|
Dir.chdir(prod_dir) do
|
120
120
|
install_cmd = []
|
121
|
-
install_cmd << "r10k puppetfile install --
|
121
|
+
install_cmd << "r10k puppetfile install --color --puppetfile #{repo.puppetfile}"
|
122
122
|
install_cmd << "--force" if force
|
123
|
+
install_cmd << "--config #{repo.r10k_config_file}" if repo.r10k_config_file
|
124
|
+
install_cmd << (logger.level > 0 ? "--verbose" : "--verbose debug") # Enable debugging if we're debugging
|
123
125
|
install_cmd = install_cmd.join(' ')
|
124
126
|
logger.debug "Running #{install_cmd} from #{prod_dir}"
|
125
127
|
system(install_cmd)
|
data/lib/onceover/group.rb
CHANGED
data/lib/onceover/logger.rb
CHANGED
data/lib/onceover/rake_tasks.rb
CHANGED
@@ -8,9 +8,10 @@ require 'pathname'
|
|
8
8
|
desc 'Writes a `fixtures.yml` file based on the Puppetfile'
|
9
9
|
task :generate_fixtures do
|
10
10
|
repo = Onceover::Controlrepo.new
|
11
|
-
if File.
|
11
|
+
if File.exist?(File.expand_path('./.fixtures.yml', repo.root))
|
12
12
|
raise ".fixtures.yml already exits, we won't overwrite because we are scared"
|
13
13
|
end
|
14
|
+
|
14
15
|
File.write(File.expand_path('./.fixtures.yml', repo.root), repo.fixtures)
|
15
16
|
end
|
16
17
|
|
@@ -2,8 +2,14 @@ require 'rspec'
|
|
2
2
|
require 'pathname'
|
3
3
|
|
4
4
|
class OnceoverFormatter
|
5
|
-
RSpec::Core::Formatters.register
|
6
|
-
|
5
|
+
RSpec::Core::Formatters.register(
|
6
|
+
self,
|
7
|
+
:example_group_started,
|
8
|
+
:example_passed,
|
9
|
+
:example_failed,
|
10
|
+
:example_pending,
|
11
|
+
:dump_failures,
|
12
|
+
)
|
7
13
|
|
8
14
|
COMPILATION_ERROR = %r{error during compilation: (?<error>.*)}
|
9
15
|
ERROR_WITH_LOCATION = %r{(?<error>.*?)\s(at )?(\((file: (?<file>.*?), )?line: (?<line>\d+)(, column: (?<column>\d+))?\))(; )?}
|
@@ -218,8 +224,14 @@ end
|
|
218
224
|
class OnceoverFormatterParallel < OnceoverFormatter
|
219
225
|
require 'yaml'
|
220
226
|
|
221
|
-
RSpec::Core::Formatters.register
|
222
|
-
|
227
|
+
RSpec::Core::Formatters.register(
|
228
|
+
self,
|
229
|
+
:example_group_started,
|
230
|
+
:example_passed,
|
231
|
+
:example_failed,
|
232
|
+
:example_pending,
|
233
|
+
:dump_failures,
|
234
|
+
)
|
223
235
|
|
224
236
|
def example_group_started notification
|
225
237
|
# Do nothing
|
@@ -287,7 +299,7 @@ class FailureCollector
|
|
287
299
|
end
|
288
300
|
|
289
301
|
def dump_failures(failures)
|
290
|
-
open(File.expand_path("#{RSpec.configuration.onceover_tempdir}/failures.out"), 'a') { |f|
|
302
|
+
File.open(File.expand_path("#{RSpec.configuration.onceover_tempdir}/failures.out"), 'a') { |f|
|
291
303
|
failures.failed_examples.each do |fe|
|
292
304
|
f.puts
|
293
305
|
f.puts "#{fe.metadata[:description]}"
|
data/lib/onceover/runner.rb
CHANGED
@@ -53,8 +53,10 @@ class Onceover
|
|
53
53
|
@config.acceptance_tests.each { |test| @config.verify_acceptance_test(@repo, test) }
|
54
54
|
|
55
55
|
# Write them out
|
56
|
-
@config.write_acceptance_tests(
|
57
|
-
@
|
56
|
+
@config.write_acceptance_tests(
|
57
|
+
"#{@repo.tempdir}/spec/acceptance",
|
58
|
+
@config.run_filters(Onceover::Test.deduplicate(@config.acceptance_tests))
|
59
|
+
)
|
58
60
|
end
|
59
61
|
|
60
62
|
# Parse the current hiera config, modify, and write it to the temp dir
|
@@ -85,10 +87,11 @@ class Onceover
|
|
85
87
|
#`bin/rake spec_standalone`
|
86
88
|
if @config.opts[:parallel]
|
87
89
|
logger.debug "Running #{@command_prefix}rake parallel_spec from #{@repo.tempdir}"
|
88
|
-
result =
|
90
|
+
result = run_command(@command_prefix.strip.split, 'rake', 'parallel_spec')
|
89
91
|
else
|
92
|
+
require 'io/console'
|
90
93
|
logger.debug "Running #{@command_prefix}rake spec_standalone from #{@repo.tempdir}"
|
91
|
-
result =
|
94
|
+
result = run_command(@command_prefix.strip.split, 'rake', 'spec_standalone')
|
92
95
|
end
|
93
96
|
|
94
97
|
# Reset env to previous state if we modified it
|
@@ -115,11 +118,20 @@ class Onceover
|
|
115
118
|
#`bundle install --binstubs`
|
116
119
|
#`bin/rake spec_standalone`
|
117
120
|
logger.debug "Running #{@command_prefix}rake acceptance from #{@repo.tempdir}"
|
118
|
-
result =
|
121
|
+
result = run_command(@command_prefix.strip.split, 'rake', 'acceptance')
|
119
122
|
end
|
120
123
|
|
121
124
|
# Finally exit and preserve the exit code
|
122
125
|
exit result.status.exitstatus
|
123
126
|
end
|
127
|
+
|
128
|
+
def run_command(*args)
|
129
|
+
begin
|
130
|
+
STDERR.raw! if STDERR.isatty
|
131
|
+
result = Backticks::Runner.new(interactive: true).run(args.flatten).join
|
132
|
+
ensure
|
133
|
+
STDERR.cooked! if STDERR.isatty
|
134
|
+
end
|
135
|
+
end
|
124
136
|
end
|
125
137
|
end
|
data/lib/onceover/testconfig.rb
CHANGED
@@ -47,15 +47,15 @@ class Onceover
|
|
47
47
|
@acceptance_tests = []
|
48
48
|
@opts = opts
|
49
49
|
@mock_functions = config['functions']
|
50
|
-
@before_conditions = config['before']
|
50
|
+
@before_conditions = config['before'] || []
|
51
51
|
@after_conditions = config['after']
|
52
52
|
@strict_variables = opts[:strict_variables] ? 'yes' : 'no'
|
53
53
|
|
54
54
|
# Set dynamic defaults for format
|
55
|
-
if opts[:format] == [:defaults]
|
55
|
+
if Array(opts[:format]) == [:defaults]
|
56
56
|
@formatters = opts[:parallel] ? ['OnceoverFormatterParallel'] : ['OnceoverFormatter']
|
57
57
|
else
|
58
|
-
@formatters = opts[:format]
|
58
|
+
@formatters = Array(opts[:format])
|
59
59
|
end
|
60
60
|
|
61
61
|
# Initialise all of the classes and nodes
|
@@ -104,12 +104,12 @@ class Onceover
|
|
104
104
|
def to_s
|
105
105
|
require 'colored'
|
106
106
|
|
107
|
-
<<-
|
107
|
+
<<-TESTCONF.gsub(/^\s{4}/,'')
|
108
108
|
#{'classes'.green} #{@classes.map{|c|c.name}}
|
109
109
|
#{'nodes'.green} #{@nodes.map{|n|n.name}}
|
110
110
|
#{'class_groups'.green} #{@class_groups}
|
111
111
|
#{'node_groups'.green} #{@node_groups.map{|g|g.name}}
|
112
|
-
|
112
|
+
TESTCONF
|
113
113
|
end
|
114
114
|
|
115
115
|
def self.find_list(thing)
|
@@ -177,30 +177,38 @@ class Onceover
|
|
177
177
|
puppetcode << File.read(condition_file)
|
178
178
|
end
|
179
179
|
return nil if puppetcode.count.zero?
|
180
|
+
|
180
181
|
puppetcode.join("\n")
|
181
182
|
end
|
182
183
|
|
183
184
|
def write_spec_test(location, test)
|
184
185
|
# Use an ERB template to write a spec test
|
185
|
-
File.write(
|
186
|
-
|
186
|
+
File.write(
|
187
|
+
"#{location}/#{test.to_s}_spec.rb",
|
188
|
+
Onceover::Controlrepo.evaluate_template('test_spec.rb.erb', binding)
|
189
|
+
)
|
187
190
|
end
|
188
191
|
|
189
192
|
def write_acceptance_tests(location, tests)
|
190
193
|
warn "[DEPRECATION] #{__method__} is deprecated due to the removal of Beaker"
|
191
194
|
|
192
|
-
File.write(
|
195
|
+
File.write(
|
196
|
+
"#{location}/acceptance_spec.rb",
|
193
197
|
Onceover::Controlrepo.evaluate_template('acceptance_test_spec.rb.erb', binding))
|
194
198
|
end
|
195
199
|
|
196
200
|
def write_spec_helper_acceptance(location, repo)
|
197
|
-
File.write(
|
198
|
-
|
201
|
+
File.write(
|
202
|
+
"#{location}/spec_helper_acceptance.rb",
|
203
|
+
Onceover::Controlrepo.evaluate_template('spec_helper_acceptance.rb.erb', binding)
|
204
|
+
)
|
199
205
|
end
|
200
206
|
|
201
207
|
def write_rakefile(location, pattern)
|
202
|
-
File.write(
|
203
|
-
|
208
|
+
File.write(
|
209
|
+
"#{location}/Rakefile",
|
210
|
+
Onceover::Controlrepo.evaluate_template('testconfig_Rakefile.erb', binding)
|
211
|
+
)
|
204
212
|
end
|
205
213
|
|
206
214
|
def write_spec_helper(location, repo)
|
@@ -222,8 +230,10 @@ class Onceover
|
|
222
230
|
repo.temp_modulepath = modulepath
|
223
231
|
|
224
232
|
# Use an ERB template to write a spec test
|
225
|
-
File.write(
|
226
|
-
|
233
|
+
File.write(
|
234
|
+
"#{location}/spec_helper.rb",
|
235
|
+
Onceover::Controlrepo.evaluate_template('spec_helper.rb.erb', binding)
|
236
|
+
)
|
227
237
|
end
|
228
238
|
|
229
239
|
def create_fixtures_symlinks(repo)
|