rundeck 0.0.4 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,113 @@
1
+ require 'spec_helper'
2
+
3
+ describe Rundeck::Client do
4
+ describe '.tokens' do
5
+ before do
6
+ @tokens = Rundeck.tokens(user)
7
+ end
8
+ subject { @tokens }
9
+
10
+ context 'when user is nil' do
11
+ let(:user) { nil }
12
+
13
+ context 'when a single token is returned',
14
+ vcr: { cassette_name: 'tokens_single' } do
15
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
16
+ its(:token) { is_expected.to be_a Rundeck::ObjectifiedHash }
17
+ its(:allusers) { is_expected.to eq('true') }
18
+
19
+ it 'expects a get to have been made' do
20
+ expect(a_get('/tokens')).to have_been_made
21
+ end
22
+ end
23
+
24
+ context 'when multiple tokens are returned',
25
+ vcr: { cassette_name: 'tokens_multiple' } do
26
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
27
+ its(:token) { is_expected.to be_an Array }
28
+ its(:allusers) { is_expected.to eq('true') }
29
+ end
30
+ end
31
+
32
+ context 'when user is specified', vcr: { cassette_name: 'tokens_user' } do
33
+ let(:user) { 'admin' }
34
+
35
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
36
+ its(:user) { is_expected.to eq('admin') }
37
+
38
+ describe '#token' do
39
+ subject { @tokens.token }
40
+
41
+ it_behaves_like 'a token'
42
+ its(:user) { is_expected.to eq('admin') }
43
+ end
44
+ end
45
+ end
46
+
47
+ describe '.token' do
48
+ context 'when a token exists', vcr: { cassette_name: 'token' } do
49
+ before do
50
+ @token = Rundeck.token('cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
51
+ end
52
+ subject { @token }
53
+
54
+ it_behaves_like 'a token'
55
+
56
+ it 'expects a get to have been made' do
57
+ expect(a_get('/token/cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')).to have_been_made
58
+ end
59
+ end
60
+
61
+ context 'when a token does not exist',
62
+ vcr: { cassette_name: 'token_invalid' } do
63
+ specify do
64
+ expect do
65
+ Rundeck.token('123456')
66
+ end.to raise_error(Rundeck::Error::NotFound,
67
+ /Token does not exist: 123456/)
68
+ end
69
+ end
70
+ end
71
+
72
+ describe '.create_token' do
73
+ context 'when the user exists', vcr: { cassette_name: 'create_token' } do
74
+ before do
75
+ @token = Rundeck.create_token('admin')
76
+ end
77
+ subject { @token }
78
+
79
+ it_behaves_like 'a token'
80
+
81
+ it 'expects a post to have been made' do
82
+ expect(a_post('/tokens/admin')).to have_been_made
83
+ end
84
+ end
85
+ end
86
+
87
+ describe '.delete_token' do
88
+ context 'when a token exists', vcr: { cassette_name: 'delete_token' } do
89
+ before do
90
+ @token = Rundeck.delete_token('cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
91
+ end
92
+ subject { @token }
93
+
94
+ it { is_expected.to be_nil }
95
+
96
+ it 'expects a delete to have been made' do
97
+ expect(
98
+ a_delete('/token/cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd')
99
+ ).to have_been_made
100
+ end
101
+ end
102
+
103
+ context 'when a token does not exist',
104
+ vcr: { cassette_name: 'delete_token_invalid' } do
105
+ specify do
106
+ expect do
107
+ Rundeck.delete_token('123456')
108
+ end.to raise_error(Rundeck::Error::NotFound,
109
+ /Token does not exist: 123456/)
110
+ end
111
+ end
112
+ end
113
+ end
@@ -32,7 +32,10 @@ describe Rundeck::Request do
32
32
  end
33
33
  subject { @rundeck_request }
34
34
 
35
- it { expect(Rundeck::Request.base_uri).to eq('http://api.example.org') }
35
+ it do
36
+ expect(Rundeck::Request.base_uri)
37
+ .to eq("http://api.example.org/api/#{Rundeck.api_version}")
38
+ end
36
39
  its(:api_token) { is_expected.to eq('secret') }
37
40
  end
38
41
  end
data/spec/rundeck_spec.rb CHANGED
@@ -45,10 +45,9 @@ describe Rundeck do
45
45
  Rundeck.configure do |config|
46
46
  config.send("#{key}=", key)
47
47
  end
48
- @key = key == :endpoint ? "#{key}/api/#{Rundeck.api_version}" : key
49
48
  end
50
49
 
51
- it { is_expected.to eq(@key) }
50
+ it { is_expected.to eq(key) }
52
51
  end
53
52
  end
54
53
  end
data/spec/spec_helper.rb CHANGED
@@ -8,6 +8,7 @@ require 'codeclimate-test-reporter'
8
8
  CodeClimate::TestReporter.start
9
9
 
10
10
  require 'support/helpers'
11
+ require 'support/shared_examples'
11
12
 
12
13
  require File.expand_path('../../lib/rundeck', __FILE__)
13
14
 
@@ -19,7 +20,7 @@ RSpec.configure do |config|
19
20
  config.before(:each) do
20
21
  # Configuration for Anvils Demo Vagrant Box. API token might change.
21
22
  Rundeck.endpoint = 'http://192.168.50.2:4440'
22
- Rundeck.api_token = 'cmJQYoy9EAsSd0905yNjKDNGs0ESIwEd'
23
+ Rundeck.api_token = 'cbsQgUIZBOyCgoipJAwKd1YgfcwPJ0FY'
23
24
  WebMock.reset!
24
25
  end
25
26
  end
@@ -4,58 +4,38 @@ module Helpers
4
4
  File.new(File.dirname(__FILE__) + "/../fixtures/#{name}.xml")
5
5
  end
6
6
 
7
- # GET
8
- def stub_get(path, fixture, accept = 'xml')
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))
7
+ def endpoint
8
+ "#{Rundeck.endpoint}/api/#{Rundeck.api_version}"
13
9
  end
14
10
 
11
+ # GET
15
12
  def a_get(path, accept = 'xml')
16
- a_request(:get, "#{Rundeck.endpoint}#{path}")
13
+ a_request(:get, "#{endpoint}#{path}")
17
14
  .with(headers: { 'Accept' => "application/#{accept}",
18
15
  'X-Rundeck-Auth-Token' => Rundeck.api_token })
19
16
  end
20
17
 
21
18
  # POST
22
- def stub_post(path, fixture, status_code = 200, accept = 'xml')
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)
27
- end
28
-
29
19
  def a_post(path, accept = 'xml')
30
- a_request(:post, "#{Rundeck.endpoint}#{path}")
20
+ a_request(:post, "#{endpoint}#{path}")
31
21
  .with(headers: { 'Accept' => "application/#{accept}",
32
22
  'X-Rundeck-Auth-Token' => Rundeck.api_token })
33
23
  end
34
24
 
35
- # PUT
36
- def stub_put(path, fixture, accept = 'xml')
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))
25
+ def a_simple_post(path)
26
+ a_request(:post, "#{endpoint}#{path}")
41
27
  end
42
28
 
29
+ # PUT
43
30
  def a_put(path, accept = 'xml')
44
- a_request(:put, "#{Rundeck.endpoint}#{path}")
31
+ a_request(:put, "#{endpoint}#{path}")
45
32
  .with(headers: { 'Accept' => "application/#{accept}",
46
33
  'X-Rundeck-Auth-Token' => Rundeck.api_token })
47
34
  end
48
35
 
49
36
  # DELETE
50
- def stub_delete(path, fixture, accept = 'xml')
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))
55
- end
56
-
57
37
  def a_delete(path, accept = 'xml')
58
- a_request(:delete, "#{Rundeck.endpoint}#{path}")
38
+ a_request(:delete, "#{endpoint}#{path}")
59
39
  .with(headers: { 'Accept' => "application/#{accept}",
60
40
  'X-Rundeck-Auth-Token' => Rundeck.api_token })
61
41
  end
@@ -0,0 +1,40 @@
1
+ shared_examples 'a job' do
2
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
3
+ it { is_expected.to respond_to(:id) }
4
+ it { is_expected.to respond_to(:name) }
5
+ it { is_expected.to respond_to(:group) }
6
+ it { is_expected.to respond_to(:description) }
7
+ end
8
+
9
+ shared_examples 'a job with a project attribute' do
10
+ it_behaves_like 'a job'
11
+ it { is_expected.to respond_to(:project) }
12
+ end
13
+
14
+ shared_examples 'a job import' do
15
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
16
+ it { is_expected.to respond_to(:id) }
17
+ it { is_expected.to respond_to(:name) }
18
+ it { is_expected.to respond_to(:group) }
19
+ it { is_expected.to respond_to(:project) }
20
+ it { is_expected.to respond_to(:url) }
21
+ end
22
+
23
+ shared_examples 'an execution' do
24
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
25
+ it { is_expected.to respond_to(:user) }
26
+ it { is_expected.to respond_to(:date_started) }
27
+ it { is_expected.to respond_to(:description) }
28
+ it { is_expected.to respond_to(:argstring) }
29
+ end
30
+
31
+ shared_examples 'a past execution' do
32
+ it_behaves_like 'an execution'
33
+ it { is_expected.to respond_to(:date_ended) }
34
+ end
35
+
36
+ shared_examples 'a token' do
37
+ it { is_expected.to be_a Rundeck::ObjectifiedHash }
38
+ it { is_expected.to respond_to(:id) }
39
+ it { is_expected.to respond_to(:user) }
40
+ end
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
4
+ version: 1.0.1
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-04 00:00:00.000000000 Z
11
+ date: 2014-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -217,6 +217,7 @@ files:
217
217
  - lib/rundeck/client/job.rb
218
218
  - lib/rundeck/client/key.rb
219
219
  - lib/rundeck/client/project.rb
220
+ - lib/rundeck/client/token.rb
220
221
  - lib/rundeck/configuration.rb
221
222
  - lib/rundeck/error.rb
222
223
  - lib/rundeck/objectified_hash.rb
@@ -233,6 +234,7 @@ files:
233
234
  - spec/cassettes/12/create_project_json.yml
234
235
  - spec/cassettes/12/create_project_xml.yml
235
236
  - spec/cassettes/12/create_public_key.yml
237
+ - spec/cassettes/12/create_token.yml
236
238
  - spec/cassettes/12/delete_execution_invalid.yml
237
239
  - spec/cassettes/12/delete_execution_valid.yml
238
240
  - spec/cassettes/12/delete_job_executions.yml
@@ -244,6 +246,8 @@ files:
244
246
  - spec/cassettes/12/delete_key_public.yml
245
247
  - spec/cassettes/12/delete_project_invalid.yml
246
248
  - spec/cassettes/12/delete_project_valid.yml
249
+ - spec/cassettes/12/delete_token.yml
250
+ - spec/cassettes/12/delete_token_invalid.yml
247
251
  - spec/cassettes/12/execution_invalid.yml
248
252
  - spec/cassettes/12/execution_query_invalid.yml
249
253
  - spec/cassettes/12/execution_query_no_params_valid.yml
@@ -273,18 +277,25 @@ files:
273
277
  - spec/cassettes/12/running_jobs_multiple.yml
274
278
  - spec/cassettes/12/running_jobs_none.yml
275
279
  - spec/cassettes/12/running_jobs_single.yml
280
+ - spec/cassettes/12/token.yml
281
+ - spec/cassettes/12/token_invalid.yml
282
+ - spec/cassettes/12/tokens_multiple.yml
283
+ - spec/cassettes/12/tokens_single.yml
284
+ - spec/cassettes/12/tokens_user.yml
276
285
  - spec/cassettes/12/update_private_key.yml
277
286
  - spec/cassettes/12/update_public_key.yml
278
287
  - spec/rundeck/client/execution_spec.rb
279
288
  - spec/rundeck/client/job_spec.rb
280
289
  - spec/rundeck/client/key_spec.rb
281
290
  - spec/rundeck/client/project_spec.rb
291
+ - spec/rundeck/client/token_spec.rb
282
292
  - spec/rundeck/client_spec.rb
283
293
  - spec/rundeck/objectified_hash_spec.rb
284
294
  - spec/rundeck/request_spec.rb
285
295
  - spec/rundeck_spec.rb
286
296
  - spec/spec_helper.rb
287
297
  - spec/support/helpers.rb
298
+ - spec/support/shared_examples.rb
288
299
  homepage: http://dblessing.github.io/rundeck-ruby
289
300
  licenses:
290
301
  - BSD-2-Clause
@@ -320,6 +331,7 @@ test_files:
320
331
  - spec/cassettes/12/create_project_json.yml
321
332
  - spec/cassettes/12/create_project_xml.yml
322
333
  - spec/cassettes/12/create_public_key.yml
334
+ - spec/cassettes/12/create_token.yml
323
335
  - spec/cassettes/12/delete_execution_invalid.yml
324
336
  - spec/cassettes/12/delete_execution_valid.yml
325
337
  - spec/cassettes/12/delete_job_executions.yml
@@ -331,6 +343,8 @@ test_files:
331
343
  - spec/cassettes/12/delete_key_public.yml
332
344
  - spec/cassettes/12/delete_project_invalid.yml
333
345
  - spec/cassettes/12/delete_project_valid.yml
346
+ - spec/cassettes/12/delete_token.yml
347
+ - spec/cassettes/12/delete_token_invalid.yml
334
348
  - spec/cassettes/12/execution_invalid.yml
335
349
  - spec/cassettes/12/execution_query_invalid.yml
336
350
  - spec/cassettes/12/execution_query_no_params_valid.yml
@@ -360,16 +374,23 @@ test_files:
360
374
  - spec/cassettes/12/running_jobs_multiple.yml
361
375
  - spec/cassettes/12/running_jobs_none.yml
362
376
  - spec/cassettes/12/running_jobs_single.yml
377
+ - spec/cassettes/12/token.yml
378
+ - spec/cassettes/12/token_invalid.yml
379
+ - spec/cassettes/12/tokens_multiple.yml
380
+ - spec/cassettes/12/tokens_single.yml
381
+ - spec/cassettes/12/tokens_user.yml
363
382
  - spec/cassettes/12/update_private_key.yml
364
383
  - spec/cassettes/12/update_public_key.yml
365
384
  - spec/rundeck/client/execution_spec.rb
366
385
  - spec/rundeck/client/job_spec.rb
367
386
  - spec/rundeck/client/key_spec.rb
368
387
  - spec/rundeck/client/project_spec.rb
388
+ - spec/rundeck/client/token_spec.rb
369
389
  - spec/rundeck/client_spec.rb
370
390
  - spec/rundeck/objectified_hash_spec.rb
371
391
  - spec/rundeck/request_spec.rb
372
392
  - spec/rundeck_spec.rb
373
393
  - spec/spec_helper.rb
374
394
  - spec/support/helpers.rb
395
+ - spec/support/shared_examples.rb
375
396
  has_rdoc: