rundeck 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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