tddium-preview 0.5.4 → 0.5.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.
- data/Gemfile.lock +1 -1
- data/lib/tddium/heroku.rb +10 -2
- data/lib/tddium/version.rb +1 -1
- data/lib/tddium.rb +12 -4
- data/spec/heroku_spec.rb +6 -6
- data/spec/tddium_spec.rb +38 -3
- metadata +2 -2
data/Gemfile.lock
CHANGED
data/lib/tddium/heroku.rb
CHANGED
@@ -2,15 +2,23 @@
|
|
2
2
|
Copyright (c) 2011 Solano Labs All Rights Reserved
|
3
3
|
=end
|
4
4
|
|
5
|
+
require 'timeout'
|
6
|
+
|
5
7
|
class HerokuConfig
|
6
8
|
REQUIRED_KEYS = %w{TDDIUM_API_KEY TDDIUM_USER_NAME}
|
7
9
|
def self.read_config(app=nil)
|
8
10
|
result = nil
|
9
11
|
begin
|
10
12
|
config = {}
|
13
|
+
|
11
14
|
command = "heroku config -s"
|
12
15
|
command += " --app #{app}" if app
|
13
|
-
|
16
|
+
|
17
|
+
output = ''
|
18
|
+
Timeout::timeout(5) {
|
19
|
+
output = `#{command} 2>&1`
|
20
|
+
}
|
21
|
+
|
14
22
|
output.lines.each do |line|
|
15
23
|
line.chomp!
|
16
24
|
k, v = line.split('=')
|
@@ -18,7 +26,7 @@ class HerokuConfig
|
|
18
26
|
config[k] = v
|
19
27
|
end
|
20
28
|
end
|
21
|
-
return nil if REQUIRED_KEYS.inject(false) {|missing, x| !config[x]}
|
29
|
+
return nil if REQUIRED_KEYS.inject(false) {|missing, x| missing || !config[x]}
|
22
30
|
result = config if config.keys.length > 0
|
23
31
|
rescue
|
24
32
|
end
|
data/lib/tddium/version.rb
CHANGED
data/lib/tddium.rb
CHANGED
@@ -227,8 +227,11 @@ class Tddium < Thor
|
|
227
227
|
"max_parallelism" => max_parallelism,
|
228
228
|
"test_pattern" => test_pattern})
|
229
229
|
|
230
|
-
exit_failure if test_statuses["failed"] > 0 || test_statuses["
|
230
|
+
exit_failure if test_statuses["failed"] > 0 || test_statuses["error"] > 0
|
231
231
|
rescue TddiumClient::Error::Base
|
232
|
+
exit_failure "Failed due to error communicating with Tddium"
|
233
|
+
rescue RuntimeError => e
|
234
|
+
exit_failure "Failed due to internal error: #{e.inspect} #{e.backtrace}"
|
232
235
|
end
|
233
236
|
end
|
234
237
|
|
@@ -518,9 +521,14 @@ class Tddium < Thor
|
|
518
521
|
# Given the user is logged in, she should be able to use "tddium account" to display information about her account:
|
519
522
|
# Email address
|
520
523
|
# Account creation date
|
521
|
-
say api_response["user"]["email"]
|
522
|
-
say api_response["user"]["created_at"]
|
523
|
-
say api_response["user"]["recurly_url"]
|
524
|
+
say "Username: "+api_response["user"]["email"]
|
525
|
+
say "Account Created: " + api_response["user"]["created_at"]
|
526
|
+
say "Recurly Management URL: " + api_response["user"]["recurly_url"]
|
527
|
+
say "CI Public Key: " + api_response["user"]["ci_ssh_pubkey"] if api_response["user"]["ci_ssh_pubkey"]
|
528
|
+
say "Suites: " + api_response["user"]["suites"] if api_response["user"]["suites"]
|
529
|
+
end
|
530
|
+
|
531
|
+
def show_ci_info(api_response)
|
524
532
|
end
|
525
533
|
|
526
534
|
def suite_for_current_branch?
|
data/spec/heroku_spec.rb
CHANGED
@@ -21,7 +21,7 @@ DB_URL=postgres://foo/bar
|
|
21
21
|
describe ".read_config" do
|
22
22
|
context "addon installed" do
|
23
23
|
before do
|
24
|
-
HerokuConfig.stub(:`).with("heroku config -s").and_return(SAMPLE_HEROKU_CONFIG_TDDIUM)
|
24
|
+
HerokuConfig.stub(:`).with("heroku config -s 2>&1").and_return(SAMPLE_HEROKU_CONFIG_TDDIUM)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should return a hash of the TDDIUM config vars" do
|
@@ -38,8 +38,8 @@ DB_URL=postgres://foo/bar
|
|
38
38
|
|
39
39
|
context "with app specified" do
|
40
40
|
before do
|
41
|
-
HerokuConfig.stub(:`).with("heroku config -s --app #{SAMPLE_APP}").and_return(SAMPLE_HEROKU_CONFIG_TDDIUM)
|
42
|
-
HerokuConfig.should_receive(:`).with("heroku config -s --app #{SAMPLE_APP}")
|
41
|
+
HerokuConfig.stub(:`).with("heroku config -s --app #{SAMPLE_APP} 2>&1").and_return(SAMPLE_HEROKU_CONFIG_TDDIUM)
|
42
|
+
HerokuConfig.should_receive(:`).with("heroku config -s --app #{SAMPLE_APP} 2>&1")
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should pass the app to heroku config" do
|
@@ -50,7 +50,7 @@ DB_URL=postgres://foo/bar
|
|
50
50
|
|
51
51
|
context "missing config" do
|
52
52
|
before do
|
53
|
-
HerokuConfig.stub(:`).with("heroku config -s").and_return(SAMPLE_HEROKU_CONFIG_PARTIAL)
|
53
|
+
HerokuConfig.stub(:`).with("heroku config -s 2>&1").and_return(SAMPLE_HEROKU_CONFIG_PARTIAL)
|
54
54
|
end
|
55
55
|
|
56
56
|
it "should return nil" do
|
@@ -60,7 +60,7 @@ DB_URL=postgres://foo/bar
|
|
60
60
|
|
61
61
|
context "addon not installed" do
|
62
62
|
before do
|
63
|
-
HerokuConfig.stub(:`).with("heroku config -s").and_return(SAMPLE_HEROKU_CONFIG_NO_TDDIUM)
|
63
|
+
HerokuConfig.stub(:`).with("heroku config -s 2>&1").and_return(SAMPLE_HEROKU_CONFIG_NO_TDDIUM)
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should return nil" do
|
@@ -70,7 +70,7 @@ DB_URL=postgres://foo/bar
|
|
70
70
|
|
71
71
|
context "heroku not installed" do
|
72
72
|
before do
|
73
|
-
HerokuConfig.stub(:`).with("heroku config -s").and_raise(Errno::ENOENT)
|
73
|
+
HerokuConfig.stub(:`).with("heroku config -s 2>&1").and_raise(Errno::ENOENT)
|
74
74
|
end
|
75
75
|
it "should return nil" do
|
76
76
|
HerokuConfig.read_config.should be_nil
|
data/spec/tddium_spec.rb
CHANGED
@@ -118,6 +118,15 @@ describe Tddium do
|
|
118
118
|
result.and_return(*response_mocks) unless response_mocks.empty?
|
119
119
|
end
|
120
120
|
|
121
|
+
def stub_call_api_error(method, path, code=500, response="Server Error")
|
122
|
+
result = tddium_client.stub(:call_api).with(method, path, anything, anything)
|
123
|
+
http_response = mock(TddiumClient::Error::Server)
|
124
|
+
http_response.stub(:body => nil,
|
125
|
+
:code => code,
|
126
|
+
:response => mock(:header => mock(:msg => response)))
|
127
|
+
result.and_raise(TddiumClient::Error::Server.new(http_response))
|
128
|
+
end
|
129
|
+
|
121
130
|
def stub_cli_options(tddium, options = {})
|
122
131
|
tddium.stub(:options).and_return(options)
|
123
132
|
end
|
@@ -460,6 +469,7 @@ describe Tddium do
|
|
460
469
|
HighLine.stub(:ask).and_return("")
|
461
470
|
create_file(File.join(File.dirname(__FILE__), "..", Tddium::License::FILE_NAME), SAMPLE_LICENSE_TEXT)
|
462
471
|
create_file(Tddium::Default::SSH_FILE, SAMPLE_SSH_PUBKEY)
|
472
|
+
HerokuConfig.stub(:read_config).and_return(nil)
|
463
473
|
end
|
464
474
|
|
465
475
|
it_should_behave_like "set the default environment"
|
@@ -471,17 +481,17 @@ describe Tddium do
|
|
471
481
|
end
|
472
482
|
|
473
483
|
it "should show the user's email address" do
|
474
|
-
tddium.should_receive(:say).with(SAMPLE_EMAIL)
|
484
|
+
tddium.should_receive(:say).with(/#{SAMPLE_EMAIL}/)
|
475
485
|
run_account(tddium)
|
476
486
|
end
|
477
487
|
|
478
488
|
it "should show the user's account creation date" do
|
479
|
-
tddium.should_receive(:say).with(SAMPLE_DATE_TIME)
|
489
|
+
tddium.should_receive(:say).with(/#{SAMPLE_DATE_TIME}/)
|
480
490
|
run_account(tddium)
|
481
491
|
end
|
482
492
|
|
483
493
|
it "should show the user's recurly account url" do
|
484
|
-
tddium.should_receive(:say).with(SAMPLE_RECURLY_URL)
|
494
|
+
tddium.should_receive(:say).with(/#{SAMPLE_RECURLY_URL}/)
|
485
495
|
run_account(tddium)
|
486
496
|
end
|
487
497
|
|
@@ -868,6 +878,16 @@ describe Tddium do
|
|
868
878
|
|
869
879
|
it_should_behave_like "sending the api key"
|
870
880
|
|
881
|
+
it "should fail on an API error" do
|
882
|
+
stub_call_api_error(:post, Tddium::Api::Path::SESSIONS, 403, "Access Denied")
|
883
|
+
spec_should_fail
|
884
|
+
end
|
885
|
+
|
886
|
+
it "should fail on any other error" do
|
887
|
+
tddium_client.stub(:call_api).with(anything, anything, anything, anything).and_raise("generic runtime error")
|
888
|
+
spec_should_fail
|
889
|
+
end
|
890
|
+
|
871
891
|
context "'POST #{Tddium::Api::Path::SESSIONS}' is successful" do
|
872
892
|
before do
|
873
893
|
response = {"session"=>{"id"=>SAMPLE_SESSION_ID}}
|
@@ -1067,6 +1087,21 @@ describe Tddium do
|
|
1067
1087
|
|
1068
1088
|
it_should_behave_like("test output summary")
|
1069
1089
|
end
|
1090
|
+
|
1091
|
+
context "with only errors" do
|
1092
|
+
before do
|
1093
|
+
get_test_executions_response_errors = {"report"=>SAMPLE_REPORT_URL, "tests"=>{"spec/mouse_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/pig_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/dog_spec.rb"=>{"finished" => true, "status"=>"error"}, "spec/cat_spec.rb"=>{"finished" => true, "status"=>"error"}}}
|
1094
|
+
stub_call_api_response(:get, "#{Tddium::Api::Path::SESSIONS}/#{SAMPLE_SESSION_ID}/#{Tddium::Api::Path::TEST_EXECUTIONS}", get_test_executions_response_errors)
|
1095
|
+
stub_sleep(tddium)
|
1096
|
+
end
|
1097
|
+
it "should display a summary of all the tests and exit failure" do
|
1098
|
+
tddium.should_receive(:say).with("4 tests, 0 failures, 4 errors, 0 pending")
|
1099
|
+
spec_should_fail do
|
1100
|
+
tddium.should_receive(:exit_failure).once
|
1101
|
+
end
|
1102
|
+
end
|
1103
|
+
end
|
1104
|
+
|
1070
1105
|
context "with no errors" do
|
1071
1106
|
before do
|
1072
1107
|
get_test_executions_response_all_passed = {
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: tddium-preview
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.5.
|
5
|
+
version: 0.5.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Solano Labs
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-14 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|