vmc 0.5.0.rc1 → 0.5.0.rc2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. data/lib/vmc/cli.rb +2 -1
  2. data/lib/vmc/cli/app/start.rb +81 -24
  3. data/lib/vmc/cli/space/create.rb +4 -0
  4. data/lib/vmc/cli/space/switch.rb +16 -0
  5. data/lib/vmc/cli/start/base.rb +21 -18
  6. data/lib/vmc/cli/user/base.rb +1 -1
  7. data/lib/vmc/cli/user/delete.rb +2 -0
  8. data/lib/vmc/version.rb +1 -1
  9. data/spec/assets/hello-sinatra/Gemfile.lock +17 -0
  10. data/spec/features/{new_user_flow_spec.rb → v1/new_user_flow_spec.rb} +12 -18
  11. data/spec/features/v2/account_lifecycle_spec.rb +64 -0
  12. data/spec/features/v2/push_flow_spec.rb +126 -0
  13. data/spec/spec_helper.rb +16 -3
  14. data/{lib/vmc/test_support → spec/support}/command_helper.rb +5 -5
  15. data/spec/support/config_helper.rb +15 -0
  16. data/spec/support/console_app_specker_matchers.rb +2 -2
  17. data/spec/support/fake_home_dir.rb +42 -0
  18. data/{lib/vmc/test_support → spec/support}/interact_helper.rb +1 -1
  19. data/spec/support/shared_examples/errors.rb +40 -0
  20. data/{lib/vmc/test_support/common_input_examples.rb → spec/support/shared_examples/input.rb} +0 -0
  21. data/spec/support/specker_runner.rb +17 -61
  22. data/spec/support/tracking_expector.rb +71 -0
  23. data/spec/vmc/cli/app/instances_spec.rb +3 -3
  24. data/spec/vmc/cli/app/start_spec.rb +201 -0
  25. data/spec/vmc/cli/app/stats_spec.rb +21 -15
  26. data/spec/vmc/cli/space/create_spec.rb +73 -0
  27. data/spec/vmc/cli/space/switch_space_spec.rb +55 -0
  28. data/spec/vmc/cli/start/info_spec.rb +3 -16
  29. data/spec/vmc/cli/start/login_spec.rb +97 -37
  30. data/spec/vmc/cli/start/logout_spec.rb +3 -16
  31. data/spec/vmc/cli/start/target_spec.rb +84 -0
  32. data/spec/vmc/cli/user/delete_spec.rb +51 -0
  33. data/spec/vmc/cli/user/passwd_spec.rb +1 -1
  34. data/spec/vmc/cli/user/register_spec.rb +1 -1
  35. data/spec/vmc/cli_spec.rb +38 -36
  36. metadata +65 -39
  37. data/lib/vmc/cli/space/take.rb +0 -16
  38. data/lib/vmc/test_support/fake_home_dir.rb +0 -16
@@ -0,0 +1,51 @@
1
+ require 'spec_helper'
2
+ require "vmc/cli/user/delete"
3
+
4
+ describe VMC::User::Delete do
5
+ let(:global) { { :color => false, :quiet => true } }
6
+ let(:inputs) { { :email => "user@example.com"} }
7
+ let(:given) { {} }
8
+ let(:client) { fake_client }
9
+ let(:app) {}
10
+
11
+ before do
12
+ any_instance_of(VMC::CLI) do |cli|
13
+ stub(cli).client { client }
14
+ end
15
+ end
16
+
17
+ subject { Mothership.new.invoke(:delete_user, inputs, given, global) }
18
+
19
+ describe 'metadata' do
20
+ let(:command) { Mothership.commands[:delete_user] }
21
+
22
+ describe 'command' do
23
+ subject { command }
24
+ its(:description) { should eq "Delete a user" }
25
+ it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
26
+ end
27
+
28
+ include_examples 'inputs must have descriptions'
29
+
30
+ describe 'arguments' do
31
+ subject { command.arguments }
32
+ it 'has the correct argument order' do
33
+ should eq([
34
+ { :type => :normal, :value => nil, :name => :email }
35
+ ])
36
+ end
37
+ end
38
+ end
39
+
40
+ describe "deleting a user" do
41
+ context "when targeting a V2 API" do
42
+ before do
43
+ stub(client).version { 2 }
44
+ end
45
+
46
+ it_behaves_like "an error that gets passed through",
47
+ :with_exception => VMC::UserError,
48
+ :with_message => "Not implemented for v2."
49
+ end
50
+ end
51
+ end
@@ -39,7 +39,7 @@ describe VMC::User::Passwd do
39
39
  stub(client).logged_in? { true }
40
40
  stub(client).current_user { user }
41
41
  stub(client).register
42
- stub(client).password_score(new_password) { score }
42
+ stub(client).base.stub!.password_score(new_password) { score }
43
43
  end
44
44
 
45
45
  subject { vmc %W[passwd --password #{old_password} --new-password #{new_password} --verify #{verify_password} --no-force --debug] }
@@ -37,7 +37,7 @@ describe VMC::User::Register do
37
37
  stub(cli).precondition { nil }
38
38
  end
39
39
  stub(client).register
40
- stub(client).password_score(password) { score }
40
+ stub(client).base.stub!.password_score(password) { score }
41
41
  end
42
42
 
43
43
  subject { vmc %W[register --email #{email} --password #{password} --verify #{verify_password} --#{bool_flag(:login)} --#{bool_flag(:force)}] }
data/spec/vmc/cli_spec.rb CHANGED
@@ -1,17 +1,10 @@
1
1
  require 'spec_helper'
2
2
 
3
- class NoWrapErrorsDummy < VMC::CLI
4
- def wrap_errors
5
- yield
6
- end
7
- end
8
-
9
3
  describe VMC::CLI do
10
- let(:context) { NoWrapErrorsDummy.new }
4
+ let(:context) { VMC::CLI.new }
11
5
  let(:command) { nil }
12
6
 
13
7
  describe "#wrap_errors" do
14
- let(:context) { VMC::CLI.new }
15
8
  let(:inputs) { {} }
16
9
 
17
10
  subject do
@@ -21,33 +14,6 @@ describe VMC::CLI do
21
14
  end
22
15
  end
23
16
 
24
- shared_examples_for "an error that's obvious to the user" do |options|
25
- message = options[:with_message]
26
-
27
- it "prints the message" do
28
- subject
29
- expect(stderr.string).to include message
30
- end
31
-
32
- it "sets the exit code to 1" do
33
- mock(context).exit_status(1)
34
- subject
35
- end
36
-
37
- it "does not mention ~/.vmc/crash" do
38
- subject
39
- expect(stderr.string).to_not include VMC::CRASH_FILE
40
- end
41
- end
42
-
43
- shared_examples_for "an error that gets passed through" do |options|
44
- exception = options[:with_exception]
45
-
46
- it "reraises the error" do
47
- expect { subject }.to raise_error(exception)
48
- end
49
- end
50
-
51
17
  context "with a CFoundry::Timeout" do
52
18
  let(:action) { proc { raise CFoundry::Timeout.new(123, "fizzbuzz") } }
53
19
 
@@ -177,7 +143,7 @@ describe VMC::CLI do
177
143
  let(:auth_token) { CFoundry::AuthToken.new("old-header") }
178
144
  let(:new_auth_token) { CFoundry::AuthToken.new("new-header") }
179
145
 
180
- class TokenRefreshDummy < NoWrapErrorsDummy
146
+ class TokenRefreshDummy < VMC::CLI
181
147
  class << self
182
148
  attr_accessor :new_token
183
149
  end
@@ -443,6 +409,42 @@ describe VMC::CLI do
443
409
  expect(context.client).to eq(nil)
444
410
  end
445
411
  end
412
+
413
+ context "with a v1 cloud controller" do
414
+ before do
415
+ stub(context).target_info { { :version => 1} }
416
+ end
417
+
418
+ it "connects using the v1 api" do
419
+ expect(context.client).to be_a(CFoundry::V1::Client)
420
+ end
421
+
422
+ context "with a proxy user" do
423
+ before { stub(context).input { {:proxy => 'foo@example.com'} } }
424
+
425
+ it "uses the provided client proxy user" do
426
+ expect(context.client.proxy).to eq('foo@example.com')
427
+ end
428
+ end
429
+ end
430
+
431
+ context "with a v2 cloud controller" do
432
+ before do
433
+ stub(context).target_info { { :version => 2} }
434
+ end
435
+
436
+ it "connects using the v2 api" do
437
+ expect(context.client).to be_a(CFoundry::V2::Client)
438
+ end
439
+
440
+ context "with a proxy user" do
441
+ before { stub(context).input { {:proxy => 'foo@example.com'} } }
442
+
443
+ it "foo" do
444
+ expect {context.client}.to raise_error(VMC::UserError, "User switching not implemented for v2.")
445
+ end
446
+ end
447
+ end
446
448
  end
447
449
  end
448
450
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: -237385856
4
+ hash: -31870830
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
9
  - 0
10
10
  - rc
11
- - 1
12
- version: 0.5.0.rc1
11
+ - 2
12
+ version: 0.5.0.rc2
13
13
  platform: ruby
14
14
  authors:
15
15
  - Cloud Foundry Team
@@ -18,11 +18,9 @@ autorequire:
18
18
  bindir: bin
19
19
  cert_chain: []
20
20
 
21
- date: 2013-02-21 00:00:00 Z
21
+ date: 2013-02-28 00:00:00 Z
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
24
- prerelease: false
25
- name: json_pure
26
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
27
25
  none: false
28
26
  requirements:
@@ -33,11 +31,11 @@ dependencies:
33
31
  - 1
34
32
  - 6
35
33
  version: "1.6"
34
+ prerelease: false
36
35
  type: :runtime
36
+ name: json_pure
37
37
  requirement: *id001
38
38
  - !ruby/object:Gem::Dependency
39
- prerelease: false
40
- name: multi_json
41
39
  version_requirements: &id002 !ruby/object:Gem::Requirement
42
40
  none: false
43
41
  requirements:
@@ -48,11 +46,11 @@ dependencies:
48
46
  - 1
49
47
  - 3
50
48
  version: "1.3"
49
+ prerelease: false
51
50
  type: :runtime
51
+ name: multi_json
52
52
  requirement: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- prerelease: false
55
- name: interact
56
54
  version_requirements: &id003 !ruby/object:Gem::Requirement
57
55
  none: false
58
56
  requirements:
@@ -63,24 +61,24 @@ dependencies:
63
61
  - 0
64
62
  - 5
65
63
  version: "0.5"
64
+ prerelease: false
66
65
  type: :runtime
66
+ name: interact
67
67
  requirement: *id003
68
68
  - !ruby/object:Gem::Dependency
69
- prerelease: false
70
- name: cfoundry
71
69
  version_requirements: &id004 !ruby/object:Gem::Requirement
72
70
  none: false
73
71
  requirements:
74
72
  - - ">="
75
73
  - !ruby/object:Gem::Version
76
- hash: -237385842
74
+ hash: -31870828
77
75
  segments:
78
76
  - 0
79
77
  - 5
80
78
  - 1
81
79
  - rc
82
- - 2
83
- version: 0.5.1.rc2
80
+ - 5
81
+ version: 0.5.1.rc5
84
82
  - - <
85
83
  - !ruby/object:Gem::Version
86
84
  hash: 7
@@ -88,11 +86,11 @@ dependencies:
88
86
  - 0
89
87
  - 6
90
88
  version: "0.6"
89
+ prerelease: false
91
90
  type: :runtime
91
+ name: cfoundry
92
92
  requirement: *id004
93
93
  - !ruby/object:Gem::Dependency
94
- prerelease: false
95
- name: clouseau
96
94
  version_requirements: &id005 !ruby/object:Gem::Requirement
97
95
  none: false
98
96
  requirements:
@@ -103,11 +101,11 @@ dependencies:
103
101
  - 0
104
102
  - 0
105
103
  version: "0.0"
104
+ prerelease: false
106
105
  type: :runtime
106
+ name: clouseau
107
107
  requirement: *id005
108
108
  - !ruby/object:Gem::Dependency
109
- prerelease: false
110
- name: mothership
111
109
  version_requirements: &id006 !ruby/object:Gem::Requirement
112
110
  none: false
113
111
  requirements:
@@ -126,11 +124,11 @@ dependencies:
126
124
  - 1
127
125
  - 0
128
126
  version: "1.0"
127
+ prerelease: false
129
128
  type: :runtime
129
+ name: mothership
130
130
  requirement: *id006
131
131
  - !ruby/object:Gem::Dependency
132
- prerelease: false
133
- name: manifests-vmc-plugin
134
132
  version_requirements: &id007 !ruby/object:Gem::Requirement
135
133
  none: false
136
134
  requirements:
@@ -141,11 +139,11 @@ dependencies:
141
139
  - 0
142
140
  - 6
143
141
  version: "0.6"
142
+ prerelease: false
144
143
  type: :runtime
144
+ name: manifests-vmc-plugin
145
145
  requirement: *id007
146
146
  - !ruby/object:Gem::Dependency
147
- prerelease: false
148
- name: tunnel-vmc-plugin
149
147
  version_requirements: &id008 !ruby/object:Gem::Requirement
150
148
  none: false
151
149
  requirements:
@@ -156,11 +154,11 @@ dependencies:
156
154
  - 0
157
155
  - 2
158
156
  version: "0.2"
157
+ prerelease: false
159
158
  type: :runtime
159
+ name: tunnel-vmc-plugin
160
160
  requirement: *id008
161
161
  - !ruby/object:Gem::Dependency
162
- prerelease: false
163
- name: rake
164
162
  version_requirements: &id009 !ruby/object:Gem::Requirement
165
163
  none: false
166
164
  requirements:
@@ -171,11 +169,11 @@ dependencies:
171
169
  - 0
172
170
  - 9
173
171
  version: "0.9"
172
+ prerelease: false
174
173
  type: :development
174
+ name: rake
175
175
  requirement: *id009
176
176
  - !ruby/object:Gem::Dependency
177
- prerelease: false
178
- name: rspec
179
177
  version_requirements: &id010 !ruby/object:Gem::Requirement
180
178
  none: false
181
179
  requirements:
@@ -186,11 +184,11 @@ dependencies:
186
184
  - 2
187
185
  - 11
188
186
  version: "2.11"
187
+ prerelease: false
189
188
  type: :development
189
+ name: rspec
190
190
  requirement: *id010
191
191
  - !ruby/object:Gem::Dependency
192
- prerelease: false
193
- name: webmock
194
192
  version_requirements: &id011 !ruby/object:Gem::Requirement
195
193
  none: false
196
194
  requirements:
@@ -201,11 +199,11 @@ dependencies:
201
199
  - 1
202
200
  - 9
203
201
  version: "1.9"
202
+ prerelease: false
204
203
  type: :development
204
+ name: webmock
205
205
  requirement: *id011
206
206
  - !ruby/object:Gem::Dependency
207
- prerelease: false
208
- name: rr
209
207
  version_requirements: &id012 !ruby/object:Gem::Requirement
210
208
  none: false
211
209
  requirements:
@@ -216,7 +214,9 @@ dependencies:
216
214
  - 1
217
215
  - 0
218
216
  version: "1.0"
217
+ prerelease: false
219
218
  type: :development
219
+ name: rr
220
220
  requirement: *id012
221
221
  description:
222
222
  email:
@@ -281,7 +281,7 @@ files:
281
281
  - lib/vmc/cli/space/rename.rb
282
282
  - lib/vmc/cli/space/space.rb
283
283
  - lib/vmc/cli/space/spaces.rb
284
- - lib/vmc/cli/space/take.rb
284
+ - lib/vmc/cli/space/switch.rb
285
285
  - lib/vmc/cli/start/base.rb
286
286
  - lib/vmc/cli/start/colors.rb
287
287
  - lib/vmc/cli/start/info.rb
@@ -303,23 +303,29 @@ files:
303
303
  - lib/vmc/plugin.rb
304
304
  - lib/vmc/spacing.rb
305
305
  - lib/vmc/spec_helper.rb
306
- - lib/vmc/test_support/command_helper.rb
307
- - lib/vmc/test_support/common_input_examples.rb
308
- - lib/vmc/test_support/fake_home_dir.rb
309
- - lib/vmc/test_support/interact_helper.rb
310
306
  - lib/vmc/test_support.rb
311
307
  - lib/vmc/version.rb
312
308
  - lib/vmc.rb
313
309
  - spec/assets/hello-sinatra/Gemfile
310
+ - spec/assets/hello-sinatra/Gemfile.lock
314
311
  - spec/assets/hello-sinatra/main.rb
315
312
  - spec/assets/specker_runner/specker_runner_input.rb
316
313
  - spec/assets/specker_runner/specker_runner_pause.rb
317
314
  - spec/console_app_specker/console_app_specker_matchers_spec.rb
318
315
  - spec/console_app_specker/specker_runner_spec.rb
319
- - spec/features/new_user_flow_spec.rb
316
+ - spec/features/v1/new_user_flow_spec.rb
317
+ - spec/features/v2/account_lifecycle_spec.rb
318
+ - spec/features/v2/push_flow_spec.rb
320
319
  - spec/spec_helper.rb
320
+ - spec/support/command_helper.rb
321
+ - spec/support/config_helper.rb
321
322
  - spec/support/console_app_specker_matchers.rb
323
+ - spec/support/fake_home_dir.rb
324
+ - spec/support/interact_helper.rb
325
+ - spec/support/shared_examples/errors.rb
326
+ - spec/support/shared_examples/input.rb
322
327
  - spec/support/specker_runner.rb
328
+ - spec/support/tracking_expector.rb
323
329
  - spec/vmc/cli/app/base_spec.rb
324
330
  - spec/vmc/cli/app/delete_spec.rb
325
331
  - spec/vmc/cli/app/instances_spec.rb
@@ -327,6 +333,7 @@ files:
327
333
  - spec/vmc/cli/app/push_spec.rb
328
334
  - spec/vmc/cli/app/rename_spec.rb
329
335
  - spec/vmc/cli/app/scale_spec.rb
336
+ - spec/vmc/cli/app/start_spec.rb
330
337
  - spec/vmc/cli/app/stats_spec.rb
331
338
  - spec/vmc/cli/domain/map_spec.rb
332
339
  - spec/vmc/cli/domain/unmap_spec.rb
@@ -339,12 +346,16 @@ files:
339
346
  - spec/vmc/cli/service/rename_spec.rb
340
347
  - spec/vmc/cli/service/service_spec.rb
341
348
  - spec/vmc/cli/service/unbind_spec.rb
349
+ - spec/vmc/cli/space/create_spec.rb
342
350
  - spec/vmc/cli/space/rename_spec.rb
343
351
  - spec/vmc/cli/space/spaces_spec.rb
352
+ - spec/vmc/cli/space/switch_space_spec.rb
344
353
  - spec/vmc/cli/start/info_spec.rb
345
354
  - spec/vmc/cli/start/login_spec.rb
346
355
  - spec/vmc/cli/start/logout_spec.rb
356
+ - spec/vmc/cli/start/target_spec.rb
347
357
  - spec/vmc/cli/user/create_spec.rb
358
+ - spec/vmc/cli/user/delete_spec.rb
348
359
  - spec/vmc/cli/user/passwd_spec.rb
349
360
  - spec/vmc/cli/user/register_spec.rb
350
361
  - spec/vmc/cli_spec.rb
@@ -381,21 +392,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
381
392
  requirements: []
382
393
 
383
394
  rubyforge_project: vmc
384
- rubygems_version: 1.8.25
395
+ rubygems_version: 1.8.24
385
396
  signing_key:
386
397
  specification_version: 3
387
398
  summary: Friendly command-line interface for Cloud Foundry.
388
399
  test_files:
389
400
  - spec/assets/hello-sinatra/Gemfile
401
+ - spec/assets/hello-sinatra/Gemfile.lock
390
402
  - spec/assets/hello-sinatra/main.rb
391
403
  - spec/assets/specker_runner/specker_runner_input.rb
392
404
  - spec/assets/specker_runner/specker_runner_pause.rb
393
405
  - spec/console_app_specker/console_app_specker_matchers_spec.rb
394
406
  - spec/console_app_specker/specker_runner_spec.rb
395
- - spec/features/new_user_flow_spec.rb
407
+ - spec/features/v1/new_user_flow_spec.rb
408
+ - spec/features/v2/account_lifecycle_spec.rb
409
+ - spec/features/v2/push_flow_spec.rb
396
410
  - spec/spec_helper.rb
411
+ - spec/support/command_helper.rb
412
+ - spec/support/config_helper.rb
397
413
  - spec/support/console_app_specker_matchers.rb
414
+ - spec/support/fake_home_dir.rb
415
+ - spec/support/interact_helper.rb
416
+ - spec/support/shared_examples/errors.rb
417
+ - spec/support/shared_examples/input.rb
398
418
  - spec/support/specker_runner.rb
419
+ - spec/support/tracking_expector.rb
399
420
  - spec/vmc/cli/app/base_spec.rb
400
421
  - spec/vmc/cli/app/delete_spec.rb
401
422
  - spec/vmc/cli/app/instances_spec.rb
@@ -403,6 +424,7 @@ test_files:
403
424
  - spec/vmc/cli/app/push_spec.rb
404
425
  - spec/vmc/cli/app/rename_spec.rb
405
426
  - spec/vmc/cli/app/scale_spec.rb
427
+ - spec/vmc/cli/app/start_spec.rb
406
428
  - spec/vmc/cli/app/stats_spec.rb
407
429
  - spec/vmc/cli/domain/map_spec.rb
408
430
  - spec/vmc/cli/domain/unmap_spec.rb
@@ -415,12 +437,16 @@ test_files:
415
437
  - spec/vmc/cli/service/rename_spec.rb
416
438
  - spec/vmc/cli/service/service_spec.rb
417
439
  - spec/vmc/cli/service/unbind_spec.rb
440
+ - spec/vmc/cli/space/create_spec.rb
418
441
  - spec/vmc/cli/space/rename_spec.rb
419
442
  - spec/vmc/cli/space/spaces_spec.rb
443
+ - spec/vmc/cli/space/switch_space_spec.rb
420
444
  - spec/vmc/cli/start/info_spec.rb
421
445
  - spec/vmc/cli/start/login_spec.rb
422
446
  - spec/vmc/cli/start/logout_spec.rb
447
+ - spec/vmc/cli/start/target_spec.rb
423
448
  - spec/vmc/cli/user/create_spec.rb
449
+ - spec/vmc/cli/user/delete_spec.rb
424
450
  - spec/vmc/cli/user/passwd_spec.rb
425
451
  - spec/vmc/cli/user/register_spec.rb
426
452
  - spec/vmc/cli_spec.rb