rundeck 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/CHANGELOG.md +2 -0
- data/lib/rundeck/api.rb +1 -1
- data/lib/rundeck/client.rb +2 -1
- data/lib/rundeck/client/execution.rb +17 -22
- data/lib/rundeck/client/job.rb +3 -2
- data/lib/rundeck/client/project.rb +84 -0
- data/lib/rundeck/objectified_hash.rb +7 -1
- data/lib/rundeck/version.rb +1 -1
- data/rundeck.gemspec +1 -0
- data/spec/cassettes/12/create_project_invalid.yml +43 -0
- data/spec/cassettes/12/create_project_json.yml +55 -0
- data/spec/cassettes/12/create_project_xml.yml +58 -0
- data/spec/cassettes/12/delete_project_invalid.yml +41 -0
- data/spec/cassettes/12/delete_project_valid.yml +32 -0
- data/spec/cassettes/12/project_invalid.yml +41 -0
- data/spec/cassettes/12/project_valid.yml +55 -0
- data/spec/cassettes/12/projects.yml +44 -0
- data/spec/rundeck/client/execution_spec.rb +128 -89
- data/spec/rundeck/client/job_spec.rb +14 -8
- data/spec/rundeck/client/project_spec.rb +117 -0
- data/spec/rundeck/objectified_hash_spec.rb +16 -0
- data/spec/rundeck/request_spec.rb +1 -1
- data/spec/rundeck_spec.rb +1 -1
- data/spec/support/helpers.rb +36 -20
- metadata +36 -2
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Rundeck::Client do
|
4
|
+
describe '.projects', vcr: { cassette_name: 'projects' } do
|
5
|
+
before do
|
6
|
+
@projects = Rundeck.projects
|
7
|
+
end
|
8
|
+
subject { @projects }
|
9
|
+
|
10
|
+
its(:project) { is_expected.to be_a Rundeck::ObjectifiedHash }
|
11
|
+
|
12
|
+
describe '#project' do
|
13
|
+
subject { @projects.project }
|
14
|
+
|
15
|
+
its(:name) { is_expected.to eq('anvils') }
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'expects a get to have been made' do
|
19
|
+
expect(a_get('/projects')).to have_been_made
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.create_project' do
|
24
|
+
context 'when project does not yet exist' do
|
25
|
+
before do
|
26
|
+
@project = Rundeck.create_project(content, format)
|
27
|
+
end
|
28
|
+
subject { @project }
|
29
|
+
|
30
|
+
context 'create with json format',
|
31
|
+
vcr: { cassette_name: 'create_project_json' } do
|
32
|
+
let(:content) { project_json }
|
33
|
+
let(:format) { 'json' }
|
34
|
+
|
35
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
36
|
+
its(:name) { is_expected.to eq('json_project') }
|
37
|
+
|
38
|
+
it 'expects a post to have been made' do
|
39
|
+
expect(a_post('/projects')).to have_been_made
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'create with xml format',
|
44
|
+
vcr: { cassette_name: 'create_project_xml' } do
|
45
|
+
let(:content) { project_xml }
|
46
|
+
let(:format) { 'xml' }
|
47
|
+
|
48
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
49
|
+
its(:name) { is_expected.to eq('xml_project') }
|
50
|
+
|
51
|
+
it 'expects a post to have been made' do
|
52
|
+
expect(a_post('/projects')).to have_been_made
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when project already exists',
|
58
|
+
vcr: { cassette_name: 'create_project_invalid' } do
|
59
|
+
specify do
|
60
|
+
expect do
|
61
|
+
Rundeck.create_project(project_anvils, 'json')
|
62
|
+
end.to raise_error(Rundeck::Error::Conflict,
|
63
|
+
/project already exists/)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe '.project' do
|
69
|
+
context 'when the project exists',
|
70
|
+
vcr: { cassette_name: 'project_valid' } do
|
71
|
+
before do
|
72
|
+
@project = Rundeck.project('anvils')
|
73
|
+
end
|
74
|
+
subject { @project }
|
75
|
+
|
76
|
+
it { is_expected.to be_a Rundeck::ObjectifiedHash }
|
77
|
+
its(:name) { is_expected.to eq('anvils') }
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when the project does not exist',
|
81
|
+
vcr: { cassette_name: 'project_invalid' } do
|
82
|
+
specify do
|
83
|
+
expect do
|
84
|
+
Rundeck.project('nonexistent')
|
85
|
+
end.to raise_error(Rundeck::Error::NotFound,
|
86
|
+
/project does not exist/)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe '.delete_project' do
|
92
|
+
context 'when a project exists',
|
93
|
+
vcr: { cassette_name: 'delete_project_valid' } do
|
94
|
+
before do
|
95
|
+
@project = Rundeck.delete_project(project)
|
96
|
+
end
|
97
|
+
let(:project) { 'anvils' }
|
98
|
+
subject { @project }
|
99
|
+
|
100
|
+
it { is_expected.to be_nil }
|
101
|
+
|
102
|
+
it 'expects a delete to have been made' do
|
103
|
+
expect(a_delete('/project/anvils')).to have_been_made
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
context 'when a project does not exist',
|
108
|
+
vcr: { cassette_name: 'delete_project_invalid' } do
|
109
|
+
specify do
|
110
|
+
expect do
|
111
|
+
Rundeck.delete_project('project1')
|
112
|
+
end.to raise_error(Rundeck::Error::NotFound,
|
113
|
+
/Project does not exist/)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
@@ -43,4 +43,20 @@ describe Rundeck::ObjectifiedHash do
|
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
46
|
+
|
47
|
+
context 'with arrays of hashes' do
|
48
|
+
before do
|
49
|
+
@hash = { a: 1, b: [{ c: 2, d: 3 }, { e: 4, f: 5 }] }
|
50
|
+
@obj_hash = Rundeck::ObjectifiedHash.new(@hash)
|
51
|
+
end
|
52
|
+
subject { @obj_hash }
|
53
|
+
|
54
|
+
describe 'b' do
|
55
|
+
subject { @obj_hash.b }
|
56
|
+
|
57
|
+
it { is_expected.to be_an Array }
|
58
|
+
its('first') { is_expected.to be_a Rundeck::ObjectifiedHash }
|
59
|
+
its('first.c') { is_expected.to eq(2) }
|
60
|
+
end
|
61
|
+
end
|
46
62
|
end
|
@@ -28,7 +28,7 @@ describe Rundeck::Request do
|
|
28
28
|
before do
|
29
29
|
@rundeck_request = Rundeck::Request.new
|
30
30
|
@rundeck_request
|
31
|
-
|
31
|
+
.set_request_defaults('http://api.example.org', 'secret')
|
32
32
|
end
|
33
33
|
subject { @rundeck_request }
|
34
34
|
|
data/spec/rundeck_spec.rb
CHANGED
data/spec/support/helpers.rb
CHANGED
@@ -7,57 +7,57 @@ module Helpers
|
|
7
7
|
# GET
|
8
8
|
def stub_get(path, fixture, accept = 'xml')
|
9
9
|
stub_request(:get, "#{Rundeck.endpoint}#{path}")
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
11
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
12
|
+
.to_return(body: load_fixture(fixture))
|
13
13
|
end
|
14
14
|
|
15
15
|
def a_get(path, accept = 'xml')
|
16
16
|
a_request(:get, "#{Rundeck.endpoint}#{path}")
|
17
|
-
|
18
|
-
|
17
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
18
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
19
19
|
end
|
20
20
|
|
21
21
|
# POST
|
22
22
|
def stub_post(path, fixture, status_code = 200, accept = 'xml')
|
23
23
|
stub_request(:post, "#{Rundeck.endpoint}#{path}")
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
25
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
26
|
+
.to_return(body: load_fixture(fixture), status: status_code)
|
27
27
|
end
|
28
28
|
|
29
29
|
def a_post(path, accept = 'xml')
|
30
30
|
a_request(:post, "#{Rundeck.endpoint}#{path}")
|
31
|
-
|
32
|
-
|
31
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
32
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
33
33
|
end
|
34
34
|
|
35
35
|
# PUT
|
36
36
|
def stub_put(path, fixture, accept = 'xml')
|
37
37
|
stub_request(:put, "#{Rundeck.endpoint}#{path}")
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
39
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
40
|
+
.to_return(body: load_fixture(fixture))
|
41
41
|
end
|
42
42
|
|
43
43
|
def a_put(path, accept = 'xml')
|
44
44
|
a_request(:put, "#{Rundeck.endpoint}#{path}")
|
45
|
-
|
46
|
-
|
45
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
46
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
47
47
|
end
|
48
48
|
|
49
49
|
# DELETE
|
50
50
|
def stub_delete(path, fixture, accept = 'xml')
|
51
51
|
stub_request(:delete, "#{Rundeck.endpoint}#{path}")
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
53
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
54
|
+
.to_return(body: load_fixture(fixture))
|
55
55
|
end
|
56
56
|
|
57
57
|
def a_delete(path, accept = 'xml')
|
58
58
|
a_request(:delete, "#{Rundeck.endpoint}#{path}")
|
59
|
-
|
60
|
-
|
59
|
+
.with(headers: { 'Accept' => "application/#{accept}",
|
60
|
+
'X-Rundeck-Auth-Token' => Rundeck.api_token })
|
61
61
|
end
|
62
62
|
|
63
63
|
def job_yaml
|
@@ -96,6 +96,22 @@ module Helpers
|
|
96
96
|
EOS
|
97
97
|
end
|
98
98
|
|
99
|
+
def project_anvils
|
100
|
+
'{ "name": "anvils" }'
|
101
|
+
end
|
102
|
+
|
103
|
+
def project_json
|
104
|
+
'{ "name": "json_project" }'
|
105
|
+
end
|
106
|
+
|
107
|
+
def project_xml
|
108
|
+
<<-EOS
|
109
|
+
<project>
|
110
|
+
<name>xml_project</name>
|
111
|
+
</project>
|
112
|
+
EOS
|
113
|
+
end
|
114
|
+
|
99
115
|
def private_key
|
100
116
|
<<-EOS
|
101
117
|
-----BEGIN RSA PRIVATE KEY-----
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rundeck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Drew A. Blessing
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ~>
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: 1.0.0
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: webmock
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,6 +204,7 @@ files:
|
|
190
204
|
- .rubocop.yml
|
191
205
|
- .rubocop_todo.yml
|
192
206
|
- .travis.yml
|
207
|
+
- CHANGELOG.md
|
193
208
|
- Gemfile
|
194
209
|
- Guardfile
|
195
210
|
- LICENSE.txt
|
@@ -201,6 +216,7 @@ files:
|
|
201
216
|
- lib/rundeck/client/execution.rb
|
202
217
|
- lib/rundeck/client/job.rb
|
203
218
|
- lib/rundeck/client/key.rb
|
219
|
+
- lib/rundeck/client/project.rb
|
204
220
|
- lib/rundeck/configuration.rb
|
205
221
|
- lib/rundeck/error.rb
|
206
222
|
- lib/rundeck/objectified_hash.rb
|
@@ -213,6 +229,9 @@ files:
|
|
213
229
|
- spec/cassettes/12/bulk_delete_executions_invalid.yml
|
214
230
|
- spec/cassettes/12/bulk_delete_executions_valid.yml
|
215
231
|
- spec/cassettes/12/create_private_key.yml
|
232
|
+
- spec/cassettes/12/create_project_invalid.yml
|
233
|
+
- spec/cassettes/12/create_project_json.yml
|
234
|
+
- spec/cassettes/12/create_project_xml.yml
|
216
235
|
- spec/cassettes/12/create_public_key.yml
|
217
236
|
- spec/cassettes/12/delete_execution_invalid.yml
|
218
237
|
- spec/cassettes/12/delete_execution_valid.yml
|
@@ -223,6 +242,8 @@ files:
|
|
223
242
|
- spec/cassettes/12/delete_key_invalid.yml
|
224
243
|
- spec/cassettes/12/delete_key_private.yml
|
225
244
|
- spec/cassettes/12/delete_key_public.yml
|
245
|
+
- spec/cassettes/12/delete_project_invalid.yml
|
246
|
+
- spec/cassettes/12/delete_project_valid.yml
|
226
247
|
- spec/cassettes/12/execution_invalid.yml
|
227
248
|
- spec/cassettes/12/execution_query_invalid.yml
|
228
249
|
- spec/cassettes/12/execution_query_no_params_valid.yml
|
@@ -244,6 +265,9 @@ files:
|
|
244
265
|
- spec/cassettes/12/keys_direct.yml
|
245
266
|
- spec/cassettes/12/keys_multiple.yml
|
246
267
|
- spec/cassettes/12/keys_none.yml
|
268
|
+
- spec/cassettes/12/project_invalid.yml
|
269
|
+
- spec/cassettes/12/project_valid.yml
|
270
|
+
- spec/cassettes/12/projects.yml
|
247
271
|
- spec/cassettes/12/run_job_invalid.yml
|
248
272
|
- spec/cassettes/12/run_job_valid.yml
|
249
273
|
- spec/cassettes/12/running_jobs_multiple.yml
|
@@ -254,6 +278,7 @@ files:
|
|
254
278
|
- spec/rundeck/client/execution_spec.rb
|
255
279
|
- spec/rundeck/client/job_spec.rb
|
256
280
|
- spec/rundeck/client/key_spec.rb
|
281
|
+
- spec/rundeck/client/project_spec.rb
|
257
282
|
- spec/rundeck/client_spec.rb
|
258
283
|
- spec/rundeck/objectified_hash_spec.rb
|
259
284
|
- spec/rundeck/request_spec.rb
|
@@ -291,6 +316,9 @@ test_files:
|
|
291
316
|
- spec/cassettes/12/bulk_delete_executions_invalid.yml
|
292
317
|
- spec/cassettes/12/bulk_delete_executions_valid.yml
|
293
318
|
- spec/cassettes/12/create_private_key.yml
|
319
|
+
- spec/cassettes/12/create_project_invalid.yml
|
320
|
+
- spec/cassettes/12/create_project_json.yml
|
321
|
+
- spec/cassettes/12/create_project_xml.yml
|
294
322
|
- spec/cassettes/12/create_public_key.yml
|
295
323
|
- spec/cassettes/12/delete_execution_invalid.yml
|
296
324
|
- spec/cassettes/12/delete_execution_valid.yml
|
@@ -301,6 +329,8 @@ test_files:
|
|
301
329
|
- spec/cassettes/12/delete_key_invalid.yml
|
302
330
|
- spec/cassettes/12/delete_key_private.yml
|
303
331
|
- spec/cassettes/12/delete_key_public.yml
|
332
|
+
- spec/cassettes/12/delete_project_invalid.yml
|
333
|
+
- spec/cassettes/12/delete_project_valid.yml
|
304
334
|
- spec/cassettes/12/execution_invalid.yml
|
305
335
|
- spec/cassettes/12/execution_query_invalid.yml
|
306
336
|
- spec/cassettes/12/execution_query_no_params_valid.yml
|
@@ -322,6 +352,9 @@ test_files:
|
|
322
352
|
- spec/cassettes/12/keys_direct.yml
|
323
353
|
- spec/cassettes/12/keys_multiple.yml
|
324
354
|
- spec/cassettes/12/keys_none.yml
|
355
|
+
- spec/cassettes/12/project_invalid.yml
|
356
|
+
- spec/cassettes/12/project_valid.yml
|
357
|
+
- spec/cassettes/12/projects.yml
|
325
358
|
- spec/cassettes/12/run_job_invalid.yml
|
326
359
|
- spec/cassettes/12/run_job_valid.yml
|
327
360
|
- spec/cassettes/12/running_jobs_multiple.yml
|
@@ -332,6 +365,7 @@ test_files:
|
|
332
365
|
- spec/rundeck/client/execution_spec.rb
|
333
366
|
- spec/rundeck/client/job_spec.rb
|
334
367
|
- spec/rundeck/client/key_spec.rb
|
368
|
+
- spec/rundeck/client/project_spec.rb
|
335
369
|
- spec/rundeck/client_spec.rb
|
336
370
|
- spec/rundeck/objectified_hash_spec.rb
|
337
371
|
- spec/rundeck/request_spec.rb
|