build_eval 0.0.4 → 0.0.5
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.
- 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
|