build_eval 0.0.9 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- N2I3Zjc5OWM0NDBmMTQ1MTM1YjVhODE1OWI3NTk0NzE1NGI0Y2Y3Mg==
4
+ Y2RmM2FlM2IyNDIwNGI2YmRmZjM0ODkyOTU1Y2MxNzBiZmEyNjY4MQ==
5
5
  data.tar.gz: !binary |-
6
- NWUyZDEyMzExZDM0NjkwMzY5MWNjNDczNGRkMzg0YTE0OWNlYzcxMg==
6
+ OTRkNzVhNjY0Njg5Y2NhZWMwN2Q2Y2NjMzYxYmEyZDZlODQxNTNiNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NTc3NGQyZmNiZjg0MmFjYzE2NDFkZmQ2OTBhZTc5ZTRhZjI2NTdkMmY5ZThh
10
- N2NlNDUyODA4ZjgxMzlhMjhjMGU3N2NlNDljMGI0MmI4OGI5YWI3YWM4Y2E1
11
- MzI1ZDc4YTdiOGNmMjYwMjIyYjU5MDBhOTAzMDBmOWUxNjYxZjU=
9
+ Y2FiMDJhZjdlYTA0Yzg0NGU2NDMyMTJhMjk4MTYzYzBhNTY5ZDA2OTAyODlm
10
+ YmFlMWRmOWJiZDE2Y2VkOWEyODA4MWFkOTM4NmI0ZjcwZDNhMzE5MzhmNmI2
11
+ ZTFlNjYwMzlhOWE1ODBjMGM4ZTJiMGIwNTk2YWQ2Y2U1NjU4NDY=
12
12
  data.tar.gz: !binary |-
13
- MTQzZWEyOWY2NmExZTBiZTkxNDhkOTM2M2EyYmZmOTZhOGYyMzcyMzVmYjgx
14
- YTgzODM5ODM3YzRmMjE2NDg0NDcxN2NmNDZjZTZjMzA1MGJhZjE3MDEyNjY5
15
- ZDkwOWIwOTQzYmRhNTZjNWYyMzdhMWE0ZjI2YTRhZTYwZjc5MWE=
13
+ NDZiYjI2Yzg4OWRhNWE2YmM0OGMzMjE3YmE2NDQ1MTZhYzQwNDY0ZjQwZGNi
14
+ ODBmNmFiOGI3YTc2NjY5ZDg3NzY0YTM0ZjRmZmI2ZGU2Y2Q0MWY4NDlhOWIw
15
+ NzI1MWQ3ZjhiMzg3YzQ5OWYwMDc5NWI4NTkxODg3ODYxMWEzMWM=
@@ -5,23 +5,21 @@ module BuildEval
5
5
 
6
6
  def initialize(args)
7
7
  @username = args[:username]
8
+ @travis = BuildEval::Travis.new(::Travis)
8
9
  end
9
10
 
10
11
  def build_result(name)
11
12
  build_path = "#{@username}/#{name}"
12
- BuildEval::Result::BuildResult.create(build_name: build_path, status_name: last_status_name(build_path))
13
+ BuildEval::Result::BuildResult.create(
14
+ build_name: build_path,
15
+ status_name: @travis.last_build_status_for(build_path)
16
+ )
13
17
  end
14
18
 
15
19
  def to_s
16
20
  "Travis CI #{@username}"
17
21
  end
18
22
 
19
- private
20
-
21
- def last_status_name(build_path)
22
- ::Travis::Repository.find(build_path).recent_builds.find(&:finished?).passed? ? "Success" : "Failure"
23
- end
24
-
25
23
  end
26
24
 
27
25
  end
@@ -6,6 +6,7 @@ module BuildEval
6
6
  def initialize(args)
7
7
  @username = args[:username]
8
8
  @github_token = args[:github_token]
9
+ @travis = BuildEval::Travis.new(::Travis::Pro)
9
10
  end
10
11
 
11
12
  def build_result(name)
@@ -20,8 +21,8 @@ module BuildEval
20
21
  private
21
22
 
22
23
  def last_status_name(build_path)
23
- ::Travis::Pro.github_auth(@github_token)
24
- ::Travis::Pro::Repository.find(build_path).recent_builds.find(&:finished?).passed? ? "Success" : "Failure"
24
+ @travis.login(@github_token)
25
+ @travis.last_build_status_for(build_path)
25
26
  end
26
27
 
27
28
  end
@@ -0,0 +1,21 @@
1
+ module BuildEval
2
+
3
+ class Travis
4
+
5
+ def initialize(travis_module)
6
+ @travis_module = travis_module
7
+ end
8
+
9
+ def login(auth_token)
10
+ @travis_module.github_auth(auth_token)
11
+ end
12
+
13
+ def last_build_status_for(build_path)
14
+ @travis_module::Repository.find(build_path).recent_builds.find(&:finished?).passed? ? "Success" : "Failure"
15
+ rescue ::Travis::Client::Error
16
+ "Unknown"
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -1,3 +1,3 @@
1
1
  module BuildEval
2
- VERSION = "0.0.9".freeze
2
+ VERSION = "0.0.10".freeze
3
3
  end
data/lib/build_eval.rb CHANGED
@@ -7,6 +7,7 @@ require 'travis/tools/github'
7
7
 
8
8
  require_relative 'build_eval/error'
9
9
  require_relative 'build_eval/http'
10
+ require_relative 'build_eval/travis'
10
11
  require_relative 'build_eval/result/status'
11
12
  require_relative 'build_eval/result/build_result'
12
13
  require_relative 'build_eval/result/server_result'
@@ -1,5 +1,5 @@
1
1
  describe BuildEval::Server::TravisPro do
2
- include_context "stubbed http interactions"
2
+ include_context "stubbed Travis API interactions"
3
3
 
4
4
  let(:username) { "some_username" }
5
5
  let(:github_token) { "ABCD1234" }
@@ -14,45 +14,32 @@ describe BuildEval::Server::TravisPro do
14
14
 
15
15
  describe "#build_result" do
16
16
 
17
- let(:build_name) { "some_build_name" }
18
- let(:travis_repository) { instance_double(::Travis::Client::Repository) }
19
- let(:recent_builds) do
20
- (1..3).map { |i| instance_double(::Travis::Client::Build, finished?: i > 1) }
21
- end
22
- let(:last_finished_build) { recent_builds[1] }
23
- let(:last_finished_build_passed_flag) { true }
24
- let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
17
+ let(:build_name) { "some_build_name" }
18
+ let(:last_build_status) { "Unknown" }
19
+ let(:travis) { instance_double(BuildEval::Travis, login: nil, last_build_status_for: last_build_status) }
20
+ let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
25
21
 
26
22
  subject { travis_pro_server.build_result(build_name) }
27
23
 
28
24
  before(:example) do
29
- allow(::Travis::Pro).to receive(:github_auth)
30
- allow(::Travis::Pro::Repository).to receive(:find).and_return(travis_repository)
31
- allow(travis_repository).to receive(:recent_builds).and_return(recent_builds)
32
- allow(last_finished_build).to receive(:passed?).and_return(last_finished_build_passed_flag)
25
+ allow(BuildEval::Travis).to receive(:new).and_return(travis)
33
26
  allow(BuildEval::Result::BuildResult).to receive(:create).and_return(build_result)
34
27
  end
35
28
 
36
- it "logs-in to Travis Pro using the provided GitHub token" do
37
- expect(::Travis::Pro).to receive(:github_auth).with(github_token)
38
-
39
- subject
40
- end
41
-
42
- it "retrieves the relevant Travis Pro Repository" do
43
- expect(::Travis::Pro::Repository).to receive(:find).with("#{username}/#{build_name}")
29
+ it "creates a Travis API wrapping the Pro module" do
30
+ expect(BuildEval::Travis).to receive(:new).with(::Travis::Pro)
44
31
 
45
32
  subject
46
33
  end
47
34
 
48
- it "retrieves the recent builds from the Travis Repository" do
49
- expect(travis_repository).to receive(:recent_builds)
35
+ it "logs-in to the Travis API using the provided GitHub token" do
36
+ expect(travis).to receive(:login).with(github_token)
50
37
 
51
38
  subject
52
39
  end
53
40
 
54
- it "determines if the last finished build has passed" do
55
- expect(last_finished_build).to receive(:passed?)
41
+ it "retrieves the last build status for the GitHub repository" do
42
+ expect(travis).to receive(:last_build_status_for).with("#{username}/#{build_name}")
56
43
 
57
44
  subject
58
45
  end
@@ -65,28 +52,12 @@ describe BuildEval::Server::TravisPro do
65
52
  subject
66
53
  end
67
54
 
68
- context "when the last finished build passed" do
69
-
70
- let(:last_finished_build_passed_flag) { true }
71
-
72
- it "creates a successful build result" do
73
- expect(BuildEval::Result::BuildResult).to receive(:create).with(hash_including(status_name: "Success"))
74
-
75
- subject
76
- end
77
-
78
- end
79
-
80
- context "when the last finished build failed" do
81
-
82
- let(:last_finished_build_passed_flag) { false }
83
-
84
- it "creates a failed build result" do
85
- expect(BuildEval::Result::BuildResult).to receive(:create).with(hash_including(status_name: "Failure"))
86
-
87
- subject
88
- end
55
+ it "creates a build result whose status is the status the last build status" do
56
+ expect(BuildEval::Result::BuildResult).to(
57
+ receive(:create).with(hash_including(status_name: last_build_status))
58
+ )
89
59
 
60
+ subject
90
61
  end
91
62
 
92
63
  it "returns the build result" do
@@ -1,5 +1,5 @@
1
1
  describe BuildEval::Server::Travis do
2
- include_context "stubbed http interactions"
2
+ include_context "stubbed Travis API interactions"
3
3
 
4
4
  let(:username) { "some_username" }
5
5
  let(:constructor_args) { { username: username } }
@@ -8,43 +8,31 @@ describe BuildEval::Server::Travis do
8
8
 
9
9
  describe "#build_result" do
10
10
 
11
- let(:build_name) { "some_build_name" }
12
- let(:travis_repository) { instance_double(::Travis::Client::Repository) }
13
- let(:recent_builds) do
14
- (1..3).map { |i| instance_double(::Travis::Client::Build, finished?: i > 1) }
15
- end
16
- let(:last_finished_build) { recent_builds[1] }
17
- let(:last_finished_build_passed_flag) { true }
18
- let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
11
+ let(:build_name) { "some_build_name" }
12
+ let(:last_build_status) { "Failure" }
13
+ let(:travis) { instance_double(BuildEval::Travis, last_build_status_for: last_build_status) }
14
+ let(:build_result) { instance_double(BuildEval::Result::BuildResult) }
19
15
 
20
16
  subject { travis_server.build_result(build_name) }
21
17
 
22
18
  before(:example) do
23
- allow(::Travis::Repository).to receive(:find).and_return(travis_repository)
24
- allow(travis_repository).to receive(:recent_builds).and_return(recent_builds)
25
- allow(last_finished_build).to receive(:passed?).and_return(last_finished_build_passed_flag)
19
+ allow(BuildEval::Travis).to receive(:new).and_return(travis)
26
20
  allow(BuildEval::Result::BuildResult).to receive(:create).and_return(build_result)
27
21
  end
28
22
 
29
- it "retrieves the relevant Travis repository" do
30
- expect(::Travis::Repository).to receive(:find).with("#{username}/#{build_name}")
31
-
32
- subject
33
- end
34
-
35
- it "retrieves the recent builds from the Travis repository" do
36
- expect(travis_repository).to receive(:recent_builds)
23
+ it "creates a Travis API wrapping the Standard module" do
24
+ expect(BuildEval::Travis).to receive(:new).with(::Travis)
37
25
 
38
26
  subject
39
27
  end
40
28
 
41
- it "determines if the last finished build has passed" do
42
- expect(last_finished_build).to receive(:passed?)
29
+ it "retrieves the last build status for the GitHub repository" do
30
+ expect(travis).to receive(:last_build_status_for).with("#{username}/#{build_name}")
43
31
 
44
32
  subject
45
33
  end
46
34
 
47
- it "creates a build result whose build name is the path to the repository" do
35
+ it "creates a build result whose build name is the path to the GitHub repository" do
48
36
  expect(BuildEval::Result::BuildResult).to(
49
37
  receive(:create).with(hash_including(build_name: "#{username}/#{build_name}"))
50
38
  )
@@ -52,28 +40,12 @@ describe BuildEval::Server::Travis do
52
40
  subject
53
41
  end
54
42
 
55
- context "when the last finished build passed" do
56
-
57
- let(:last_finished_build_passed_flag) { true }
58
-
59
- it "creates a successful build result" do
60
- expect(BuildEval::Result::BuildResult).to receive(:create).with(hash_including(status_name: "Success"))
61
-
62
- subject
63
- end
64
-
65
- end
66
-
67
- context "when the last finished build failed" do
68
-
69
- let(:last_finished_build_passed_flag) { false }
70
-
71
- it "creates a failed build result" do
72
- expect(BuildEval::Result::BuildResult).to receive(:create).with(hash_including(status_name: "Failure"))
73
-
74
- subject
75
- end
43
+ it "creates a build result whose status is the status the last build status" do
44
+ expect(BuildEval::Result::BuildResult).to(
45
+ receive(:create).with(hash_including(status_name: last_build_status))
46
+ )
76
47
 
48
+ subject
77
49
  end
78
50
 
79
51
  it "returns the build result" do
@@ -0,0 +1,7 @@
1
+ shared_context "stubbed Travis API interactions" do
2
+
3
+ let(:travis_namespace) { instance_double(::Travis::Client::Namespace) }
4
+
5
+ before(:each) { allow(::Travis::Client::Namespace).to receive(:new).and_return(travis_namespace) }
6
+
7
+ end
@@ -0,0 +1,94 @@
1
+ describe BuildEval::Travis do
2
+ include_context "stubbed Travis API interactions"
3
+
4
+ let(:travis_module) { ::Travis }
5
+
6
+ let(:travis) { described_class.new(travis_module) }
7
+
8
+ describe "#login" do
9
+
10
+ let(:github_token) { "SOMEGITHUBTOKEN" }
11
+
12
+ subject { travis.login(github_token) }
13
+
14
+ it "logs-in to Travis using the GitHub Auth token provided" do
15
+ expect(travis_module).to receive(:github_auth).with(github_token)
16
+
17
+ subject
18
+ end
19
+
20
+ end
21
+
22
+ describe "#last_build_status_for" do
23
+
24
+ let(:build_path) { "some/build_path" }
25
+
26
+ let(:recent_builds) do
27
+ (1..3).map { |i| instance_double(::Travis::Client::Build, finished?: i > 1) }
28
+ end
29
+ let(:last_finished_build) { recent_builds[1] }
30
+ let(:last_finished_build_passed_flag) { true }
31
+ let(:travis_repository) do
32
+ instance_double(::Travis::Client::Repository, recent_builds: recent_builds)
33
+ end
34
+
35
+ subject { travis.last_build_status_for(build_path) }
36
+
37
+ before(:example) do
38
+ allow(travis_module::Repository).to receive(:find).and_return(travis_repository)
39
+ allow(last_finished_build).to receive(:passed?).and_return(last_finished_build_passed_flag)
40
+ end
41
+
42
+ it "retrieves the Travis Repository for the provided build path" do
43
+ expect(travis_module::Repository).to receive(:find).with(build_path)
44
+
45
+ subject
46
+ end
47
+
48
+ it "retrieves the recent builds from the Travis Repository" do
49
+ expect(travis_repository).to receive(:recent_builds)
50
+
51
+ subject
52
+ end
53
+
54
+ it "determines if the last finished build has passed" do
55
+ expect(last_finished_build).to receive(:passed?)
56
+
57
+ subject
58
+ end
59
+
60
+ context "when the last finished build passed" do
61
+
62
+ let(:last_finished_build_passed_flag) { true }
63
+
64
+ it "returns 'Success'" do
65
+ expect(subject).to eql("Success")
66
+ end
67
+
68
+ end
69
+
70
+ context "when the last finished build failed" do
71
+
72
+ let(:last_finished_build_passed_flag) { false }
73
+
74
+ it "returns 'Failure'" do
75
+ expect(subject).to eql("Failure")
76
+ end
77
+
78
+ end
79
+
80
+ context "when an Travis Client error occurs" do
81
+
82
+ before(:example) do
83
+ allow(travis_repository).to receive(:recent_builds).and_raise(::Travis::Client::Error.new("Forced error"))
84
+ end
85
+
86
+ it "returns 'Unknown'" do
87
+ expect(subject).to eql("Unknown")
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
@@ -1,7 +1,8 @@
1
1
  describe BuildEval, "integrating with a real CI server", smoke: true do
2
- let(:server) { BuildEval.server(type: :Travis, username: "MYOB-Technology") }
3
2
 
4
- let(:monitor) { server.monitor("build_eval") }
3
+ let(:builds) { BuildEval::Examples::Travis.builds }
4
+
5
+ let(:monitor) { BuildEval::Examples::Travis.monitor }
5
6
 
6
7
  describe "the evaluated results from a build monitor for the server" do
7
8
 
@@ -16,12 +17,14 @@ describe BuildEval, "integrating with a real CI server", smoke: true do
16
17
 
17
18
  subject { monitor.evaluate }
18
19
 
19
- it "indicate the builds status" do
20
+ it "indicates the combined status of all builds" do
20
21
  expect(tolerated_statuses).to include(subject.status)
21
22
  end
22
23
 
23
- it "describe the build and its status" do
24
- expect(subject.to_s).to match(/build_eval: (#{tolerated_statuses.map(&:to_s).join("|")})/)
24
+ it "describes the builds and their individual status" do
25
+ builds.each do |build|
26
+ expect(subject.to_s).to match(/#{build}: (#{tolerated_statuses.map(&:to_s).join("|")})/)
27
+ end
25
28
  end
26
29
 
27
30
  end
data/spec/spec_helper.rb CHANGED
@@ -7,6 +7,7 @@ if ENV['coverage']
7
7
  SimpleCov.start do
8
8
  coverage_dir 'tmp/coverage'
9
9
 
10
+ add_filter '/examples/'
10
11
  add_filter '/spec/'
11
12
 
12
13
  minimum_coverage 100
@@ -15,6 +16,7 @@ if ENV['coverage']
15
16
  end
16
17
 
17
18
  require_relative '../lib/build_eval'
19
+ require_relative '../examples/travis'
18
20
 
19
21
  %w( shared_examples shared_context ).each do |file_type|
20
22
  Dir[::File.expand_path("../**/*_#{file_type}.rb", __FILE__)].each { |file| require file }
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.9
4
+ version: 0.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew Ueckerman
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2016-06-22 00:00:00.000000000 Z
13
+ date: 2016-06-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: nokogiri
@@ -162,6 +162,7 @@ files:
162
162
  - ./lib/build_eval/server/team_city.rb
163
163
  - ./lib/build_eval/server/travis.rb
164
164
  - ./lib/build_eval/server/travis_pro.rb
165
+ - ./lib/build_eval/travis.rb
165
166
  - ./lib/build_eval/version.rb
166
167
  - ./spec/lib/build_eval/error_spec.rb
167
168
  - ./spec/lib/build_eval/http_shared_context.rb
@@ -183,6 +184,8 @@ files:
183
184
  - ./spec/lib/build_eval/server/team_city_spec.rb
184
185
  - ./spec/lib/build_eval/server/travis_pro_spec.rb
185
186
  - ./spec/lib/build_eval/server/travis_spec.rb
187
+ - ./spec/lib/build_eval/travis_shared_context.rb
188
+ - ./spec/lib/build_eval/travis_spec.rb
186
189
  - ./spec/lib/build_eval_smoke_spec.rb
187
190
  - ./spec/lib/build_eval_spec.rb
188
191
  - ./spec/spec_helper.rb
@@ -231,6 +234,8 @@ test_files:
231
234
  - ./spec/lib/build_eval/server/team_city_spec.rb
232
235
  - ./spec/lib/build_eval/server/travis_pro_spec.rb
233
236
  - ./spec/lib/build_eval/server/travis_spec.rb
237
+ - ./spec/lib/build_eval/travis_shared_context.rb
238
+ - ./spec/lib/build_eval/travis_spec.rb
234
239
  - ./spec/lib/build_eval_smoke_spec.rb
235
240
  - ./spec/lib/build_eval_spec.rb
236
241
  - ./spec/spec_helper.rb