onceover 3.12.0 → 3.12.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3e2b22d1ea208cdaeeeb71b5a99e2f55f6056cb2
4
- data.tar.gz: d29bad7de9cfd34c55ece9b69bbb73b5b48cb182
3
+ metadata.gz: bf7fd944c3bc26e87d6fb637545e2a79f7913e88
4
+ data.tar.gz: af6d22e661957cae9092b623c9d337e949c4f219
5
5
  SHA512:
6
- metadata.gz: add796e1d03519fb411c5b2bc5a27b5ff0f00e52b9cea682aeb06b21ec31d36ddfcbbf5209a88fe9eda2a26650d49be47d611096f264b21e97302134faa7b8f0
7
- data.tar.gz: 73ec3b013c0c02598fa04d99dee1721b91c40d40ec2bd174e24393177f3052ee084d222afbf8791bbaeda8ae0263679e2a88e5c53b78e31ad3728c934b142d55
6
+ metadata.gz: aaab1848deba4d517a93debf8ed6d1ccf7d6251afc5974bb1240dcf341fbcfb096c2a88af5182578732bb817eaf78c638f0096073b6beb1193ce365c3af81100
7
+ data.tar.gz: ba295a61c754e4fd8c62a75ebacfc68b6fb724a90bc9484277065f1afbe542e3ce3fc50983be58c3adb34c4f1a9ae3629cabc0a9fcda4c1d38a7a311cae88595
data/features/run.feature CHANGED
@@ -12,6 +12,11 @@ Feature: Run rspec and acceptance test suites
12
12
  When I run onceover command "run spec"
13
13
  Then I should not see any errors
14
14
 
15
+ Scenario: Run correct spec tests in parallel
16
+ Given initialized control repo "basic"
17
+ When I run onceover command "run spec --parallel"
18
+ Then I should not see any errors
19
+
15
20
  Scenario: Using regexes to define tests
16
21
  Given initialized control repo "caching"
17
22
  When I run onceover command "run spec"
@@ -1,3 +1,4 @@
1
+ require 'rspec'
1
2
  require 'pathname'
2
3
 
3
4
  class OnceoverFormatter
@@ -53,6 +54,21 @@ class OnceoverFormatter
53
54
  def dump_failures notification
54
55
  require 'onceover/controlrepo'
55
56
 
57
+ failures = extract_failures(notification)
58
+
59
+ # Put some spacing before the results
60
+ @output << "\n\n\n"
61
+
62
+ failures.each do |_name, role|
63
+ @output << Onceover::Controlrepo.evaluate_template('error_summary.yaml.erb', binding)
64
+ end
65
+
66
+ @output << "\n"
67
+ end
68
+
69
+ # This method takes a notification and formats it into a hash that can be
70
+ # printed easily
71
+ def extract_failures notification
56
72
  # Group by role
57
73
  grouped = notification.failed_examples.group_by { |e| e.metadata[:example_group][:parent_example_group][:description]}
58
74
 
@@ -61,17 +77,15 @@ class OnceoverFormatter
61
77
  grouped[role] = failures.uniq { |f| f.metadata[:execution_result].exception.to_s }
62
78
  end
63
79
 
64
- # Put some spacing before the results
65
- @output << "\n\n\n"
66
-
80
+ # Extract the errors and remove all RSpec objects
67
81
  grouped.each do |role, failures|
68
- role = {
82
+ grouped[role] = {
69
83
  name: role,
70
84
  errors: failures.map { |f| parse_errors(f.metadata[:execution_result].exception.to_s)}.flatten,
71
85
  }
72
-
73
- @output << Onceover::Controlrepo.evaluate_template('error_summary.yaml.erb', binding)
74
86
  end
87
+
88
+ grouped
75
89
  end
76
90
 
77
91
  def parse_errors(raw_error)
@@ -140,8 +154,6 @@ class OnceoverFormatter
140
154
  file.relative_path_from(tempdir + environmentpath + "production").to_s
141
155
  end
142
156
 
143
- private
144
-
145
157
  # Below are defined the styles for the output
146
158
  def class_name(text)
147
159
  RSpec::Core::Formatters::ConsoleCodes.wrap(text, :bold)
@@ -189,34 +201,69 @@ class OnceoverFormatter
189
201
 
190
202
  end
191
203
 
192
- # class OnceoverFormatterParallel < OnceoverFormatter
193
- # require 'yaml'
204
+ class OnceoverFormatterParallel < OnceoverFormatter
205
+ require 'yaml'
206
+
207
+ RSpec::Core::Formatters.register self, :example_group_started,
208
+ :example_passed, :example_failed, :example_pending, :dump_failures
209
+
210
+ def example_group_started notification
211
+ # Do nothing
212
+ end
213
+
214
+ def example_passed notification
215
+ @output << green('P')
216
+ @output.flush
217
+ end
218
+
219
+ def example_failed notification
220
+ @output << red('F')
221
+ @output.flush
222
+ end
223
+
224
+ def example_pending notification
225
+ @output << yellow('?')
226
+ @output.flush
227
+ end
228
+
229
+ def dump_failures notification
230
+ # Create a random string
231
+ require 'securerandom'
232
+ random_string = SecureRandom.hex
194
233
 
195
- # def example_group_started notification
196
- # # Do nothing
197
- # end
234
+ # Ensure that the folder exists
235
+ FileUtils.mkdir_p "#{RSpec.configuration.onceover_tempdir}/parallel"
198
236
 
199
- # def example_passed notification
200
- # @output << green('P')
201
- # end
237
+ # Dump the notification to a unique file
238
+ File.open("#{RSpec.configuration.onceover_tempdir}/parallel/results-#{random_string}.yaml", "w") do |file|
239
+ file.write(extract_failures(notification).to_yaml)
240
+ end
241
+ end
202
242
 
203
- # def example_failed notification
204
- # @output << red('F')
205
- # end
243
+ def output_results(directory)
244
+ require 'rspec/core/example'
245
+ # Read all yaml files
246
+ results = {}
247
+ files = Dir["#{directory}/*.yaml"]
206
248
 
207
- # def example_pending notification
208
- # @output << yellow('?')
209
- # end
249
+ # Merge data
250
+ errors = files.reduce({}) do |errs, file|
251
+ # Read all files and merge them
252
+ errs.merge(YAML.load(File.read(file))) # rubocop:disable Security/YAMLLoad
253
+ end
254
+
255
+ # Delete files from the disk
256
+ files.each { |f| File.delete(f) }
210
257
 
211
- # def dump_failures
212
- # # TODO: This should write to a file and then get picked up and formatted by onceover itself
213
- # # might need to use a module for the formatting
214
- # require 'pry'
215
- # binding.pry
216
- # RSpec.configuration.onceover_tempdir
217
- # end
258
+ @output << "\n\n\n"
218
259
 
219
- # end
260
+ # Output errors
261
+ errors.each do |_name, role|
262
+ @output << Onceover::Controlrepo.evaluate_template('error_summary.yaml.erb', binding)
263
+ end
264
+ @output << "\n"
265
+ end
266
+ end
220
267
 
221
268
  class FailureCollector
222
269
  RSpec::Core::Formatters.register self, :dump_failures
@@ -84,15 +84,12 @@ class Onceover
84
84
  logger.debug "Running #{@command_prefix}rake spec_standalone from #{@repo.tempdir}"
85
85
  result = Backticks::Runner.new(interactive:true).run(@command_prefix.strip.split, 'rake', 'spec_standalone').join
86
86
  end
87
- # TODO: Refactor this to be much nicer
88
- if @config.formatters.include? 'FailureCollector'
89
- puts '----------- Summary of failures -----------'
90
- if File.exist?("#{@repo.tempdir}/failures.out") and ! File.zero?("#{@repo.tempdir}/failures.out")
91
- logger.debug "Reading failures from #{@repo.tempdir}/failures.out"
92
- puts File.read("#{@repo.tempdir}/failures.out")
93
- else
94
- puts 'No failures detected'
95
- end
87
+
88
+ # Print a summary if we were running ion parallel
89
+ if @config.formatters.include? 'OnceoverFormatterParallel'
90
+ require 'onceover/rspec/formatters'
91
+ formatter = OnceoverFormatterParallel.new(STDOUT)
92
+ formatter.output_results("#{repo.tempdir}/parallel")
96
93
  end
97
94
 
98
95
  # Finally exit and preserve the exit code
@@ -53,7 +53,7 @@ class Onceover
53
53
 
54
54
  # Set dynamic defaults for format
55
55
  if opts[:format] == [:defaults]
56
- @formatters = opts[:parallel] ? ['documentation', 'FailureCollector'] : ['OnceoverFormatter']
56
+ @formatters = opts[:parallel] ? ['OnceoverFormatterParallel'] : ['OnceoverFormatter']
57
57
  else
58
58
  @formatters = opts[:format]
59
59
  end
data/onceover.gemspec CHANGED
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "onceover"
7
- s.version = "3.12.0"
7
+ s.version = "3.12.1"
8
8
  s.authors = ["Dylan Ratcliffe"]
9
9
  s.email = ["dylan.ratcliffe@puppet.com"]
10
10
  s.homepage = "https://github.com/dylanratcliffe/onceover"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: onceover
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.12.0
4
+ version: 3.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dylan Ratcliffe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-16 00:00:00.000000000 Z
11
+ date: 2019-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake