build_eval 0.0.14 → 0.0.15
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/build_eval/monitor/server.rb +6 -3
- data/lib/build_eval/result/build_result.rb +15 -7
- data/lib/build_eval/result/status.rb +7 -6
- data/lib/build_eval/server/decorator.rb +5 -5
- data/lib/build_eval/server/jenkins.rb +2 -2
- data/lib/build_eval/server/team_city.rb +4 -3
- data/lib/build_eval/server/travis.rb +5 -3
- data/lib/build_eval/server/travis_pro.rb +6 -3
- data/lib/build_eval/travis/session/factory.rb +31 -0
- data/lib/build_eval/travis/session/pool.rb +44 -0
- data/lib/build_eval/travis/session/session.rb +18 -0
- data/lib/build_eval/travis/session.rb +14 -0
- data/lib/build_eval/travis.rb +9 -3
- data/lib/build_eval/version.rb +1 -1
- data/lib/build_eval.rb +4 -1
- data/spec/lib/build_eval/monitor/composite_spec.rb +1 -0
- data/spec/lib/build_eval/monitor/server_spec.rb +14 -6
- data/spec/lib/build_eval/result/build_result_spec.rb +42 -13
- data/spec/lib/build_eval/result/status_spec.rb +19 -6
- data/spec/lib/build_eval/server/decorator_spec.rb +21 -14
- data/spec/lib/build_eval/server/jenkins_integration_spec.rb +4 -3
- data/spec/lib/build_eval/server/jenkins_spec.rb +2 -1
- data/spec/lib/build_eval/server/team_city_integration_spec.rb +2 -1
- data/spec/lib/build_eval/server/team_city_spec.rb +2 -1
- data/spec/lib/build_eval/server/travis_pro_spec.rb +11 -6
- data/spec/lib/build_eval/server/travis_spec.rb +11 -6
- data/spec/lib/build_eval/travis/session/factory_spec.rb +85 -0
- data/spec/lib/build_eval/travis/session/pool_spec.rb +89 -0
- data/spec/lib/build_eval/travis/session/session_spec.rb +24 -0
- data/spec/lib/build_eval/travis/session_spec.rb +65 -0
- data/spec/lib/build_eval/travis_spec.rb +75 -50
- data/spec/lib/build_eval_smoke_spec.rb +4 -3
- metadata +18 -9
- data/lib/build_eval/travis/session_factory.rb +0 -38
- data/spec/lib/build_eval/travis/session_factory_spec.rb +0 -105
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MjgwN2ZiZjMyOWY1YTM2YzZmNmQyZmQ0NjJhZGM4ZTY4YWQ5NTRlMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MTZkMmJjYjQyMjc3NWI0ZWNmY2NhMzNlMzU5YWZhMjMzNjk5ZjY3ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MmRhMmNhMWJhNDZkM2RlNDZlYTEwZWE5MDIxMDYyYzJkNmQ3M2ZlMzc5OTJm
|
10
|
+
MjIxOGZjZTU2ZmMwOWFmODhjMTg5YzM2Y2IyNjgyMWJjZTIyMWQxZDc0YTk0
|
11
|
+
YmJiNWM0ZjA1YWIwZDkxMDZlNTYzYTEyZjBjNzMzMThjNTUwZmI=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTU3YmRhYTZiZGRhYTVhZGJmZTZiNjlmZTliZjk3OTQzNWY0NTViZjQ0OWE1
|
14
|
+
YTZlNTM2NmYxYjI0N2U0MmVlZDRjZTE0ZjU4OGE0MGY5NzRjNzA1OTkzYzUx
|
15
|
+
MDFiOWM3OGQyNzQ3NDdhNDhjYTJmZDc1NjFlZTYwYjZhYzI0MzY=
|
@@ -4,12 +4,15 @@ module BuildEval
|
|
4
4
|
class Server < BuildEval::Monitor::Base
|
5
5
|
|
6
6
|
def initialize(args)
|
7
|
-
@server
|
8
|
-
@
|
7
|
+
@server = args[:server]
|
8
|
+
@build_configurations = args[:build_configurations]
|
9
9
|
end
|
10
10
|
|
11
11
|
def evaluate
|
12
|
-
build_results = @
|
12
|
+
build_results = @build_configurations.map do |build_configuration|
|
13
|
+
build_name, branch_name = build_configuration.split(":")
|
14
|
+
@server.build_result(build_name, branch_name)
|
15
|
+
end
|
13
16
|
BuildEval::Result::ServerResult.new(@server, build_results)
|
14
17
|
end
|
15
18
|
|
@@ -6,23 +6,31 @@ module BuildEval
|
|
6
6
|
class << self
|
7
7
|
|
8
8
|
def create(args)
|
9
|
-
new(
|
9
|
+
new(
|
10
|
+
build_name: args[:build_name],
|
11
|
+
branch_name: args[:branch_name],
|
12
|
+
status: BuildEval::Result::Status.find(args[:status_name])
|
13
|
+
)
|
10
14
|
end
|
11
15
|
|
12
|
-
def indeterminate(
|
13
|
-
new(
|
16
|
+
def indeterminate(args)
|
17
|
+
new(
|
18
|
+
build_name: args[:build_name],
|
19
|
+
branch_name: args[:branch_name],
|
20
|
+
status: BuildEval::Result::Status::INDETERMINATE
|
21
|
+
)
|
14
22
|
end
|
15
23
|
|
16
24
|
end
|
17
25
|
|
18
|
-
attr_reader :build_name
|
19
26
|
attr_reader :status
|
20
27
|
|
21
28
|
private
|
22
29
|
|
23
30
|
def initialize(args)
|
24
|
-
@build_name
|
25
|
-
@
|
31
|
+
@build_name = args[:build_name]
|
32
|
+
@branch_name = args[:branch_name]
|
33
|
+
@status = args[:status]
|
26
34
|
end
|
27
35
|
|
28
36
|
public
|
@@ -32,7 +40,7 @@ module BuildEval
|
|
32
40
|
end
|
33
41
|
|
34
42
|
def to_s
|
35
|
-
"#{@build_name}: #{@status}"
|
43
|
+
"#{@build_name}#{@branch_name ? ":#{@branch_name}" : ""} -> #{@status}"
|
36
44
|
end
|
37
45
|
|
38
46
|
end
|
@@ -13,11 +13,12 @@ module BuildEval
|
|
13
13
|
|
14
14
|
public
|
15
15
|
|
16
|
-
SUCCESS = new(severity: 0, symbol: :success!,
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
16
|
+
SUCCESS = new(severity: 0, symbol: :success!, description: "succeeded")
|
17
|
+
BUILDING = new(severity: 1, symbol: :building!, description: "building")
|
18
|
+
UNKNOWN = new(severity: 2, symbol: :warning!, description: "unknown")
|
19
|
+
INDETERMINATE = new(severity: 3, symbol: :warning!, description: "indeterminate")
|
20
|
+
FAILURE = new(severity: 4, symbol: :failure!, description: "failed")
|
21
|
+
ERROR = new(severity: 5, symbol: :failure!, description: "errored")
|
21
22
|
|
22
23
|
class << self
|
23
24
|
|
@@ -36,7 +37,7 @@ module BuildEval
|
|
36
37
|
attr_reader :severity
|
37
38
|
|
38
39
|
def unsuccessful?
|
39
|
-
|
40
|
+
![ SUCCESS, BUILDING ].include?(self)
|
40
41
|
end
|
41
42
|
|
42
43
|
def to_sym
|
@@ -7,14 +7,14 @@ module BuildEval
|
|
7
7
|
@delegate = delegate
|
8
8
|
end
|
9
9
|
|
10
|
-
def build_result(
|
11
|
-
@delegate.build_result(
|
10
|
+
def build_result(build_name, branch_name)
|
11
|
+
@delegate.build_result(build_name, branch_name)
|
12
12
|
rescue StandardError
|
13
|
-
BuildEval::Result::BuildResult.indeterminate(
|
13
|
+
BuildEval::Result::BuildResult.indeterminate(build_name: build_name, branch_name: branch_name)
|
14
14
|
end
|
15
15
|
|
16
|
-
def monitor(*
|
17
|
-
BuildEval::Monitor::Server.new(server: @delegate,
|
16
|
+
def monitor(*build_configurations)
|
17
|
+
BuildEval::Monitor::Server.new(server: @delegate, build_configurations: build_configurations.flatten)
|
18
18
|
end
|
19
19
|
|
20
20
|
end
|
@@ -8,9 +8,9 @@ module BuildEval
|
|
8
8
|
@base_uri = args[:uri]
|
9
9
|
end
|
10
10
|
|
11
|
-
def build_result(
|
11
|
+
def build_result(build_name, _branch_name)
|
12
12
|
raw_response = @http.get("#{@base_uri}/cc.xml")
|
13
|
-
BuildEval::Server::CruiseControlResponse.new(raw_response).parse_result("//Project[@name=\"#{
|
13
|
+
BuildEval::Server::CruiseControlResponse.new(raw_response).parse_result("//Project[@name=\"#{build_name}\"]")
|
14
14
|
end
|
15
15
|
|
16
16
|
def to_s
|
@@ -8,11 +8,12 @@ module BuildEval
|
|
8
8
|
@base_uri = args[:uri]
|
9
9
|
end
|
10
10
|
|
11
|
-
def build_result(
|
12
|
-
response = @http.get("#{@base_uri}/httpAuth/app/rest/buildTypes/id:#{
|
11
|
+
def build_result(build_name, _branch_name)
|
12
|
+
response = @http.get("#{@base_uri}/httpAuth/app/rest/buildTypes/id:#{build_name}/builds")
|
13
13
|
build_element = Nokogiri::XML(response.body).xpath("//build").first
|
14
14
|
raise "Unexpected build response: #{response.message}" unless build_element
|
15
|
-
BuildEval::Result::BuildResult.create(build_name:
|
15
|
+
BuildEval::Result::BuildResult.create(build_name: build_name,
|
16
|
+
status_name: build_element.attribute("status").value)
|
16
17
|
end
|
17
18
|
|
18
19
|
def to_s
|
@@ -5,13 +5,15 @@ module BuildEval
|
|
5
5
|
|
6
6
|
def initialize(args)
|
7
7
|
@username = args[:username]
|
8
|
+
@branch = args[:branch]
|
8
9
|
end
|
9
10
|
|
10
|
-
def build_result(
|
11
|
-
repository_path = "#{@username}/#{
|
11
|
+
def build_result(build_name, branch_name)
|
12
|
+
repository_path = "#{@username}/#{build_name}"
|
12
13
|
BuildEval::Result::BuildResult.create(
|
13
14
|
build_name: repository_path,
|
14
|
-
|
15
|
+
branch_name: branch_name,
|
16
|
+
status_name: BuildEval::Travis.last_build_status(repository_path: repository_path, branch: branch_name)
|
15
17
|
)
|
16
18
|
end
|
17
19
|
|
@@ -6,14 +6,17 @@ module BuildEval
|
|
6
6
|
def initialize(args)
|
7
7
|
@username = args[:username]
|
8
8
|
@github_token = args[:github_token]
|
9
|
+
@branch = args[:branch]
|
9
10
|
end
|
10
11
|
|
11
|
-
def build_result(
|
12
|
-
repository_path = "#{@username}/#{
|
12
|
+
def build_result(build_name, branch_name)
|
13
|
+
repository_path = "#{@username}/#{build_name}"
|
13
14
|
BuildEval::Result::BuildResult.create(
|
14
15
|
build_name: repository_path,
|
16
|
+
branch_name: branch_name,
|
15
17
|
status_name: BuildEval::Travis.last_build_status(github_token: @github_token,
|
16
|
-
repository_path: repository_path
|
18
|
+
repository_path: repository_path,
|
19
|
+
branch: branch_name)
|
17
20
|
)
|
18
21
|
end
|
19
22
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module BuildEval
|
2
|
+
module Travis
|
3
|
+
module Session
|
4
|
+
|
5
|
+
class Factory
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def create(github_token)
|
10
|
+
BuildEval::Travis::Session::Session.new(create_raw_session(github_token), github_token)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def create_raw_session(github_token)
|
16
|
+
::Travis::Client::Session.new(uri: uri_for(github_token), ssl: {}).tap do |session|
|
17
|
+
session.github_auth(github_token) if github_token
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def uri_for(github_token)
|
22
|
+
github_token ? ::Travis::Client::PRO_URI : ::Travis::Client::ORG_URI
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module BuildEval
|
2
|
+
module Travis
|
3
|
+
module Session
|
4
|
+
|
5
|
+
class Pool
|
6
|
+
|
7
|
+
class << self
|
8
|
+
|
9
|
+
def get(github_token)
|
10
|
+
get_session(github_token) || create_session(github_token)
|
11
|
+
end
|
12
|
+
|
13
|
+
def release(session)
|
14
|
+
session.clear_cache
|
15
|
+
sessions_for(session.github_token) << session
|
16
|
+
end
|
17
|
+
|
18
|
+
def clear
|
19
|
+
@pool = {}
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def get_session(github_token)
|
25
|
+
sessions_for(github_token).shift
|
26
|
+
end
|
27
|
+
|
28
|
+
def create_session(github_token)
|
29
|
+
BuildEval::Travis::Session::Factory.create(github_token)
|
30
|
+
end
|
31
|
+
|
32
|
+
def sessions_for(github_token)
|
33
|
+
@pool ||= {}
|
34
|
+
@pool[github_token] ||= []
|
35
|
+
@pool[github_token]
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module BuildEval
|
2
|
+
module Travis
|
3
|
+
module Session
|
4
|
+
|
5
|
+
class Session < DelegateClass(::Travis::Client::Session)
|
6
|
+
|
7
|
+
attr_reader :github_token
|
8
|
+
|
9
|
+
def initialize(raw_session, github_token)
|
10
|
+
super(raw_session)
|
11
|
+
@github_token = github_token
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
data/lib/build_eval/travis.rb
CHANGED
@@ -2,10 +2,16 @@ module BuildEval
|
|
2
2
|
|
3
3
|
module Travis
|
4
4
|
|
5
|
+
STATUS_BY_COLOR = { green: "Success", yellow: "Building", red: "Failure" }.freeze
|
6
|
+
|
7
|
+
private_constant :STATUS_BY_COLOR
|
8
|
+
|
5
9
|
def self.last_build_status(args)
|
6
|
-
|
7
|
-
|
8
|
-
|
10
|
+
BuildEval::Travis::Session.open(args[:github_token]) do |session|
|
11
|
+
repository = session.repo(args[:repository_path])
|
12
|
+
build = args[:branch] ? repository.branch(args[:branch]) : repository.last_build
|
13
|
+
STATUS_BY_COLOR[build.color.to_sym]
|
14
|
+
end
|
9
15
|
rescue ::Travis::Client::Error
|
10
16
|
"Unknown"
|
11
17
|
end
|
data/lib/build_eval/version.rb
CHANGED
data/lib/build_eval.rb
CHANGED
@@ -6,7 +6,10 @@ require 'travis/client/session'
|
|
6
6
|
|
7
7
|
require_relative 'build_eval/error'
|
8
8
|
require_relative 'build_eval/http'
|
9
|
-
require_relative 'build_eval/travis/
|
9
|
+
require_relative 'build_eval/travis/session/session'
|
10
|
+
require_relative 'build_eval/travis/session/factory'
|
11
|
+
require_relative 'build_eval/travis/session/pool'
|
12
|
+
require_relative 'build_eval/travis/session'
|
10
13
|
require_relative 'build_eval/travis'
|
11
14
|
require_relative 'build_eval/result/status'
|
12
15
|
require_relative 'build_eval/result/build_result'
|
@@ -1,20 +1,28 @@
|
|
1
1
|
describe BuildEval::Monitor::Server do
|
2
2
|
|
3
|
-
let(:server)
|
4
|
-
let(:
|
3
|
+
let(:server) { double("BuildEval::Server") }
|
4
|
+
let(:build_configurations) { %w{ build#1 build#2:branch#1 build#2:branch#2 build#3 } }
|
5
5
|
|
6
|
-
let(:server_monitor) { described_class.new(server: server,
|
6
|
+
let(:server_monitor) { described_class.new(server: server, build_configurations: build_configurations) }
|
7
7
|
|
8
8
|
describe "#evaluate" do
|
9
9
|
|
10
|
-
let(:results) {
|
10
|
+
let(:results) { build_configurations.map { instance_double(BuildEval::Result::BuildResult) } }
|
11
11
|
|
12
12
|
subject { server_monitor.evaluate }
|
13
13
|
|
14
14
|
before(:example) { allow(server).to receive(:build_result).and_return(*results) }
|
15
15
|
|
16
|
-
it "determines build results for builds
|
17
|
-
|
16
|
+
it "determines build results for builds with branches" do
|
17
|
+
[ [ "build#2", "branch#1" ], ["build#2", "branch#2" ] ].each do |build_name, branch_name|
|
18
|
+
expect(server).to receive(:build_result).with(build_name, branch_name)
|
19
|
+
end
|
20
|
+
|
21
|
+
subject
|
22
|
+
end
|
23
|
+
|
24
|
+
it "determines build results for builds without branches" do
|
25
|
+
%w{ build#1 build#3 }.each { |build_name| expect(server).to receive(:build_result).with(build_name, nil) }
|
18
26
|
|
19
27
|
subject
|
20
28
|
end
|
@@ -3,13 +3,10 @@ describe BuildEval::Result::BuildResult do
|
|
3
3
|
describe "::create" do
|
4
4
|
|
5
5
|
let(:build_name) { "Some build name" }
|
6
|
+
let(:branch_name) { "Some branch name" }
|
6
7
|
let(:status_name) { "SUCCESS" }
|
7
8
|
|
8
|
-
subject { described_class.create(build_name: build_name, status_name: status_name) }
|
9
|
-
|
10
|
-
it "returns a result with the provided build name" do
|
11
|
-
expect(subject.build_name).to eql(build_name)
|
12
|
-
end
|
9
|
+
subject { described_class.create(build_name: build_name, branch_name: branch_name, status_name: status_name) }
|
13
10
|
|
14
11
|
it "determines the status with the provided status name" do
|
15
12
|
expect(BuildEval::Result::Status).to receive(:find).with(status_name)
|
@@ -29,12 +26,9 @@ describe BuildEval::Result::BuildResult do
|
|
29
26
|
describe "::indeterminate" do
|
30
27
|
|
31
28
|
let(:build_name) { "Some build name" }
|
29
|
+
let(:branch_name) { "Some branch name" }
|
32
30
|
|
33
|
-
subject { described_class.indeterminate(build_name) }
|
34
|
-
|
35
|
-
it "returns a result with the provided build name" do
|
36
|
-
expect(subject.build_name).to eql(build_name)
|
37
|
-
end
|
31
|
+
subject { described_class.indeterminate(build_name: build_name, branch_name: branch_name) }
|
38
32
|
|
39
33
|
it "returns a result with an indeterminate status" do
|
40
34
|
expect(subject.status).to eql(BuildEval::Result::Status::INDETERMINATE)
|
@@ -45,7 +39,9 @@ describe BuildEval::Result::BuildResult do
|
|
45
39
|
describe "#unsuccessful?" do
|
46
40
|
|
47
41
|
let(:status) { instance_double(BuildEval::Result::Status) }
|
48
|
-
let(:build_result)
|
42
|
+
let(:build_result) do
|
43
|
+
described_class.create(build_name: "some build", branch_name: "some branch", status_name: "some status")
|
44
|
+
end
|
49
45
|
|
50
46
|
subject { build_result.unsuccessful? }
|
51
47
|
|
@@ -62,10 +58,15 @@ describe BuildEval::Result::BuildResult do
|
|
62
58
|
describe "#to_s" do
|
63
59
|
|
64
60
|
let(:build_name) { "Some build name" }
|
61
|
+
let(:branch_name) { "Some branch name" }
|
65
62
|
let(:status_string_representation) { "SUCCESS" }
|
66
|
-
let(:status)
|
63
|
+
let(:status) do
|
64
|
+
instance_double(BuildEval::Result::Status, to_s: status_string_representation)
|
65
|
+
end
|
67
66
|
|
68
|
-
let(:build_result)
|
67
|
+
let(:build_result) do
|
68
|
+
described_class.create(build_name: build_name, branch_name: branch_name, status_name: "some status")
|
69
|
+
end
|
69
70
|
|
70
71
|
subject { build_result.to_s }
|
71
72
|
|
@@ -75,6 +76,34 @@ describe BuildEval::Result::BuildResult do
|
|
75
76
|
expect(subject).to include(build_name)
|
76
77
|
end
|
77
78
|
|
79
|
+
context "when a branch name is provided" do
|
80
|
+
|
81
|
+
let(:branch_name) { "Some branch name" }
|
82
|
+
|
83
|
+
it "contains the branch name" do
|
84
|
+
expect(subject).to include(branch_name)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "separates the build and branch names with a colon" do
|
88
|
+
expect(subject).to include("#{build_name}:#{branch_name}")
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
92
|
+
|
93
|
+
context "when a branch name is not provided" do
|
94
|
+
|
95
|
+
let(:branch_name) { nil }
|
96
|
+
|
97
|
+
it "does not contain a nil" do
|
98
|
+
expect(subject).to_not include("nil")
|
99
|
+
end
|
100
|
+
|
101
|
+
it "does not contain a colon separator" do
|
102
|
+
expect(subject).to_not include(":")
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
|
78
107
|
it "contains the string representation of the status" do
|
79
108
|
expect(subject).to include(status_string_representation)
|
80
109
|
end
|
@@ -58,6 +58,7 @@ describe BuildEval::Result::Status do
|
|
58
58
|
BuildEval::Result::Status::FAILURE,
|
59
59
|
BuildEval::Result::Status::UNKNOWN,
|
60
60
|
BuildEval::Result::Status::INDETERMINATE,
|
61
|
+
BuildEval::Result::Status::BUILDING,
|
61
62
|
BuildEval::Result::Status::SUCCESS
|
62
63
|
]
|
63
64
|
end
|
@@ -73,6 +74,7 @@ describe BuildEval::Result::Status do
|
|
73
74
|
let(:statuses) do
|
74
75
|
[
|
75
76
|
BuildEval::Result::Status::SUCCESS,
|
77
|
+
BuildEval::Result::Status::BUILDING,
|
76
78
|
BuildEval::Result::Status::UNKNOWN,
|
77
79
|
BuildEval::Result::Status::INDETERMINATE,
|
78
80
|
BuildEval::Result::Status::FAILURE,
|
@@ -92,12 +94,21 @@ describe BuildEval::Result::Status do
|
|
92
94
|
|
93
95
|
subject { status.unsuccessful? }
|
94
96
|
|
95
|
-
|
96
|
-
|
97
|
+
{
|
98
|
+
"SUCCESS" => BuildEval::Result::Status::SUCCESS,
|
99
|
+
"BUILDING" => BuildEval::Result::Status::BUILDING
|
100
|
+
}.each do |name, status|
|
101
|
+
|
102
|
+
context "when the status is #{name}" do
|
103
|
+
|
104
|
+
let(:status) { status }
|
105
|
+
|
106
|
+
it "returns false" do
|
107
|
+
expect(subject).to be(false)
|
108
|
+
end
|
97
109
|
|
98
|
-
it "returns false" do
|
99
|
-
expect(subject).to be(false)
|
100
110
|
end
|
111
|
+
|
101
112
|
end
|
102
113
|
|
103
114
|
{
|
@@ -127,6 +138,7 @@ describe BuildEval::Result::Status do
|
|
127
138
|
|
128
139
|
{
|
129
140
|
SUCCESS: :success!,
|
141
|
+
BUILDING: :building!,
|
130
142
|
UNKNOWN: :warning!,
|
131
143
|
INDETERMINATE: :warning!,
|
132
144
|
FAILURE: :failure!,
|
@@ -137,7 +149,7 @@ describe BuildEval::Result::Status do
|
|
137
149
|
|
138
150
|
let(:status) { BuildEval::Result::Status.const_get(name) }
|
139
151
|
|
140
|
-
it "returns
|
152
|
+
it "returns #{expected_symbol}" do
|
141
153
|
expect(subject).to eql(expected_symbol)
|
142
154
|
end
|
143
155
|
|
@@ -153,6 +165,7 @@ describe BuildEval::Result::Status do
|
|
153
165
|
|
154
166
|
{
|
155
167
|
SUCCESS: "succeeded",
|
168
|
+
BUILDING: "building",
|
156
169
|
UNKNOWN: "unknown",
|
157
170
|
INDETERMINATE: "indeterminate",
|
158
171
|
FAILURE: "failed",
|
@@ -163,7 +176,7 @@ describe BuildEval::Result::Status do
|
|
163
176
|
|
164
177
|
let(:status) { BuildEval::Result::Status.const_get(name) }
|
165
178
|
|
166
|
-
it "returns
|
179
|
+
it "returns #{expected_string}" do
|
167
180
|
expect(subject).to eql(expected_string)
|
168
181
|
end
|
169
182
|
|
@@ -6,12 +6,13 @@ describe BuildEval::Server::Decorator do
|
|
6
6
|
|
7
7
|
describe "#build_result" do
|
8
8
|
|
9
|
-
let(:build_name)
|
9
|
+
let(:build_name) { "some build name" }
|
10
|
+
let(:branch_name) { "some branch name" }
|
10
11
|
|
11
|
-
subject { decorator.build_result(build_name) }
|
12
|
+
subject { decorator.build_result(build_name, branch_name) }
|
12
13
|
|
13
14
|
it "delegates to the decorated server" do
|
14
|
-
expect(server).to receive(:build_result).with(build_name)
|
15
|
+
expect(server).to receive(:build_result).with(build_name, branch_name)
|
15
16
|
|
16
17
|
subject
|
17
18
|
end
|
@@ -33,7 +34,9 @@ describe BuildEval::Server::Decorator do
|
|
33
34
|
before(:example) { allow(server).to receive(:build_result).and_raise("Forced error") }
|
34
35
|
|
35
36
|
it "creates an indeterminate result" do
|
36
|
-
expect(BuildEval::Result::BuildResult).to
|
37
|
+
expect(BuildEval::Result::BuildResult).to(
|
38
|
+
receive(:indeterminate).with(build_name: build_name, branch_name: branch_name)
|
39
|
+
)
|
37
40
|
|
38
41
|
subject
|
39
42
|
end
|
@@ -51,9 +54,9 @@ describe BuildEval::Server::Decorator do
|
|
51
54
|
|
52
55
|
describe "#monitor" do
|
53
56
|
|
54
|
-
let(:
|
57
|
+
let(:build_configurations) { (1..3).map { |i| "monitor##{i}" } }
|
55
58
|
|
56
|
-
subject { decorator.monitor(*
|
59
|
+
subject { decorator.monitor(*build_configurations) }
|
57
60
|
|
58
61
|
it "creates a server monitor for the decorated server" do
|
59
62
|
expect(BuildEval::Monitor::Server).to receive(:new).with(hash_including(server: server))
|
@@ -68,24 +71,28 @@ describe BuildEval::Server::Decorator do
|
|
68
71
|
expect(subject).to eql(monitor)
|
69
72
|
end
|
70
73
|
|
71
|
-
context "when an array of build
|
74
|
+
context "when an array of build configurations is provided" do
|
72
75
|
|
73
|
-
subject { decorator.monitor(
|
76
|
+
subject { decorator.monitor(build_configurations) }
|
74
77
|
|
75
|
-
it "creates a server monitor for the provided build
|
76
|
-
expect(BuildEval::Monitor::Server).to
|
78
|
+
it "creates a server monitor for the provided build configurations" do
|
79
|
+
expect(BuildEval::Monitor::Server).to(
|
80
|
+
receive(:new).with(hash_including(build_configurations: build_configurations))
|
81
|
+
)
|
77
82
|
|
78
83
|
subject
|
79
84
|
end
|
80
85
|
|
81
86
|
end
|
82
87
|
|
83
|
-
context "when variable argument list
|
88
|
+
context "when variable argument list build configurations is provided" do
|
84
89
|
|
85
|
-
subject { decorator.monitor(*
|
90
|
+
subject { decorator.monitor(*build_configurations) }
|
86
91
|
|
87
|
-
it "creates a server monitor for the provided build
|
88
|
-
expect(BuildEval::Monitor::Server).to
|
92
|
+
it "creates a server monitor for the provided build configurations" do
|
93
|
+
expect(BuildEval::Monitor::Server).to(
|
94
|
+
receive(:new).with(hash_including(build_configurations: build_configurations))
|
95
|
+
)
|
89
96
|
|
90
97
|
subject
|
91
98
|
end
|
@@ -7,10 +7,11 @@ describe BuildEval::Server::Jenkins, "integrating with a response parser", integ
|
|
7
7
|
|
8
8
|
describe "#build_result" do
|
9
9
|
|
10
|
-
let(:build_name)
|
11
|
-
let(:
|
10
|
+
let(:build_name) { "some_build_name" }
|
11
|
+
let(:branch_name) { nil }
|
12
|
+
let(:response) { instance_double(Net::HTTPResponse, body: response_body) }
|
12
13
|
|
13
|
-
subject { jenkins.build_result(build_name) }
|
14
|
+
subject { jenkins.build_result(build_name, branch_name) }
|
14
15
|
|
15
16
|
before(:example) { allow(http).to receive(:get).and_return(response) }
|
16
17
|
|