build_eval 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/build_eval/error.rb +0 -4
- data/lib/build_eval/http.rb +1 -5
- data/lib/build_eval/monitor/base.rb +2 -6
- data/lib/build_eval/monitor/composite.rb +0 -4
- data/lib/build_eval/monitor/server.rb +0 -3
- data/lib/build_eval/result/build_result.rb +2 -8
- data/lib/build_eval/result/composite_result.rb +0 -4
- data/lib/build_eval/result/server_result.rb +0 -4
- data/lib/build_eval/result/status.rb +9 -17
- data/lib/build_eval/server/cruise_control_response.rb +2 -6
- data/lib/build_eval/server/decorator.rb +3 -9
- data/lib/build_eval/server/invalid_selector_error.rb +0 -4
- data/lib/build_eval/server/jenkins.rb +0 -4
- data/lib/build_eval/server/team_city.rb +2 -6
- data/lib/build_eval/server/travis_com.rb +23 -0
- data/lib/build_eval/server/travis_org.rb +22 -0
- data/lib/build_eval/version.rb +1 -1
- data/lib/build_eval.rb +7 -11
- data/spec/lib/build_eval/error_spec.rb +4 -8
- data/spec/lib/build_eval/http_shared_context.rb +2 -4
- data/spec/lib/build_eval/http_spec.rb +30 -50
- data/spec/lib/build_eval/monitor/base_spec.rb +3 -7
- data/spec/lib/build_eval/monitor/composite_spec.rb +5 -9
- data/spec/lib/build_eval/monitor/server_spec.rb +6 -10
- data/spec/lib/build_eval/result/build_result_spec.rb +19 -30
- data/spec/lib/build_eval/result/composite_result_spec.rb +10 -18
- data/spec/lib/build_eval/result/server_result_spec.rb +14 -26
- data/spec/lib/build_eval/result/status_spec.rb +35 -73
- data/spec/lib/build_eval/server/cruise_control_response_spec.rb +33 -41
- data/spec/lib/build_eval/server/decorator_spec.rb +17 -31
- data/spec/lib/build_eval/server/invalid_selector_error_spec.rb +7 -11
- data/spec/lib/build_eval/server/jenkins_integration_spec.rb +10 -15
- data/spec/lib/build_eval/server/jenkins_spec.rb +17 -24
- data/spec/lib/build_eval/server/server_shared_examples.rb +3 -7
- data/spec/lib/build_eval/server/team_city_integration_spec.rb +18 -27
- data/spec/lib/build_eval/server/team_city_spec.rb +13 -20
- data/spec/lib/build_eval/server/travis_com_spec.rb +91 -0
- data/spec/lib/build_eval/server/travis_org_spec.rb +71 -0
- data/spec/lib/build_eval_smoke_spec.rb +11 -10
- data/spec/lib/build_eval_spec.rb +8 -16
- data/spec/spec_helper.rb +4 -4
- metadata +33 -18
- data/lib/build_eval/server/travis.rb +0 -23
- data/spec/lib/build_eval/server/travis_integration_spec.rb +0 -53
- data/spec/lib/build_eval/server/travis_spec.rb +0 -70
@@ -0,0 +1,91 @@
|
|
1
|
+
describe BuildEval::Server::TravisCom do
|
2
|
+
include_context 'stubbed http interactions'
|
3
|
+
|
4
|
+
let(:username) { 'some_username' }
|
5
|
+
let(:github_token) { 'ABCD1234' }
|
6
|
+
let(:constructor_args) do
|
7
|
+
{
|
8
|
+
username: username,
|
9
|
+
github_token: github_token
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
let(:travis_server) { described_class.new(constructor_args) }
|
14
|
+
|
15
|
+
before(:example) do
|
16
|
+
allow(Travis::Pro).to receive(:github_auth)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#initialize' do
|
20
|
+
subject { described_class.new(constructor_args) }
|
21
|
+
|
22
|
+
it 'should set the github auth token' do
|
23
|
+
expect(Travis::Pro).to receive(:github_auth).with(github_token)
|
24
|
+
|
25
|
+
subject
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#build_result' do
|
30
|
+
let(:build_name) { 'some_build_name' }
|
31
|
+
let(:travis_repository) { instance_double(Travis::Client::Repository) }
|
32
|
+
let(:travis_build) { instance_double(Travis::Client::Build) }
|
33
|
+
let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
|
34
|
+
|
35
|
+
subject { travis_server.build_result(build_name) }
|
36
|
+
|
37
|
+
before(:example) do
|
38
|
+
allow(Travis::Pro::Repository).to receive(:find).and_return(travis_repository)
|
39
|
+
allow(travis_repository).to receive(:last_build).and_return(travis_build)
|
40
|
+
allow(travis_build).to receive(:failed?).and_return(false)
|
41
|
+
allow(BuildEval::Result::BuildResult).to receive(:create).and_return(build_result)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'retrieves the relevant Travis repository' do
|
45
|
+
expect(Travis::Pro::Repository).to receive(:find).with("#{username}/#{build_name}").and_return(travis_repository)
|
46
|
+
|
47
|
+
begin
|
48
|
+
subject
|
49
|
+
rescue
|
50
|
+
Exception
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'retrieves the last build on the Travis repository' do
|
55
|
+
expect(travis_repository).to receive(:last_build).and_return(travis_build)
|
56
|
+
|
57
|
+
subject
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'retrieves the build status from the build' do
|
61
|
+
expect(travis_build).to receive(:failed?).and_return(false)
|
62
|
+
|
63
|
+
subject
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'creates a build result' do
|
67
|
+
expect(BuildEval::Result::BuildResult).to receive(:create).with(
|
68
|
+
build_name: "#{username}/#{build_name}",
|
69
|
+
status_name: 'Success'
|
70
|
+
).and_return(build_result)
|
71
|
+
|
72
|
+
subject
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns the parsed build result' do
|
76
|
+
expect(subject).to eql(build_result)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe '#to_s' do
|
81
|
+
subject { travis_server.to_s }
|
82
|
+
|
83
|
+
it 'returns a string indicating it uses the Travis CI Org service' do
|
84
|
+
expect(subject).to include('Travis CI Com')
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'returns a string containing the username' do
|
88
|
+
expect(subject).to include(username)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
describe BuildEval::Server::TravisOrg do
|
2
|
+
include_context 'stubbed http interactions'
|
3
|
+
|
4
|
+
let(:username) { 'some_username' }
|
5
|
+
let(:constructor_args) { { username: username } }
|
6
|
+
|
7
|
+
let(:travis_server) { described_class.new(constructor_args) }
|
8
|
+
|
9
|
+
describe '#build_result' do
|
10
|
+
let(:build_name) { 'some_build_name' }
|
11
|
+
let(:travis_repository) { instance_double(Travis::Client::Repository) }
|
12
|
+
let(:travis_build) { instance_double(Travis::Client::Build) }
|
13
|
+
let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
|
14
|
+
|
15
|
+
subject { travis_server.build_result(build_name) }
|
16
|
+
|
17
|
+
before(:example) do
|
18
|
+
allow(Travis::Repository).to receive(:find).and_return(travis_repository)
|
19
|
+
allow(travis_repository).to receive(:last_build).and_return(travis_build)
|
20
|
+
allow(travis_build).to receive(:failed?).and_return(false)
|
21
|
+
allow(BuildEval::Result::BuildResult).to receive(:create).and_return(build_result)
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'retrieves the relevant Travis repository' do
|
25
|
+
expect(Travis::Repository).to receive(:find).with("#{username}/#{build_name}").and_return(travis_repository)
|
26
|
+
|
27
|
+
begin
|
28
|
+
subject
|
29
|
+
rescue
|
30
|
+
Exception
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'retrieves the last build on the Travis repository' do
|
35
|
+
expect(travis_repository).to receive(:last_build).and_return(travis_build)
|
36
|
+
|
37
|
+
subject
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'retrieves the build status from the build' do
|
41
|
+
expect(travis_build).to receive(:failed?).and_return(false)
|
42
|
+
|
43
|
+
subject
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'creates a build result' do
|
47
|
+
expect(BuildEval::Result::BuildResult).to receive(:create).with(
|
48
|
+
build_name: "#{username}/#{build_name}",
|
49
|
+
status_name: 'Success'
|
50
|
+
).and_return(build_result)
|
51
|
+
|
52
|
+
subject
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'returns the parsed build result' do
|
56
|
+
expect(subject).to eql(build_result)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#to_s' do
|
61
|
+
subject { travis_server.to_s }
|
62
|
+
|
63
|
+
it 'returns a string indicating it uses the Travis CI Org service' do
|
64
|
+
expect(subject).to include('Travis CI Org')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'returns a string containing the username' do
|
68
|
+
expect(subject).to include(username)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,25 +1,26 @@
|
|
1
|
-
describe BuildEval,
|
1
|
+
describe BuildEval, 'integrating with a real CI server', smoke: true do
|
2
|
+
let(:server) { BuildEval.server(type: :TravisOrg, username: 'MYOB-Technology') }
|
2
3
|
|
3
|
-
let(:
|
4
|
-
|
5
|
-
let(:monitor) { server.monitor("build_eval") }
|
6
|
-
|
7
|
-
describe "the evaluated results from a build monitor for the server" do
|
4
|
+
let(:monitor) { server.monitor('build_eval') }
|
8
5
|
|
6
|
+
describe 'the evaluated results from a build monitor for the server' do
|
9
7
|
let(:tolerated_statuses) do
|
10
|
-
[
|
8
|
+
[
|
9
|
+
BuildEval::Result::Status::SUCCESS,
|
10
|
+
BuildEval::Result::Status::UNKNOWN,
|
11
|
+
BuildEval::Result::Status::FAILURE,
|
12
|
+
BuildEval::Result::Status::ERROR
|
13
|
+
]
|
11
14
|
end
|
12
15
|
|
13
16
|
subject { monitor.evaluate }
|
14
17
|
|
15
|
-
it
|
18
|
+
it 'indicate the builds status' do
|
16
19
|
expect(tolerated_statuses).to include(subject.status)
|
17
20
|
end
|
18
21
|
|
19
22
|
it "describe the build and it's status" do
|
20
23
|
expect(subject.to_s).to match(/build_eval: (#{tolerated_statuses.map(&:to_s).join("|")})/)
|
21
24
|
end
|
22
|
-
|
23
25
|
end
|
24
|
-
|
25
26
|
end
|
data/spec/lib/build_eval_spec.rb
CHANGED
@@ -1,34 +1,30 @@
|
|
1
1
|
describe BuildEval do
|
2
|
-
|
3
|
-
describe "::server" do
|
4
|
-
|
2
|
+
describe '::server' do
|
5
3
|
class BuildEval::Server::TestableServer
|
6
|
-
|
7
4
|
def initialize(_args)
|
8
5
|
# Intentionally blank
|
9
6
|
end
|
10
|
-
|
11
7
|
end
|
12
8
|
|
13
9
|
let(:server_type) { :TestableServer }
|
14
|
-
let(:server_arguments) { { key1:
|
10
|
+
let(:server_arguments) { { key1: 'value1', key2: 'value2', key3: 'value3' } }
|
15
11
|
let(:args) { { type: server_type }.merge(server_arguments) }
|
16
12
|
|
17
13
|
subject { described_class.server(args) }
|
18
14
|
|
19
|
-
it
|
15
|
+
it 'constructs an instance of the server with the provided type' do
|
20
16
|
expect(BuildEval::Server::TestableServer).to receive(:new)
|
21
17
|
|
22
18
|
subject
|
23
19
|
end
|
24
20
|
|
25
|
-
it
|
21
|
+
it 'constructs the instance with additional arguments' do
|
26
22
|
expect(BuildEval::Server::TestableServer).to receive(:new).with(server_arguments)
|
27
23
|
|
28
24
|
subject
|
29
25
|
end
|
30
26
|
|
31
|
-
it
|
27
|
+
it 'decorates the server with standard server behaviour' do
|
32
28
|
server = instance_double(BuildEval::Server::TestableServer)
|
33
29
|
allow(BuildEval::Server::TestableServer).to receive(:new).and_return(server)
|
34
30
|
expect(BuildEval::Server::Decorator).to receive(:new).with(server)
|
@@ -36,23 +32,19 @@ describe BuildEval do
|
|
36
32
|
subject
|
37
33
|
end
|
38
34
|
|
39
|
-
it
|
35
|
+
it 'returns the decorated server' do
|
40
36
|
server_decorator = instance_double(BuildEval::Server::Decorator)
|
41
37
|
allow(BuildEval::Server::Decorator).to receive(:new).and_return(server_decorator)
|
42
38
|
|
43
39
|
expect(subject).to eql(server_decorator)
|
44
40
|
end
|
45
41
|
|
46
|
-
context
|
47
|
-
|
42
|
+
context 'when a server of the provided type is not found' do
|
48
43
|
let(:server_type) { :invalid_type }
|
49
44
|
|
50
|
-
it
|
45
|
+
it 'raises an error indicating the server type is invalid' do
|
51
46
|
expect { subject }.to raise_error("Server type '#{server_type}' is invalid")
|
52
47
|
end
|
53
|
-
|
54
48
|
end
|
55
|
-
|
56
49
|
end
|
57
|
-
|
58
50
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler.require(:development)
|
3
3
|
|
4
|
-
if ENV[
|
4
|
+
if ENV['coverage']
|
5
5
|
CodeClimate::TestReporter.start
|
6
6
|
|
7
7
|
SimpleCov.start do
|
8
|
-
coverage_dir
|
8
|
+
coverage_dir 'tmp/coverage'
|
9
9
|
|
10
|
-
add_filter
|
10
|
+
add_filter '/spec/'
|
11
11
|
|
12
12
|
minimum_coverage 100
|
13
13
|
refuse_coverage_drop
|
@@ -16,6 +16,6 @@ end
|
|
16
16
|
|
17
17
|
require_relative '../lib/build_eval'
|
18
18
|
|
19
|
-
%w
|
19
|
+
%w( shared_examples shared_context ).each do |file_type|
|
20
20
|
Dir[::File.expand_path("../**/*_#{file_type}.rb", __FILE__)].each { |file| require file }
|
21
21
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: build_eval
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Ueckerman
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-06-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: nokogiri
|
@@ -25,20 +25,34 @@ dependencies:
|
|
25
25
|
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.6'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: travis
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '1.8'
|
35
|
+
type: :runtime
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '1.8'
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: rake
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
31
45
|
requirements:
|
32
46
|
- - "~>"
|
33
47
|
- !ruby/object:Gem::Version
|
34
|
-
version: '
|
48
|
+
version: '11.1'
|
35
49
|
type: :development
|
36
50
|
prerelease: false
|
37
51
|
version_requirements: !ruby/object:Gem::Requirement
|
38
52
|
requirements:
|
39
53
|
- - "~>"
|
40
54
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
55
|
+
version: '11.1'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: travis-lint
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -54,19 +68,19 @@ dependencies:
|
|
54
68
|
- !ruby/object:Gem::Version
|
55
69
|
version: '2.0'
|
56
70
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
71
|
+
name: rubocop
|
58
72
|
requirement: !ruby/object:Gem::Requirement
|
59
73
|
requirements:
|
60
74
|
- - "~>"
|
61
75
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
76
|
+
version: 0.40.0
|
63
77
|
type: :development
|
64
78
|
prerelease: false
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
81
|
- - "~>"
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
83
|
+
version: 0.40.0
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
85
|
name: rspec
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -101,29 +115,29 @@ dependencies:
|
|
101
115
|
requirements:
|
102
116
|
- - "~>"
|
103
117
|
- !ruby/object:Gem::Version
|
104
|
-
version: '0.
|
118
|
+
version: '0.11'
|
105
119
|
type: :development
|
106
120
|
prerelease: false
|
107
121
|
version_requirements: !ruby/object:Gem::Requirement
|
108
122
|
requirements:
|
109
123
|
- - "~>"
|
110
124
|
- !ruby/object:Gem::Version
|
111
|
-
version: '0.
|
125
|
+
version: '0.11'
|
112
126
|
- !ruby/object:Gem::Dependency
|
113
127
|
name: codeclimate-test-reporter
|
114
128
|
requirement: !ruby/object:Gem::Requirement
|
115
129
|
requirements:
|
116
130
|
- - "~>"
|
117
131
|
- !ruby/object:Gem::Version
|
118
|
-
version: '0.
|
132
|
+
version: '0.5'
|
119
133
|
type: :development
|
120
134
|
prerelease: false
|
121
135
|
version_requirements: !ruby/object:Gem::Requirement
|
122
136
|
requirements:
|
123
137
|
- - "~>"
|
124
138
|
- !ruby/object:Gem::Version
|
125
|
-
version: '0.
|
126
|
-
description: Evaluates the effective status of continuous integration builds.
|
139
|
+
version: '0.5'
|
140
|
+
description: Evaluates the effective status of continuous integration builds. Useful
|
127
141
|
for subsequent display on information radiators.
|
128
142
|
email: matthew.ueckerman@myob.com
|
129
143
|
executables: []
|
@@ -145,7 +159,8 @@ files:
|
|
145
159
|
- "./lib/build_eval/server/invalid_selector_error.rb"
|
146
160
|
- "./lib/build_eval/server/jenkins.rb"
|
147
161
|
- "./lib/build_eval/server/team_city.rb"
|
148
|
-
- "./lib/build_eval/server/
|
162
|
+
- "./lib/build_eval/server/travis_com.rb"
|
163
|
+
- "./lib/build_eval/server/travis_org.rb"
|
149
164
|
- "./lib/build_eval/version.rb"
|
150
165
|
- "./spec/lib/build_eval/error_spec.rb"
|
151
166
|
- "./spec/lib/build_eval/http_shared_context.rb"
|
@@ -165,8 +180,8 @@ files:
|
|
165
180
|
- "./spec/lib/build_eval/server/server_shared_examples.rb"
|
166
181
|
- "./spec/lib/build_eval/server/team_city_integration_spec.rb"
|
167
182
|
- "./spec/lib/build_eval/server/team_city_spec.rb"
|
168
|
-
- "./spec/lib/build_eval/server/
|
169
|
-
- "./spec/lib/build_eval/server/
|
183
|
+
- "./spec/lib/build_eval/server/travis_com_spec.rb"
|
184
|
+
- "./spec/lib/build_eval/server/travis_org_spec.rb"
|
170
185
|
- "./spec/lib/build_eval_smoke_spec.rb"
|
171
186
|
- "./spec/lib/build_eval_spec.rb"
|
172
187
|
- "./spec/spec_helper.rb"
|
@@ -190,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
190
205
|
version: '0'
|
191
206
|
requirements: []
|
192
207
|
rubyforge_project: build_eval
|
193
|
-
rubygems_version: 2.
|
208
|
+
rubygems_version: 2.5.1
|
194
209
|
signing_key:
|
195
210
|
specification_version: 4
|
196
211
|
summary: Evaluates the effective status of continuous integration builds
|
@@ -213,8 +228,8 @@ test_files:
|
|
213
228
|
- "./spec/lib/build_eval/server/server_shared_examples.rb"
|
214
229
|
- "./spec/lib/build_eval/server/team_city_integration_spec.rb"
|
215
230
|
- "./spec/lib/build_eval/server/team_city_spec.rb"
|
216
|
-
- "./spec/lib/build_eval/server/
|
217
|
-
- "./spec/lib/build_eval/server/
|
231
|
+
- "./spec/lib/build_eval/server/travis_com_spec.rb"
|
232
|
+
- "./spec/lib/build_eval/server/travis_org_spec.rb"
|
218
233
|
- "./spec/lib/build_eval_smoke_spec.rb"
|
219
234
|
- "./spec/lib/build_eval_spec.rb"
|
220
235
|
- "./spec/spec_helper.rb"
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module BuildEval
|
2
|
-
module Server
|
3
|
-
|
4
|
-
class Travis
|
5
|
-
|
6
|
-
def initialize(args)
|
7
|
-
@http = BuildEval::Http.new(args)
|
8
|
-
@username = args[:username]
|
9
|
-
end
|
10
|
-
|
11
|
-
def build_result(name)
|
12
|
-
raw_response = @http.get("https://api.travis-ci.org/repositories/#{@username}/#{name}/cc.xml")
|
13
|
-
BuildEval::Server::CruiseControlResponse.new(raw_response).parse_result("//Project")
|
14
|
-
end
|
15
|
-
|
16
|
-
def to_s
|
17
|
-
"Travis CI #{@username}"
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
end
|
@@ -1,53 +0,0 @@
|
|
1
|
-
describe BuildEval::Server::Travis, "integrating with a response parser", integration: true do
|
2
|
-
include_context "stubbed http interactions"
|
3
|
-
|
4
|
-
let(:username) { "some_username" }
|
5
|
-
|
6
|
-
let(:travis) { described_class.new(username: username) }
|
7
|
-
|
8
|
-
describe "#build_result" do
|
9
|
-
|
10
|
-
let(:build_name) { "some_build_name" }
|
11
|
-
let(:response) { instance_double(Net::HTTPResponse, body: response_body) }
|
12
|
-
|
13
|
-
subject { travis.build_result(build_name) }
|
14
|
-
|
15
|
-
before(:example) { allow(http).to receive(:get).and_return(response) }
|
16
|
-
|
17
|
-
context "when the server responds successfully with build results" do
|
18
|
-
|
19
|
-
let(:latest_build_status) { "Success" }
|
20
|
-
let(:response_body) do
|
21
|
-
<<-RESPONSE
|
22
|
-
<Projects>
|
23
|
-
<Project name="#{username}/#{build_name}" activity="Sleeping" lastBuildStatus="#{latest_build_status}" lastBuildLabel="2" lastBuildTime="2015-08-13T08:31:27.000+0000" webUrl="https://travis-ci.org/#{username}/#{build_name}" />
|
24
|
-
</Projects>
|
25
|
-
RESPONSE
|
26
|
-
end
|
27
|
-
|
28
|
-
it "creates a build result containing the build name" do
|
29
|
-
expect(BuildEval::Result::BuildResult).to receive(:create).with(hash_including(build_name: build_name))
|
30
|
-
|
31
|
-
subject
|
32
|
-
end
|
33
|
-
|
34
|
-
it "creates a build result containing the latest build status" do
|
35
|
-
expect(BuildEval::Result::BuildResult).to(
|
36
|
-
receive(:create).with(hash_including(status_name: latest_build_status))
|
37
|
-
)
|
38
|
-
|
39
|
-
subject
|
40
|
-
end
|
41
|
-
|
42
|
-
it "returns the created result" do
|
43
|
-
build_result = instance_double(BuildEval::Result::BuildResult)
|
44
|
-
allow(BuildEval::Result::BuildResult).to receive(:create).and_return(build_result)
|
45
|
-
|
46
|
-
expect(subject).to eql(build_result)
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
describe BuildEval::Server::Travis do
|
2
|
-
include_context "stubbed http interactions"
|
3
|
-
|
4
|
-
let(:username) { "some_username" }
|
5
|
-
let(:constructor_args) { { username: username } }
|
6
|
-
|
7
|
-
let(:travis_server) { described_class.new(constructor_args) }
|
8
|
-
|
9
|
-
it_behaves_like "a continuous integration server" do
|
10
|
-
|
11
|
-
let(:server) { travis_server }
|
12
|
-
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#build_result" do
|
16
|
-
|
17
|
-
let(:build_name) { "some_build_name" }
|
18
|
-
let(:response) { instance_double(Net::HTTPResponse) }
|
19
|
-
let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
|
20
|
-
let(:cruise_control_response) do
|
21
|
-
instance_double(BuildEval::Server::CruiseControlResponse, parse_result: build_result)
|
22
|
-
end
|
23
|
-
|
24
|
-
subject { travis_server.build_result(build_name) }
|
25
|
-
|
26
|
-
before(:example) do
|
27
|
-
allow(http).to receive(:get).and_return(response)
|
28
|
-
allow(BuildEval::Server::CruiseControlResponse).to receive(:new).and_return(cruise_control_response)
|
29
|
-
allow(cruise_control_response).to receive(:parse_result).and_return(build_result)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "issues a GET request for the build" do
|
33
|
-
expect(http).to receive(:get).with("https://api.travis-ci.org/repositories/#{username}/#{build_name}/cc.xml")
|
34
|
-
|
35
|
-
subject rescue Exception
|
36
|
-
end
|
37
|
-
|
38
|
-
it "creates a Cruise Control response containing the GET request response" do
|
39
|
-
expect(BuildEval::Server::CruiseControlResponse).to receive(:new).with(response)
|
40
|
-
|
41
|
-
subject
|
42
|
-
end
|
43
|
-
|
44
|
-
it "parses the Cruise Control response to return the project" do
|
45
|
-
expect(cruise_control_response).to receive(:parse_result).with("//Project")
|
46
|
-
|
47
|
-
subject
|
48
|
-
end
|
49
|
-
|
50
|
-
it "returns the parsed build result" do
|
51
|
-
expect(subject).to eql(build_result)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
describe "#to_s" do
|
57
|
-
|
58
|
-
subject { travis_server.to_s }
|
59
|
-
|
60
|
-
it "returns a string indicating it uses the Travis CI service" do
|
61
|
-
expect(subject).to include("Travis CI")
|
62
|
-
end
|
63
|
-
|
64
|
-
it "returns a string containing the username" do
|
65
|
-
expect(subject).to include(username)
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
end
|