rundeck 0.0.3 → 0.0.4

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.
@@ -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
- .set_request_defaults('http://api.example.org', 'secret')
31
+ .set_request_defaults('http://api.example.org', 'secret')
32
32
  end
33
33
  subject { @rundeck_request }
34
34
 
@@ -45,7 +45,7 @@ describe Rundeck do
45
45
  Rundeck.configure do |config|
46
46
  config.send("#{key}=", key)
47
47
  end
48
- @key = key == :endpoint ? "#{key}/api/12" : key
48
+ @key = key == :endpoint ? "#{key}/api/#{Rundeck.api_version}" : key
49
49
  end
50
50
 
51
51
  it { is_expected.to eq(@key) }
@@ -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
- .with(headers: { 'Accept' => "application/#{accept}",
11
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
12
- .to_return(body: load_fixture(fixture))
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
- .with(headers: { 'Accept' => "application/#{accept}",
18
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
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
- .with(headers: { 'Accept' => "application/#{accept}",
25
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
26
- .to_return(body: load_fixture(fixture), status: status_code)
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
- .with(headers: { 'Accept' => "application/#{accept}",
32
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
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
- .with(headers: { 'Accept' => "application/#{accept}",
39
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
40
- .to_return(body: load_fixture(fixture))
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
- .with(headers: { 'Accept' => "application/#{accept}",
46
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
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
- .with(headers: { 'Accept' => "application/#{accept}",
53
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
54
- .to_return(body: load_fixture(fixture))
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
- .with(headers: { 'Accept' => "application/#{accept}",
60
- 'X-Rundeck-Auth-Token' => Rundeck.api_token })
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.3
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-10-30 00:00:00.000000000 Z
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