coveralls_reborn 0.8.21

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.
@@ -0,0 +1,114 @@
1
+ module Coveralls
2
+ #
3
+ # Public: Methods for formatting strings with Term::ANSIColor.
4
+ # Does not utilize monkey-patching and should play nicely when
5
+ # included with other libraries.
6
+ #
7
+ # All methods are module methods and should be called on
8
+ # the Coveralls::Output module.
9
+ #
10
+ # Examples
11
+ #
12
+ # Coveralls::Output.format("Hello World", :color => "cyan")
13
+ # # => "\e[36mHello World\e[0m"
14
+ #
15
+ # Coveralls::Output.print("Hello World")
16
+ # # Hello World => nil
17
+ #
18
+ # Coveralls::Output.puts("Hello World", :color => "underline")
19
+ # # Hello World
20
+ # # => nil
21
+ #
22
+ # To silence output completely:
23
+ #
24
+ # Coveralls::Output.silent = true
25
+ #
26
+ # or set this environment variable:
27
+ #
28
+ # COVERALLS_SILENT
29
+ #
30
+ # To disable color completely:
31
+ #
32
+ # Coveralls::Output.no_color = true
33
+
34
+ module Output
35
+ attr_accessor :silent, :no_color
36
+ attr_writer :output
37
+ extend self
38
+
39
+ def output
40
+ (defined?(@output) && @output) || $stdout
41
+ end
42
+
43
+ def no_color?
44
+ (defined?(@no_color)) && @no_color
45
+ end
46
+
47
+ # Public: Formats the given string with the specified color
48
+ # through Term::ANSIColor
49
+ #
50
+ # string - the text to be formatted
51
+ # options - The hash of options used for formatting the text:
52
+ # :color - The color to be passed as a method to
53
+ # Term::ANSIColor
54
+ #
55
+ # Examples
56
+ #
57
+ # Coveralls::Output.format("Hello World!", :color => "cyan")
58
+ # # => "\e[36mHello World\e[0m"
59
+ #
60
+ # Returns the formatted string.
61
+ def format(string, options = {})
62
+ unless no_color?
63
+ require 'term/ansicolor'
64
+ if options[:color]
65
+ options[:color].split(/\s/).reverse_each do |color|
66
+ if Term::ANSIColor.respond_to?(color.to_sym)
67
+ string = Term::ANSIColor.send(color.to_sym, string)
68
+ end
69
+ end
70
+ end
71
+ end
72
+ string
73
+ end
74
+
75
+ # Public: Passes .format to Kernel#puts
76
+ #
77
+ # string - the text to be formatted
78
+ # options - The hash of options used for formatting the text:
79
+ # :color - The color to be passed as a method to
80
+ # Term::ANSIColor
81
+ #
82
+ #
83
+ # Example
84
+ #
85
+ # Coveralls::Output.puts("Hello World", :color => "cyan")
86
+ #
87
+ # Returns nil.
88
+ def puts(string, options = {})
89
+ return if silent?
90
+ (options[:output] || output).puts self.format(string, options)
91
+ end
92
+
93
+ # Public: Passes .format to Kernel#print
94
+ #
95
+ # string - the text to be formatted
96
+ # options - The hash of options used for formatting the text:
97
+ # :color - The color to be passed as a method to
98
+ # Term::ANSIColor
99
+ #
100
+ # Example
101
+ #
102
+ # Coveralls::Output.print("Hello World!", :color => "underline")
103
+ #
104
+ # Returns nil.
105
+ def print(string, options = {})
106
+ return if silent?
107
+ (options[:output] || output).print self.format(string, options)
108
+ end
109
+
110
+ def silent?
111
+ ENV["COVERALLS_SILENT"] || (defined?(@silent) && @silent)
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,19 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+
4
+ module Coveralls
5
+ class RakeTask < ::Rake::TaskLib
6
+ include ::Rake::DSL if defined?(::Rake::DSL)
7
+
8
+ def initialize(*args, &task_block)
9
+ namespace :coveralls do
10
+ desc "Push latest coverage results to Coveralls.io"
11
+ task :push do
12
+ require 'coveralls'
13
+ Coveralls.push!
14
+ end
15
+ end
16
+ end # initialize
17
+
18
+ end # class
19
+ end # module
@@ -0,0 +1,101 @@
1
+ module Coveralls
2
+ module SimpleCov
3
+ class Formatter
4
+
5
+ def display_result(result)
6
+ # Log which files would be submitted.
7
+ if result.files.length > 0
8
+ Coveralls::Output.puts "[Coveralls] Some handy coverage stats:"
9
+ else
10
+ Coveralls::Output.puts "[Coveralls] There are no covered files.", color: "yellow"
11
+ end
12
+ result.files.each do |f|
13
+ Coveralls::Output.print " * "
14
+ Coveralls::Output.print short_filename(f.filename).to_s, color: "cyan"
15
+ Coveralls::Output.print " => ", color: "white"
16
+ cov = "#{f.covered_percent.round}%"
17
+ if f.covered_percent > 90
18
+ Coveralls::Output.print cov, color: "green"
19
+ elsif f.covered_percent > 80
20
+ Coveralls::Output.print cov, color: "yellow"
21
+ else
22
+ Coveralls::Output.print cov, color: "red"
23
+ end
24
+ Coveralls::Output.puts ""
25
+ end
26
+ true
27
+ end
28
+
29
+ def get_source_files(result)
30
+ # Gather the source files.
31
+ source_files = []
32
+ result.files.each do |file|
33
+ properties = {}
34
+
35
+ # Get Source
36
+ properties[:source] = File.open(file.filename, "rb:utf-8").read
37
+
38
+ # Get the root-relative filename
39
+ properties[:name] = short_filename(file.filename)
40
+
41
+ # Get the coverage
42
+ properties[:coverage] = file.coverage.dup
43
+
44
+ # Skip nocov lines
45
+ file.lines.each_with_index do |line, i|
46
+ properties[:coverage][i] = nil if line.skipped?
47
+ end
48
+
49
+ source_files << properties
50
+ end
51
+ source_files
52
+ end
53
+
54
+ def format(result)
55
+
56
+ unless Coveralls.should_run?
57
+ if Coveralls.noisy?
58
+ display_result result
59
+ end
60
+ return
61
+ end
62
+
63
+ # Post to Coveralls.
64
+ API.post_json "jobs",
65
+ source_files: get_source_files(result),
66
+ test_framework: result.command_name.downcase,
67
+ run_at: result.created_at
68
+
69
+ Coveralls::Output.puts output_message result
70
+
71
+ true
72
+
73
+ rescue Exception => e
74
+ display_error e
75
+ end
76
+
77
+ def display_error(e)
78
+ Coveralls::Output.puts "Coveralls encountered an exception:", color: "red"
79
+ Coveralls::Output.puts e.class.to_s, color: "red"
80
+ Coveralls::Output.puts e.message, color: "red"
81
+ e.backtrace.each do |line|
82
+ Coveralls::Output.puts line, color: "red"
83
+ end if e.backtrace
84
+ if e.respond_to?(:response) && e.response
85
+ Coveralls::Output.puts e.response.to_s, color: "red"
86
+ end
87
+ false
88
+ end
89
+
90
+ def output_message(result)
91
+ "Coverage is at #{result.covered_percent.round(2) rescue result.covered_percent.round}%.\nCoverage report sent to Coveralls."
92
+ end
93
+
94
+ def short_filename(filename)
95
+ filename = filename.gsub(::SimpleCov.root, '.').gsub(/^\.\//, '') if ::SimpleCov.root
96
+ filename
97
+ end
98
+
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,3 @@
1
+ module Coveralls
2
+ VERSION = "0.8.21"
3
+ end
data/lib/coveralls.rb ADDED
@@ -0,0 +1,101 @@
1
+ require "coveralls/version"
2
+ require "coveralls/configuration"
3
+ require "coveralls/api"
4
+ require "coveralls/output"
5
+ require "coveralls/simplecov"
6
+
7
+ module Coveralls
8
+ extend self
9
+
10
+ class NilFormatter
11
+ def format(result)
12
+ end
13
+ end
14
+
15
+ attr_accessor :testing, :noisy, :run_locally
16
+
17
+ def wear!(simplecov_setting=nil, &block)
18
+ setup!
19
+ start! simplecov_setting, &block
20
+ end
21
+
22
+ def wear_merged!(simplecov_setting=nil, &block)
23
+ require 'simplecov'
24
+ @@adapter = :simplecov
25
+ ::SimpleCov.formatter = NilFormatter
26
+ start! simplecov_setting, &block
27
+ end
28
+
29
+ def push!
30
+ require 'simplecov'
31
+ result = ::SimpleCov::ResultMerger.merged_result
32
+ Coveralls::SimpleCov::Formatter.new.format result
33
+ end
34
+
35
+ def setup!
36
+ # Try to load up SimpleCov.
37
+ @@adapter = nil
38
+ if defined?(::SimpleCov)
39
+ @@adapter = :simplecov
40
+ else
41
+ begin
42
+ require 'simplecov'
43
+ @@adapter = :simplecov if defined?(::SimpleCov)
44
+ rescue
45
+ end
46
+ end
47
+
48
+ # Load the appropriate adapter.
49
+ if @@adapter == :simplecov
50
+ ::SimpleCov.formatter = Coveralls::SimpleCov::Formatter
51
+ Coveralls::Output.puts("[Coveralls] Set up the SimpleCov formatter.", color: "green")
52
+ else
53
+ Coveralls::Output.puts("[Coveralls] Couldn't find an appropriate adapter.", color: "red")
54
+ end
55
+
56
+ end
57
+
58
+ def start!(simplecov_setting = 'test_frameworks', &block)
59
+ if @@adapter == :simplecov
60
+ ::SimpleCov.add_filter 'vendor'
61
+
62
+ if simplecov_setting
63
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov's '#{simplecov_setting}' settings.", color: "green")
64
+ if block_given?
65
+ ::SimpleCov.start(simplecov_setting) { instance_eval(&block)}
66
+ else
67
+ ::SimpleCov.start(simplecov_setting)
68
+ end
69
+ elsif block
70
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov settings defined in block.", color: "green")
71
+ ::SimpleCov.start { instance_eval(&block) }
72
+ else
73
+ Coveralls::Output.puts("[Coveralls] Using SimpleCov's default settings.", color: "green")
74
+ ::SimpleCov.start
75
+ end
76
+ end
77
+ end
78
+
79
+ def should_run?
80
+ # Fail early if we're not on a CI
81
+ unless will_run?
82
+ Coveralls::Output.puts("[Coveralls] Outside the CI environment, not sending data.", color: "yellow")
83
+ return false
84
+ end
85
+
86
+ if ENV["COVERALLS_RUN_LOCALLY"] || (defined?(@run_locally) && @run_locally)
87
+ Coveralls::Output.puts("[Coveralls] Creating a new job on Coveralls from local coverage results.", color: "cyan")
88
+ end
89
+
90
+ true
91
+ end
92
+
93
+ def will_run?
94
+ ENV["CI"] || ENV["JENKINS_URL"] || ENV['TDDIUM'] ||
95
+ ENV["COVERALLS_RUN_LOCALLY"] || (defined?(@testing) && @testing)
96
+ end
97
+
98
+ def noisy?
99
+ ENV["COVERALLS_NOISY"] || (defined?(@noisy) && @noisy)
100
+ end
101
+ end
@@ -0,0 +1,355 @@
1
+ require 'spec_helper'
2
+
3
+ describe Coveralls::Configuration do
4
+ before do
5
+ ENV.stub(:[]).and_return(nil)
6
+ end
7
+
8
+ describe '.configuration' do
9
+ it "returns a hash with the default keys" do
10
+ config = Coveralls::Configuration.configuration
11
+ config.should be_a(Hash)
12
+ config.keys.should include(:environment)
13
+ config.keys.should include(:git)
14
+ end
15
+
16
+ context 'yaml_config' do
17
+ let(:repo_token) { SecureRandom.hex(4) }
18
+ let(:repo_secret_token) { SecureRandom.hex(4) }
19
+ let(:yaml_config) {
20
+ {
21
+ 'repo_token' => repo_token,
22
+ 'repo_secret_token' => repo_secret_token
23
+ }
24
+ }
25
+
26
+ before do
27
+ Coveralls::Configuration.stub(:yaml_config).and_return(yaml_config)
28
+ end
29
+
30
+ it 'sets the Yaml config and associated variables if present' do
31
+ config = Coveralls::Configuration.configuration
32
+ config[:configuration].should eq(yaml_config)
33
+ config[:repo_token].should eq(repo_token)
34
+ end
35
+
36
+ it 'uses the repo_secret_token if the repo_token is not set' do
37
+ yaml_config.delete('repo_token')
38
+ config = Coveralls::Configuration.configuration
39
+ config[:configuration].should eq(yaml_config)
40
+ config[:repo_token].should eq(repo_secret_token)
41
+ end
42
+ end
43
+
44
+ context 'repo_token in environment' do
45
+ let(:repo_token) { SecureRandom.hex(4) }
46
+
47
+ before do
48
+ ENV.stub(:[]).with('COVERALLS_REPO_TOKEN').and_return(repo_token)
49
+ end
50
+
51
+ it 'pulls the repo token from the environment if set' do
52
+ config = Coveralls::Configuration.configuration
53
+ config[:repo_token].should eq(repo_token)
54
+ end
55
+ end
56
+
57
+ context 'Services' do
58
+ context 'with env based service name' do
59
+ let(:service_name) { 'travis-enterprise' }
60
+ before do
61
+ ENV.stub(:[]).with('TRAVIS').and_return('1')
62
+ ENV.stub(:[]).with('COVERALLS_SERVICE_NAME').and_return(service_name)
63
+ end
64
+
65
+ it 'pulls the service name from the environment if set' do
66
+ config = Coveralls::Configuration.configuration
67
+ config[:service_name].should eq(service_name)
68
+ end
69
+ end
70
+
71
+ context 'on Travis' do
72
+ before do
73
+ ENV.stub(:[]).with('TRAVIS').and_return('1')
74
+ end
75
+
76
+ it 'should set service parameters for this service and no other' do
77
+ Coveralls::Configuration.should_receive(:set_service_params_for_travis).with(anything, anything)
78
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_circleci)
79
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_semaphore)
80
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_jenkins)
81
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_coveralls_local)
82
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci)
83
+ Coveralls::Configuration.configuration
84
+ end
85
+ end
86
+
87
+ context 'on CircleCI' do
88
+ before do
89
+ ENV.stub(:[]).with('CIRCLECI').and_return('1')
90
+ end
91
+
92
+ it 'should set service parameters for this service and no other' do
93
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_travis)
94
+ Coveralls::Configuration.should_receive(:set_service_params_for_circleci)
95
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_semaphore)
96
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_jenkins)
97
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_coveralls_local)
98
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci)
99
+ Coveralls::Configuration.configuration
100
+ end
101
+ end
102
+
103
+ context 'on Semaphore' do
104
+ before do
105
+ ENV.stub(:[]).with('SEMAPHORE').and_return('1')
106
+ end
107
+
108
+ it 'should set service parameters for this service and no other' do
109
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_travis)
110
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_circleci)
111
+ Coveralls::Configuration.should_receive(:set_service_params_for_semaphore)
112
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_jenkins)
113
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_coveralls_local)
114
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci)
115
+ Coveralls::Configuration.configuration
116
+ end
117
+ end
118
+
119
+ context 'when using Jenkins' do
120
+ before do
121
+ ENV.stub(:[]).with('JENKINS_URL').and_return('1')
122
+ end
123
+
124
+ it 'should set service parameters for this service and no other' do
125
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_travis)
126
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_circleci)
127
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_semaphore)
128
+ Coveralls::Configuration.should_receive(:set_service_params_for_jenkins)
129
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_coveralls_local)
130
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci)
131
+ Coveralls::Configuration.configuration
132
+ end
133
+ end
134
+
135
+ context 'when running Coveralls locally' do
136
+ before do
137
+ ENV.stub(:[]).with('COVERALLS_RUN_LOCALLY').and_return('1')
138
+ end
139
+
140
+ it 'should set service parameters for this service and no other' do
141
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_travis)
142
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_circleci)
143
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_semaphore)
144
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_jenkins)
145
+ Coveralls::Configuration.should_receive(:set_service_params_for_coveralls_local)
146
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci)
147
+ Coveralls::Configuration.configuration
148
+ end
149
+ end
150
+
151
+ context 'for generic CI' do
152
+ before do
153
+ ENV.stub(:[]).with('CI_NAME').and_return('1')
154
+ end
155
+
156
+ it 'should set service parameters for this service and no other' do
157
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_travis)
158
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_circleci)
159
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_semaphore)
160
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_jenkins)
161
+ Coveralls::Configuration.should_not_receive(:set_service_params_for_coveralls_local)
162
+ Coveralls::Configuration.should_receive(:set_standard_service_params_for_generic_ci).with(anything)
163
+ Coveralls::Configuration.configuration
164
+ end
165
+ end
166
+ end
167
+ end
168
+
169
+ describe '.set_service_params_for_travis' do
170
+ let(:travis_job_id) { SecureRandom.hex(4) }
171
+ before do
172
+ ENV.stub(:[]).with('TRAVIS_JOB_ID').and_return(travis_job_id)
173
+ end
174
+
175
+ it 'should set the service_job_id' do
176
+ config = {}
177
+ Coveralls::Configuration.set_service_params_for_travis(config, nil)
178
+ config[:service_job_id].should eq(travis_job_id)
179
+ end
180
+
181
+ it 'should set the service_name to travis-ci by default' do
182
+ config = {}
183
+ Coveralls::Configuration.set_service_params_for_travis(config, nil)
184
+ config[:service_name].should eq('travis-ci')
185
+ end
186
+
187
+ it 'should set the service_name to a value if one is passed in' do
188
+ config = {}
189
+ random_name = SecureRandom.hex(4)
190
+ Coveralls::Configuration.set_service_params_for_travis(config, random_name)
191
+ config[:service_name].should eq(random_name)
192
+ end
193
+ end
194
+
195
+ describe '.set_service_params_for_circleci' do
196
+ let(:circle_build_num) { SecureRandom.hex(4) }
197
+ before do
198
+ ENV.stub(:[]).with('CIRCLE_BUILD_NUM').and_return(circle_build_num)
199
+ end
200
+
201
+ it 'should set the expected parameters' do
202
+ config = {}
203
+ Coveralls::Configuration.set_service_params_for_circleci(config)
204
+ config[:service_name].should eq('circleci')
205
+ config[:service_number].should eq(circle_build_num)
206
+ end
207
+ end
208
+
209
+ describe '.set_service_params_for_gitlab' do
210
+ let(:commit_sha) { SecureRandom.hex(32) }
211
+ let(:service_job_number) { "spec:one" }
212
+ let(:service_job_id) { 1234 }
213
+ let(:service_branch) { "feature" }
214
+
215
+ before do
216
+ ENV.stub(:[]).with('CI_BUILD_NAME').and_return(service_job_number)
217
+ ENV.stub(:[]).with('CI_BUILD_ID').and_return(service_job_id)
218
+ ENV.stub(:[]).with('CI_BUILD_REF_NAME').and_return(service_branch)
219
+ ENV.stub(:[]).with('CI_BUILD_REF').and_return(commit_sha)
220
+ end
221
+
222
+ it 'should set the expected parameters' do
223
+ config = {}
224
+ Coveralls::Configuration.set_service_params_for_gitlab(config)
225
+ config[:service_name].should eq('gitlab-ci')
226
+ config[:service_job_number].should eq(service_job_number)
227
+ config[:service_job_id].should eq(service_job_id)
228
+ config[:service_branch].should eq(service_branch)
229
+ config[:commit_sha].should eq(commit_sha)
230
+ end
231
+ end
232
+
233
+ describe '.set_service_params_for_semaphore' do
234
+ let(:semaphore_build_num) { SecureRandom.hex(4) }
235
+ before do
236
+ ENV.stub(:[]).with('SEMAPHORE_BUILD_NUMBER').and_return(semaphore_build_num)
237
+ end
238
+
239
+ it 'should set the expected parameters' do
240
+ config = {}
241
+ Coveralls::Configuration.set_service_params_for_semaphore(config)
242
+ config[:service_name].should eq('semaphore')
243
+ config[:service_number].should eq(semaphore_build_num)
244
+ end
245
+ end
246
+
247
+ describe '.set_service_params_for_jenkins' do
248
+ let(:service_pull_request) { '1234' }
249
+ let(:build_num) { SecureRandom.hex(4) }
250
+ before do
251
+ ENV.stub(:[]).with('CI_PULL_REQUEST').and_return(service_pull_request)
252
+ ENV.stub(:[]).with('BUILD_NUMBER').and_return(build_num)
253
+ end
254
+
255
+ it 'should set the expected parameters' do
256
+ config = {}
257
+ Coveralls::Configuration.set_service_params_for_jenkins(config)
258
+ Coveralls::Configuration.set_standard_service_params_for_generic_ci(config)
259
+ config[:service_name].should eq('jenkins')
260
+ config[:service_number].should eq(build_num)
261
+ config[:service_pull_request].should eq(service_pull_request)
262
+ end
263
+ end
264
+
265
+ describe '.set_service_params_for_coveralls_local' do
266
+ it 'should set the expected parameters' do
267
+ config = {}
268
+ Coveralls::Configuration.set_service_params_for_coveralls_local(config)
269
+ config[:service_name].should eq('coveralls-ruby')
270
+ config[:service_job_id].should be_nil
271
+ config[:service_event_type].should eq('manual')
272
+ end
273
+ end
274
+
275
+ describe '.set_service_params_for_generic_ci' do
276
+ let(:service_name) { SecureRandom.hex(4) }
277
+ let(:service_number) { SecureRandom.hex(4) }
278
+ let(:service_build_url) { SecureRandom.hex(4) }
279
+ let(:service_branch) { SecureRandom.hex(4) }
280
+ let(:service_pull_request) { '1234' }
281
+
282
+ before do
283
+ ENV.stub(:[]).with('CI_NAME').and_return(service_name)
284
+ ENV.stub(:[]).with('CI_BUILD_NUMBER').and_return(service_number)
285
+ ENV.stub(:[]).with('CI_BUILD_URL').and_return(service_build_url)
286
+ ENV.stub(:[]).with('CI_BRANCH').and_return(service_branch)
287
+ ENV.stub(:[]).with('CI_PULL_REQUEST').and_return(service_pull_request)
288
+ end
289
+
290
+ it 'should set the expected parameters' do
291
+ config = {}
292
+ Coveralls::Configuration.set_standard_service_params_for_generic_ci(config)
293
+ config[:service_name].should eq(service_name)
294
+ config[:service_number].should eq(service_number)
295
+ config[:service_build_url].should eq(service_build_url)
296
+ config[:service_branch].should eq(service_branch)
297
+ config[:service_pull_request].should eq(service_pull_request)
298
+ end
299
+ end
300
+
301
+ describe '.set_service_params_for_appveyor' do
302
+ let(:service_number) { SecureRandom.hex(4) }
303
+ let(:service_branch) { SecureRandom.hex(4) }
304
+ let(:commit_sha) { SecureRandom.hex(4) }
305
+ let(:repo_name) { SecureRandom.hex(4) }
306
+
307
+ before do
308
+ ENV.stub(:[]).with('APPVEYOR_BUILD_VERSION').and_return(service_number)
309
+ ENV.stub(:[]).with('APPVEYOR_REPO_BRANCH').and_return(service_branch)
310
+ ENV.stub(:[]).with('APPVEYOR_REPO_COMMIT').and_return(commit_sha)
311
+ ENV.stub(:[]).with('APPVEYOR_REPO_NAME').and_return(repo_name)
312
+ end
313
+
314
+ it 'should set the expected parameters' do
315
+ config = {}
316
+ Coveralls::Configuration.set_service_params_for_appveyor(config)
317
+ config[:service_name].should eq('appveyor')
318
+ config[:service_number].should eq(service_number)
319
+ config[:service_branch].should eq(service_branch)
320
+ config[:commit_sha].should eq(commit_sha)
321
+ config[:service_build_url].should eq('https://ci.appveyor.com/project/%s/build/%s' % [repo_name, service_number])
322
+ end
323
+ end
324
+
325
+ describe '.git' do
326
+ let(:git_id) { SecureRandom.hex(2) }
327
+ let(:author_name) { SecureRandom.hex(4) }
328
+ let(:author_email) { SecureRandom.hex(4) }
329
+ let(:committer_name) { SecureRandom.hex(4) }
330
+ let(:committer_email) { SecureRandom.hex(4) }
331
+ let(:message) { SecureRandom.hex(4) }
332
+ let(:branch) { SecureRandom.hex(4) }
333
+
334
+ before do
335
+ allow(ENV).to receive(:fetch).with('GIT_ID', anything).and_return(git_id)
336
+ allow(ENV).to receive(:fetch).with('GIT_AUTHOR_NAME', anything).and_return(author_name)
337
+ allow(ENV).to receive(:fetch).with('GIT_AUTHOR_EMAIL', anything).and_return(author_email)
338
+ allow(ENV).to receive(:fetch).with('GIT_COMMITTER_NAME', anything).and_return(committer_name)
339
+ allow(ENV).to receive(:fetch).with('GIT_COMMITTER_EMAIL', anything).and_return(committer_email)
340
+ allow(ENV).to receive(:fetch).with('GIT_MESSAGE', anything).and_return(message)
341
+ allow(ENV).to receive(:fetch).with('GIT_BRANCH', anything).and_return(branch)
342
+ end
343
+
344
+ it 'uses ENV vars' do
345
+ config = Coveralls::Configuration.git
346
+ config[:head][:id].should eq(git_id)
347
+ config[:head][:author_name].should eq(author_name)
348
+ config[:head][:author_email].should eq(author_email)
349
+ config[:head][:committer_name].should eq(committer_name)
350
+ config[:head][:committer_email].should eq(committer_email)
351
+ config[:head][:message].should eq(message)
352
+ config[:branch].should eq(branch)
353
+ end
354
+ end
355
+ end