sauce_whisk 0.0.13 → 0.0.14
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/.travis.yml +1 -0
- data/Gemfile +3 -2
- data/README.md +40 -5
- data/changelog.markdown +10 -0
- data/lib/sauce_whisk.rb +21 -2
- data/lib/sauce_whisk/assets.rb +25 -2
- data/lib/sauce_whisk/jobs.rb +35 -6
- data/lib/sauce_whisk/rest_request_builder.rb +19 -4
- data/lib/sauce_whisk/version.rb +1 -1
- data/sauce_whisk.gemspec +4 -4
- data/spec/fixtures/vcr_cassettes/assets.yml +205 -57
- data/spec/fixtures/vcr_cassettes/info.yml +131 -5
- data/spec/fixtures/vcr_cassettes/jobs.yml +130 -10
- data/spec/lib/sauce_whisk/account_spec.rb +8 -8
- data/spec/lib/sauce_whisk/accounts_spec.rb +8 -8
- data/spec/lib/sauce_whisk/asset_spec.rb +5 -5
- data/spec/lib/sauce_whisk/assets_spec.rb +18 -3
- data/spec/lib/sauce_whisk/info_spec.rb +5 -5
- data/spec/lib/sauce_whisk/job_spec.rb +32 -18
- data/spec/lib/sauce_whisk/jobs_spec.rb +46 -10
- data/spec/lib/sauce_whisk/rest_request_builder_spec.rb +41 -18
- data/spec/lib/sauce_whisk/sauce_whisk_spec.rb +25 -6
- data/spec/lib/sauce_whisk/subaccounts_spec.rb +2 -2
- data/spec/lib/sauce_whisk/tunnel_spec.rb +6 -6
- data/spec/lib/sauce_whisk/tunnels_spec.rb +9 -9
- metadata +10 -10
@@ -20,9 +20,9 @@ describe SauceWhisk::Assets do
|
|
20
20
|
|
21
21
|
it "initializes the asset properly" do
|
22
22
|
asset = SauceWhisk::Assets.fetch job_id, asset_name
|
23
|
-
asset.name.
|
24
|
-
asset.job.
|
25
|
-
asset.asset_type.
|
23
|
+
expect( asset.name ).to eq asset_name
|
24
|
+
expect( asset.job ).to eq job_id
|
25
|
+
expect( asset.asset_type ).to eq :screenshot
|
26
26
|
end
|
27
27
|
|
28
28
|
context "for an invalid asset" do
|
@@ -43,4 +43,19 @@ describe SauceWhisk::Assets do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
describe "#delete", :vcr => {:cassette_name => "assets"} do
|
48
|
+
let(:asset_job_id) {"f7bcec8f706f4910ba128f48e0b8c6c7"}
|
49
|
+
it "can delete a job" do
|
50
|
+
SauceWhisk::Assets.delete(asset_job_id).should be_an_instance_of SauceWhisk::Asset
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "#already_deleted_asset", :vcr => {:cassette_name => "assets"} do
|
55
|
+
let(:asset_job_id) {"651c7d737b7547e994678d981dcc433c"}
|
56
|
+
it "returns nil for already deleted assets" do
|
57
|
+
SauceWhisk::Assets.delete(asset_job_id).should be_an_instance_of SauceWhisk::Asset
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
46
61
|
end
|
@@ -8,12 +8,12 @@ describe "SauceWhisk::Sauce", :vcr => {:cassette_name => "info"} do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "returns a hash" do
|
11
|
-
SauceWhisk::Sauce.service_status.
|
11
|
+
expect( SauceWhisk::Sauce.service_status ).to be_a_kind_of Hash
|
12
12
|
end
|
13
13
|
|
14
14
|
it "symbolizes the keys" do
|
15
15
|
SauceWhisk::Sauce.service_status.each do |k,v|
|
16
|
-
k.
|
16
|
+
expect( k ).to be_an_instance_of Symbol
|
17
17
|
end
|
18
18
|
end
|
19
19
|
end
|
@@ -25,7 +25,7 @@ describe "SauceWhisk::Sauce", :vcr => {:cassette_name => "info"} do
|
|
25
25
|
end
|
26
26
|
|
27
27
|
it "returns an integer" do
|
28
|
-
SauceWhisk::Sauce.total_job_count.
|
28
|
+
expect( SauceWhisk::Sauce.total_job_count ).to be_a_kind_of Integer
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
@@ -44,7 +44,7 @@ describe "SauceWhisk::Sauce", :vcr => {:cassette_name => "info"} do
|
|
44
44
|
|
45
45
|
it "returns an array" do
|
46
46
|
platforms = SauceWhisk::Sauce.platforms
|
47
|
-
platforms.
|
47
|
+
expect( platforms ).to be_a_kind_of Array
|
48
48
|
end
|
49
49
|
|
50
50
|
context "when called with true" do
|
@@ -60,7 +60,7 @@ describe "SauceWhisk::Sauce", :vcr => {:cassette_name => "info"} do
|
|
60
60
|
|
61
61
|
describe "operational?" do
|
62
62
|
it "returns true when the service is running" do
|
63
|
-
SauceWhisk::Sauce.operational
|
63
|
+
expect( SauceWhisk::Sauce.operational? ).to be true
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
@@ -37,19 +37,19 @@ describe SauceWhisk::Job do
|
|
37
37
|
|
38
38
|
it "tracks changes to methods" do
|
39
39
|
subject.name = "ANewName"
|
40
|
-
subject.updated_fields.
|
40
|
+
expect( subject.updated_fields ).to include :name
|
41
41
|
|
42
42
|
subject.visibility = true
|
43
|
-
subject.updated_fields.
|
43
|
+
expect( subject.updated_fields ).to include :visibility
|
44
44
|
end
|
45
45
|
|
46
46
|
it "does not track unchanged methods" do
|
47
|
-
subject.updated_fields.
|
47
|
+
expect( subject.updated_fields ).to_not include :build
|
48
48
|
end
|
49
49
|
|
50
50
|
it "has empty updated_fields for new instances" do
|
51
51
|
new_job = SauceWhisk::Job.new(params)
|
52
|
-
new_job.updated_fields.
|
52
|
+
expect( new_job.updated_fields ).to eq []
|
53
53
|
end
|
54
54
|
|
55
55
|
describe "#save" do
|
@@ -61,7 +61,7 @@ describe SauceWhisk::Job do
|
|
61
61
|
end
|
62
62
|
|
63
63
|
it "calls the save method of the SauceWhisk::Jobs object" do
|
64
|
-
SauceWhisk::Jobs.
|
64
|
+
expect( SauceWhisk::Jobs ).to receive(:save).with(subject)
|
65
65
|
subject.save
|
66
66
|
end
|
67
67
|
end
|
@@ -93,30 +93,44 @@ describe SauceWhisk::Job do
|
|
93
93
|
subject.send("#{param}=", "TOTALLYDIFFERENT")
|
94
94
|
}.to raise_exception
|
95
95
|
|
96
|
-
subject.send(param).
|
96
|
+
expect( subject.send(param) ).not_to eq "TOTALLYDIFFERENT"
|
97
97
|
end
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
101
101
|
|
102
|
-
context "fetched from the API" do
|
103
|
-
|
102
|
+
context "fetched from the API", :vcr => {:cassette_name => "assets"} do
|
103
|
+
context "with all asset details" do
|
104
|
+
subject {SauceWhisk::Jobs.fetch "bd9c43dd6b5549f1b942d1d581d98cac"}
|
104
105
|
|
105
|
-
|
106
|
-
|
107
|
-
subject.screenshots.length.should be 4
|
106
|
+
it "will set has_all_asset_names true" do
|
107
|
+
expect( subject.has_all_asset_names? ).to be true
|
108
108
|
end
|
109
109
|
|
110
|
-
|
111
|
-
|
112
|
-
|
110
|
+
describe "#screenshots" do
|
111
|
+
it "contains all the screenshots for that job" do
|
112
|
+
expect( subject.screenshots.length ).to be 4
|
113
|
+
end
|
114
|
+
|
115
|
+
it "contains actual screenshots" do
|
116
|
+
expect( subject.screenshots.first ).to be_a_kind_of SauceWhisk::Asset
|
117
|
+
expect( subject.screenshots.first.asset_type ).to eq :screenshot
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
describe "#video", :vcr => {:cassette_name => "assets"} do
|
122
|
+
it "should be a video asset" do
|
123
|
+
expect( subject.video ).to be_a_kind_of SauceWhisk::Asset
|
124
|
+
expect( subject.video.asset_type ).to eq :video
|
125
|
+
end
|
113
126
|
end
|
114
127
|
end
|
115
128
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
129
|
+
context "without asset details" do
|
130
|
+
subject {SauceWhisk::Jobs.fetch "1ca64b180cfa40e0a4aee5a4a482f271" }
|
131
|
+
|
132
|
+
it "will set has_all_asset_names false" do
|
133
|
+
expect( subject.has_all_asset_names? ).to be false
|
120
134
|
end
|
121
135
|
end
|
122
136
|
end
|
@@ -6,12 +6,12 @@ describe SauceWhisk::Jobs do
|
|
6
6
|
describe "#all", :vcr => {:cassette_name => 'jobs'} do
|
7
7
|
|
8
8
|
it "should return an enumerable" do
|
9
|
-
SauceWhisk::Jobs.all.
|
9
|
+
expect( SauceWhisk::Jobs.all ).to be_an Enumerable
|
10
10
|
end
|
11
11
|
|
12
12
|
it "should return a set of jobs" do
|
13
13
|
jobs_found = SauceWhisk::Jobs.all
|
14
|
-
jobs_found.each {|job| job.
|
14
|
+
jobs_found.each {|job| expect( job ).to be_a SauceWhisk::Job}
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -31,7 +31,7 @@ describe SauceWhisk::Jobs do
|
|
31
31
|
describe "##pass_job" do
|
32
32
|
it "Calls the API and passes the given job" do
|
33
33
|
job_id = "rerfreferf"
|
34
|
-
SauceWhisk::Jobs.
|
34
|
+
expect( SauceWhisk::Jobs ).to receive(:change_status).with(job_id, true) {}
|
35
35
|
|
36
36
|
SauceWhisk::Jobs.pass_job job_id
|
37
37
|
end
|
@@ -40,7 +40,7 @@ describe SauceWhisk::Jobs do
|
|
40
40
|
describe "##fail_job" do
|
41
41
|
it "Calls change_status to fail the job" do
|
42
42
|
job_id = "rcercer"
|
43
|
-
SauceWhisk::Jobs.
|
43
|
+
expect( SauceWhisk::Jobs ).to receive(:change_status).with(job_id, false) {}
|
44
44
|
|
45
45
|
SauceWhisk::Jobs.fail_job job_id
|
46
46
|
end
|
@@ -65,15 +65,51 @@ describe SauceWhisk::Jobs do
|
|
65
65
|
end
|
66
66
|
|
67
67
|
describe "##fetch", :vcr => {:cassette_name => "jobs"} do
|
68
|
-
|
68
|
+
context "for a completed job" do
|
69
|
+
let(:job) {SauceWhisk::Jobs.fetch("bd9c43dd6b5549f1b942d1d581d98cac")}
|
69
70
|
|
70
|
-
|
71
|
-
|
72
|
-
|
71
|
+
it "contains the list of screenshots for the job" do
|
72
|
+
expect( job.screenshot_urls ).to be_a_kind_of Enumerable
|
73
|
+
expect( job.screenshot_urls.length ).to_not be 0
|
74
|
+
end
|
75
|
+
|
76
|
+
it "returns a job when a valid one is fetched" do
|
77
|
+
expect( job ).to be_an_instance_of SauceWhisk::Job
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "for an incomplete job" do
|
82
|
+
let(:job) {SauceWhisk::Jobs.fetch("1ca64b180cfa40e0a4aee5a4a482f271")}
|
83
|
+
|
84
|
+
it "returns a job even when asset fetching fails" do
|
85
|
+
expect( job ).to be_an_instance_of SauceWhisk::Job
|
86
|
+
expect( job.screenshots ).to be_nil
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "##fetch!", :vcr => {:cassette_name => "jobs"} do
|
92
|
+
context "for a completed job" do
|
93
|
+
let(:job) {SauceWhisk::Jobs.fetch! "bd9c43dd6b5549f1b942d1d581d98cac"}
|
94
|
+
|
95
|
+
it "contains the list of screenshots for the job" do
|
96
|
+
expect( job.screenshot_urls ).to be_a_kind_of Enumerable
|
97
|
+
expect( job.screenshot_urls.length ).to_not be 0
|
98
|
+
end
|
99
|
+
|
100
|
+
it "returns a job when a valid one is fetched" do
|
101
|
+
expect( job ).to be_an_instance_of SauceWhisk::Job
|
102
|
+
end
|
73
103
|
end
|
74
104
|
|
75
|
-
|
76
|
-
job.
|
105
|
+
context "for an incomplete job" do
|
106
|
+
let(:job) {SauceWhisk::Jobs.fetch! "1ca64b180cfa40e0a4aee5a4a482f271" }
|
107
|
+
|
108
|
+
it "raises an exception" do
|
109
|
+
expect{
|
110
|
+
job
|
111
|
+
}.to raise_exception SauceWhisk::JobNotComplete
|
112
|
+
end
|
77
113
|
end
|
78
114
|
end
|
79
115
|
|
@@ -26,23 +26,46 @@ describe SauceWhisk::RestRequestBuilder do
|
|
26
26
|
describe "#fully_qualified_resource" do
|
27
27
|
context "with a resource defined" do
|
28
28
|
it "should end with the resource" do
|
29
|
-
dummy_client.fully_qualified_resource.
|
29
|
+
expect( dummy_client.fully_qualified_resource ).to eq "#{SauceWhisk.base_url}/#{dummy_client.resource}"
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
context "without a resource defined" do
|
34
34
|
it "should return the base url" do
|
35
|
-
dummy_client_without_resource.fully_qualified_resource.
|
35
|
+
expect( dummy_client_without_resource.fully_qualified_resource ).to eq SauceWhisk.base_url
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
describe "#auth_details" do
|
41
41
|
it "should return the env vars" do
|
42
|
-
dummy_client.auth_details.
|
42
|
+
expect( dummy_client.auth_details ).to eq mock_auth
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
|
+
describe "#make_request" do
|
47
|
+
before :all do
|
48
|
+
VCR.insert_cassette 'rest_request_retry', :record => :new_episodes
|
49
|
+
end
|
50
|
+
|
51
|
+
after :all do
|
52
|
+
VCR.eject_cassette
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should retry 404'd methods n times" do
|
56
|
+
expected_url = "#{SauceWhisk.base_url}/#{dummy_client.resource}"
|
57
|
+
expected_params = {:method => :get, :url => expected_url}.merge mock_auth
|
58
|
+
times = 0
|
59
|
+
expect( RestClient::Request ).to receive(:execute) do |arg|
|
60
|
+
expect(arg).to eq expected_params
|
61
|
+
raise RestClient::ResourceNotFound.new if(times >= SauceWhisk.rest_retries)
|
62
|
+
times += 1
|
63
|
+
end
|
64
|
+
dummy_client.get
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
46
69
|
describe "#get" do
|
47
70
|
before :all do
|
48
71
|
VCR.insert_cassette 'rest_request', :record => :new_episodes
|
@@ -54,7 +77,7 @@ describe SauceWhisk::RestRequestBuilder do
|
|
54
77
|
it "should call the base URL with the resource name" do
|
55
78
|
expected_url = "#{SauceWhisk.base_url}/#{dummy_client.resource}"
|
56
79
|
expected_params = {:method => :get, :url => expected_url}.merge mock_auth
|
57
|
-
RestClient::Request.
|
80
|
+
expect( RestClient::Request ).to receive(:execute).with(expected_params)
|
58
81
|
dummy_client.get
|
59
82
|
end
|
60
83
|
end
|
@@ -64,7 +87,7 @@ describe SauceWhisk::RestRequestBuilder do
|
|
64
87
|
|
65
88
|
it "calls the base URL with the delete method" do
|
66
89
|
expected_params = {:method => :delete, :url => expected_url}.merge mock_auth
|
67
|
-
RestClient::Request.
|
90
|
+
expect( RestClient::Request ).to receive(:execute).with(expected_params)
|
68
91
|
dummy_client.delete "identifier"
|
69
92
|
end
|
70
93
|
end
|
@@ -74,40 +97,40 @@ begin
|
|
74
97
|
let(:expected_payload) {{:tunnel_identifier => "KarlMarx"}}
|
75
98
|
it "calls the base URL" do
|
76
99
|
expected_url = "#{SauceWhisk.base_url}/#{dummy_client.resource}"
|
77
|
-
RestClient::Request.
|
100
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:url => expected_url}))
|
78
101
|
|
79
102
|
dummy_client.post(:payload => expected_payload)
|
80
103
|
end
|
81
104
|
|
82
105
|
it "uses the correct method" do
|
83
|
-
RestClient::Request.
|
106
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:method => :post}))
|
84
107
|
dummy_client.post(:payload => expected_payload)
|
85
108
|
end
|
86
109
|
|
87
110
|
it "includes the correct payload, in JSON" do
|
88
|
-
RestClient::Request.
|
111
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:payload => expected_payload.to_json}))
|
89
112
|
dummy_client.post(:payload => expected_payload)
|
90
113
|
end
|
91
114
|
|
92
115
|
it "includes the correct content_type" do
|
93
|
-
RestClient::Request.
|
116
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:content_type => "application/json"}))
|
94
117
|
dummy_client.post(:payload => expected_payload)
|
95
118
|
end
|
96
119
|
|
97
120
|
it "includes the correct length" do
|
98
121
|
expected_length = expected_payload.to_json.length
|
99
|
-
RestClient::Request.
|
122
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:headers => {"Content-Length" => expected_length}}))
|
100
123
|
dummy_client.post(:payload => expected_payload)
|
101
124
|
end
|
102
125
|
|
103
126
|
it "includes the authentication parameters" do
|
104
|
-
RestClient::Request.
|
127
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including(mock_auth))
|
105
128
|
dummy_client.post(:payload => expected_payload)
|
106
129
|
end
|
107
130
|
|
108
131
|
it "allows for base resource additions" do
|
109
132
|
expected_url = "#{SauceWhisk.base_url}/#{dummy_client.resource}/dummy_res"
|
110
|
-
RestClient::Request.
|
133
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:payload => expected_payload.to_json, :url => expected_url}))
|
111
134
|
|
112
135
|
dummy_client.post(:payload => expected_payload, :resource =>"dummy_res")
|
113
136
|
end
|
@@ -117,32 +140,32 @@ end
|
|
117
140
|
describe "#put", :vcr => {:cassette_name => 'jobs'} do
|
118
141
|
let(:expected_url) {"#{SauceWhisk.base_url}/#{dummy_client.resource}/something"}
|
119
142
|
it "calls the base URL with the put method" do
|
120
|
-
RestClient::Request.
|
143
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:url => expected_url}))
|
121
144
|
dummy_client.put "something", "another_thing"
|
122
145
|
end
|
123
146
|
|
124
147
|
it "includes the right content_type" do
|
125
|
-
RestClient::Request.
|
148
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:content_type => "application/json"}))
|
126
149
|
dummy_client.put "something", "another_thing"
|
127
150
|
end
|
128
151
|
|
129
152
|
it "includes the right method" do
|
130
|
-
RestClient::Request.
|
153
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:method => :put}))
|
131
154
|
dummy_client.put "something", "another_thing"
|
132
155
|
end
|
133
156
|
|
134
157
|
it "includes the content length" do
|
135
|
-
RestClient::Request.
|
158
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including(:headers => {"Content-Length" => 13}))
|
136
159
|
dummy_client.put "something", "another_thing"
|
137
160
|
end
|
138
161
|
|
139
162
|
it "includes authentication details" do
|
140
|
-
RestClient::Request.
|
163
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including(mock_auth))
|
141
164
|
dummy_client.put "something", "another_thing"
|
142
165
|
end
|
143
166
|
|
144
167
|
it "sends the payload" do
|
145
|
-
RestClient::Request.
|
168
|
+
expect( RestClient::Request ).to receive(:execute).with(hash_including({:payload => "another_thing"}))
|
146
169
|
dummy_client.put "something", "another_thing"
|
147
170
|
end
|
148
171
|
end
|
@@ -20,7 +20,7 @@ describe SauceWhisk do
|
|
20
20
|
describe "##pass_job" do
|
21
21
|
it "should call #pass on the jobs object" do
|
22
22
|
job_id = "0418999"
|
23
|
-
SauceWhisk::Jobs.
|
23
|
+
expect( SauceWhisk::Jobs ).to receive(:pass_job).with(job_id) {true}
|
24
24
|
SauceWhisk.pass_job job_id
|
25
25
|
end
|
26
26
|
end
|
@@ -32,16 +32,16 @@ describe SauceWhisk do
|
|
32
32
|
end
|
33
33
|
end
|
34
34
|
SauceWhisk.logger = dummy_logger
|
35
|
-
SauceWhisk.logger.
|
35
|
+
expect( SauceWhisk.logger ).to be dummy_logger
|
36
36
|
end
|
37
37
|
|
38
|
-
it "defaults to
|
38
|
+
it "defaults to STDOUT" do
|
39
39
|
SauceWhisk.logger = nil
|
40
|
-
SauceWhisk.logger.
|
40
|
+
expect( SauceWhisk.logger ).to be_a_kind_of Logger
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
describe "##
|
44
|
+
describe "##asset_fetch_retries" do
|
45
45
|
it "tries to read from Sauce.config" do
|
46
46
|
SauceWhisk.instance_variable_set(:@asset_fetch_retries, nil)
|
47
47
|
mock_config = Class.new(Hash) do
|
@@ -51,7 +51,26 @@ describe SauceWhisk do
|
|
51
51
|
end
|
52
52
|
|
53
53
|
stub_const "::Sauce::Config", mock_config
|
54
|
-
SauceWhisk.asset_fetch_retries.
|
54
|
+
expect( SauceWhisk.asset_fetch_retries ).to equal 3
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "##rest_retries" do
|
59
|
+
it "defaults to 1" do
|
60
|
+
SauceWhisk.instance_variable_set(:@rest_retries, nil)
|
61
|
+
expect( SauceWhisk.rest_retries ).to equal 1
|
62
|
+
end
|
63
|
+
|
64
|
+
it "tries to read from Sauce.config" do
|
65
|
+
SauceWhisk.instance_variable_set(:@rest_retries, nil)
|
66
|
+
mock_config = Class.new(Hash) do
|
67
|
+
def initialize
|
68
|
+
self.store(:rest_retries, 3)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
stub_const "::Sauce::Config", mock_config
|
73
|
+
expect( SauceWhisk.rest_retries ).to equal 3
|
55
74
|
end
|
56
75
|
end
|
57
76
|
end
|