cf 1.1.3.rc1 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/lib/cf/cli.rb +2 -7
  2. data/lib/cf/cli/organization/delete.rb +4 -6
  3. data/lib/cf/cli/service/create.rb +23 -17
  4. data/lib/cf/cli/space/create.rb +43 -41
  5. data/lib/cf/cli/space/space.rb +49 -46
  6. data/lib/cf/version.rb +1 -1
  7. data/lib/console/console.rb +1 -1
  8. data/spec/cf/cli/app/delete_spec.rb +16 -28
  9. data/spec/cf/cli/app/instances_spec.rb +4 -5
  10. data/spec/cf/cli/app/push/create_spec.rb +362 -373
  11. data/spec/cf/cli/app/push_spec.rb +216 -215
  12. data/spec/cf/cli/app/rename_spec.rb +28 -31
  13. data/spec/cf/cli/app/scale_spec.rb +44 -41
  14. data/spec/cf/cli/app/start_spec.rb +194 -193
  15. data/spec/cf/cli/app/stats_spec.rb +55 -56
  16. data/spec/cf/cli/domain/map_spec.rb +105 -102
  17. data/spec/cf/cli/domain/unmap_spec.rb +60 -56
  18. data/spec/cf/cli/organization/delete_spec.rb +85 -84
  19. data/spec/cf/cli/organization/orgs_spec.rb +80 -83
  20. data/spec/cf/cli/organization/rename_spec.rb +90 -89
  21. data/spec/cf/cli/populators/organization_spec.rb +117 -119
  22. data/spec/cf/cli/populators/space_spec.rb +107 -108
  23. data/spec/cf/cli/populators/target_spec.rb +17 -12
  24. data/spec/cf/cli/route/delete_spec.rb +4 -4
  25. data/spec/cf/cli/route/map_spec.rb +106 -102
  26. data/spec/cf/cli/route/unmap_spec.rb +5 -5
  27. data/spec/cf/cli/service/create_spec.rb +74 -46
  28. data/spec/cf/cli/service/rename_spec.rb +29 -33
  29. data/spec/cf/cli/service/services_spec.rb +48 -48
  30. data/spec/cf/cli/space/base_spec.rb +39 -32
  31. data/spec/cf/cli/space/create_spec.rb +52 -53
  32. data/spec/cf/cli/space/delete_spec.rb +84 -85
  33. data/spec/cf/cli/space/rename_spec.rb +93 -94
  34. data/spec/cf/cli/space/space_spec.rb +60 -60
  35. data/spec/cf/cli/space/spaces_spec.rb +75 -80
  36. data/spec/cf/cli/space/switch_space_spec.rb +45 -48
  37. data/spec/cf/cli/start/info_spec.rb +4 -6
  38. data/spec/cf/cli/start/login_spec.rb +18 -20
  39. data/spec/cf/cli/start/logout_spec.rb +36 -37
  40. data/spec/cf/cli/start/target_spec.rb +86 -89
  41. data/spec/cf/cli/user/create_spec.rb +83 -84
  42. data/spec/cf/cli/user/passwd_spec.rb +87 -86
  43. data/spec/cf/cli/user/register_spec.rb +109 -108
  44. data/spec/cf/cli_spec.rb +305 -310
  45. data/spec/console/console_spec.rb +58 -58
  46. data/spec/factories/cfoundry/v2/domain_factory.rb +8 -0
  47. data/spec/factories/cfoundry/v2/route_factory.rb +8 -0
  48. data/spec/factories/cfoundry/v2/user_factory.rb +7 -0
  49. data/spec/features/org_spec.rb +11 -11
  50. data/spec/manifests/manifests_spec.rb +21 -21
  51. data/spec/manifests/plugin_spec.rb +34 -34
  52. data/spec/spec_helper.rb +1 -2
  53. data/spec/support/cli_helper.rb +5 -14
  54. data/spec/support/factory_girl.rb +6 -0
  55. data/spec/support/interact_helper.rb +5 -15
  56. data/spec/support/shared_examples/errors.rb +1 -1
  57. data/spec/tunnel/plugin_spec.rb +2 -2
  58. data/spec/tunnel/tunnel_spec.rb +5 -5
  59. metadata +36 -28
@@ -1,121 +1,118 @@
1
1
  require "spec_helper"
2
- require "webmock/rspec"
3
2
 
4
- describe CF::Start::Target do
5
- before do
6
- stub_client_and_precondition
7
- end
8
-
9
- let(:client) { fake_client :apps => [app] }
10
- let(:app) { fake :app }
3
+ module CF
4
+ module Start
5
+ describe Target do
6
+ before do
7
+ stub_client_and_precondition
8
+ end
11
9
 
12
- describe "metadata" do
13
- let(:command) { Mothership.commands[:target] }
10
+ let(:client) { fake_client :apps => [app] }
11
+ let(:app) { fake :app }
14
12
 
15
- describe "command" do
16
- subject { command }
17
- its(:description) { should eq "Set or display the target cloud, organization, and space" }
18
- specify { expect(Mothership::Help.group(:start)).to include(subject) }
19
- end
13
+ describe "metadata" do
14
+ let(:command) { Mothership.commands[:target] }
20
15
 
21
- include_examples "inputs must have descriptions"
16
+ describe "command" do
17
+ subject { command }
18
+ its(:description) { should eq "Set or display the target cloud, organization, and space" }
19
+ specify { expect(Mothership::Help.group(:start)).to include(subject) }
20
+ end
22
21
 
23
- describe "flags" do
24
- subject { command.flags }
22
+ include_examples "inputs must have descriptions"
25
23
 
26
- its(["-o"]) { should eq :organization }
27
- its(["--org"]) { should eq :organization }
28
- its(["-s"]) { should eq :space }
29
- end
24
+ describe "flags" do
25
+ subject { command.flags }
30
26
 
31
- describe "arguments" do
32
- subject(:arguments) { command.arguments }
33
- it "have the correct commands" do
34
- expect(arguments).to eq [{:type => :optional, :value => nil, :name => :url}]
35
- end
36
- end
37
- end
38
-
39
- describe "running the command" do
40
- stub_home_dir_with { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
41
-
42
- context "when the user is authenticated and has an organization" do
43
- let(:user) { stub! }
44
- let(:organization) { fake(:organization, :name => "My Org", :guid => "organization-id-1", :users => [user], :spaces => [space]) }
45
- let(:space) { fake(:space, :name => "Staging", :guid => "space-id-2", :developers => [user]) }
46
- let(:client) { fake_client :organizations => [organization], :token => CFoundry::AuthToken.new("bearer some-access-token") }
27
+ its(["-o"]) { should eq :organization }
28
+ its(["--org"]) { should eq :organization }
29
+ its(["-s"]) { should eq :space }
30
+ end
47
31
 
48
- before do
49
- stub(client).current_user { user }
50
- stub(client).organization { organization }
51
- stub(client).current_organization { organization }
52
- any_instance_of(described_class) do |instance|
53
- stub(instance).client { client }
32
+ describe "arguments" do
33
+ subject(:arguments) { command.arguments }
34
+ it "have the correct commands" do
35
+ expect(arguments).to eq [{:type => :optional, :value => nil, :name => :url}]
36
+ end
54
37
  end
55
38
  end
56
39
 
57
- describe "switching the target" do
58
- let(:target) { "some-valid-target.com" }
59
- subject { cf ["target", target] }
40
+ describe "running the command" do
41
+ stub_home_dir_with { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
60
42
 
61
- context "when the target is not valid" do
62
- before { WebMock.stub_request(:get, "http://#{target}/info").to_return(:body => "{}") }
43
+ context "when the user is authenticated and has an organization" do
44
+ let(:user) { fake(:user) }
45
+ let(:organization) { fake(:organization, :name => "My Org", :guid => "organization-id-1", :users => [user], :spaces => [space]) }
46
+ let(:space) { fake(:space, :name => "Staging", :guid => "space-id-2", :developers => [user]) }
47
+ let(:client) { fake_client :organizations => [organization], :token => CFoundry::AuthToken.new("bearer some-access-token") }
63
48
 
64
- it "should still be able to switch to a valid target after that" do
65
- subject
49
+ before do
50
+ client.stub(:current_user) { user }
51
+ client.stub(:organization) { organization }
52
+ client.stub(:current_organization) { organization }
53
+ described_class.any_instance.stub(:client) { client }
66
54
  end
67
- end
68
55
 
69
- context "when the target is valid but the connection is refused" do
70
- it "shows a pretty error message" do
71
- any_instance_of(CFoundry::V2::Client) do |cli|
72
- stub(cli).info { raise CFoundry::TargetRefused, "foo" }
56
+ describe "switching the target" do
57
+ let(:target) { "some-valid-target.com" }
58
+ subject { cf ["target", target] }
59
+
60
+ context "when the target is not valid" do
61
+ before { WebMock.stub_request(:get, "http://#{target}/info").to_return(:body => "{}") }
62
+
63
+ it "should still be able to switch to a valid target after that" do
64
+ subject
65
+ end
73
66
  end
74
67
 
75
- subject
76
- expect(error_output).to say("Target refused connection.")
77
- end
78
- end
68
+ context "when the target is valid but the connection is refused" do
69
+ it "shows a pretty error message" do
70
+ CFoundry::V2::Client.any_instance.stub(:info) { raise CFoundry::TargetRefused, "foo" }
79
71
 
80
- context "when the uri is malformed" do
81
- it "shows a pretty error message" do
82
- any_instance_of(CFoundry::V2::Client) do |cli|
83
- stub(cli).info { raise CFoundry::InvalidTarget.new(target) }
72
+ subject
73
+ expect(error_output).to say("Target refused connection.")
74
+ end
84
75
  end
85
76
 
86
- subject
87
- expect(error_output).to say("Invalid target URI.")
77
+ context "when the uri is malformed" do
78
+ it "shows a pretty error message" do
79
+ CFoundry::V2::Client.any_instance.stub(:info) { raise CFoundry::InvalidTarget.new(target) }
80
+
81
+ subject
82
+ expect(error_output).to say("Invalid target URI.")
83
+ end
84
+ end
88
85
  end
89
- end
90
- end
91
86
 
92
- describe "switching the space" do
93
- def run_command
94
- cf %W[target -s #{space.name}]
95
- end
87
+ describe "switching the space" do
88
+ def run_command
89
+ cf %W[target -s #{space.name}]
90
+ end
96
91
 
97
- it "calls use a PopulateTarget to ensure that an organization and space is set" do
98
- mock(CF::Populators::Target).new(is_a(Mothership::Inputs)) { mock!.populate_and_save! }
99
- run_command
100
- end
92
+ it "calls use a PopulateTarget to ensure that an organization and space is set" do
93
+ CF::Populators::Target.should_receive(:new) { double(:target, :populate_and_save! => true) }
94
+ run_command
95
+ end
101
96
 
102
- it "prints out the space from the updated client" do
103
- any_instance_of(CF::Populators::Target, :populate_and_save! => true)
104
- stub(client).current_space { space }
97
+ it "prints out the space from the updated client" do
98
+ CF::Populators::Target.any_instance.stub(:populate_and_save!) { true }
99
+ client.stub(:current_space) { space }
105
100
 
106
- run_command
107
- expect(output).to say("space: #{space.name}")
101
+ run_command
102
+ expect(output).to say("space: #{space.name}")
103
+ end
104
+ end
108
105
  end
109
- end
110
- end
111
106
 
112
- context "when client is nil" do
113
- let(:client) { nil }
114
- subject { cf ["target"] }
107
+ context "when client is nil" do
108
+ let(:client) { nil }
109
+ subject { cf ["target"] }
115
110
 
116
- it 'prints an error' do
117
- subject
118
- expect(error_output).to say("No target has been specified.")
111
+ it 'prints an error' do
112
+ subject
113
+ expect(error_output).to say("No target has been specified.")
114
+ end
115
+ end
119
116
  end
120
117
  end
121
118
  end
@@ -1,99 +1,98 @@
1
- require 'spec_helper'
2
-
3
- describe CF::User::Create do
4
- describe 'metadata' do
5
- let(:command) { Mothership.commands[:create_user] }
6
-
7
- describe 'command' do
8
- subject { command }
9
- its(:description) { should eq "Create a user" }
10
- it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
11
- end
12
-
13
- include_examples 'inputs must have descriptions'
14
-
15
- describe 'arguments' do
16
- subject { command.arguments }
17
- it 'has the correct argument order' do
18
- should eq([
19
- { :type => :optional, :value => nil, :name => :email }
20
- ])
21
- end
22
- end
23
- end
24
-
25
- describe "running the command" do
26
- let(:client) { fake_client }
27
- let(:org) { fake(:organization) }
28
- let(:user) { fake(:user) }
29
-
30
- before do
31
- any_instance_of(described_class) { |cli| stub(cli).client { client } }
32
- stub(client).register
33
- end
34
-
35
- subject { cf %W[create-user --#{bool_flag(:force)}] }
36
-
37
- context "when the user is not logged in" do
38
- let(:force) { true }
39
-
40
- before do
41
- stub(client).logged_in? { false }
42
- end
43
-
44
- it "tells the user to log in" do
45
- subject
46
- expect(stderr.string).to include("Please log in")
47
- end
48
- end
49
-
50
- context "when the user is logged in" do
51
- let(:force) { false }
52
- let(:confirmation) { "password1" }
53
-
54
- before do
55
- stub(client).logged_in? { true }
56
- stub_ask("Email") { "some-angry-dude@example.com" }
57
- stub_ask("Password", anything) { "password1" }
58
- stub_ask("Verify Password", anything) { confirmation }
59
- stub(CF::Populators::Organization).new(instance_of(Mothership::Inputs)) { stub!.populate_and_save! { org } }
1
+ require "spec_helper"
2
+
3
+ module CF
4
+ module User
5
+ describe Create do
6
+ describe "metadata" do
7
+ let(:command) { Mothership.commands[:create_user] }
8
+
9
+ describe "command" do
10
+ subject { command }
11
+ its(:description) { should eq "Create a user" }
12
+ it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
13
+ end
60
14
 
61
- stub(client).register("some-angry-dude@example.com", "password1") { user }
62
- stub(user).update!
63
- end
15
+ include_examples "inputs must have descriptions"
64
16
 
65
- it "ensures that an org is present" do
66
- mock(CF::Populators::Organization).new(instance_of(Mothership::Inputs)) { stub!.populate_and_save! { org } }
67
- subject
17
+ describe "arguments" do
18
+ subject { command.arguments }
19
+ it "has the correct argument order" do
20
+ should eq([
21
+ {:type => :optional, :value => nil, :name => :email}
22
+ ])
23
+ end
24
+ end
68
25
  end
69
26
 
70
- context "when the password does not match its confirmation" do
71
- let(:confirmation) { "wrong" }
27
+ describe "running the command" do
28
+ let(:client) { fake_client }
29
+ let(:org) { fake(:organization) }
30
+ let(:user) { fake(:user) }
72
31
 
73
- it "displays an error message" do
74
- subject
75
- expect(stderr.string).to include("Passwords don't match")
32
+ before do
33
+ stub_client
34
+ client.stub(:register)
76
35
  end
77
- end
78
36
 
79
- context "when the password matches its confirmation" do
80
- it "creates a user" do
81
- mock(client).register("some-angry-dude@example.com", "password1") { user }
82
- stub(user).update!
83
- subject
84
- end
37
+ subject { cf %W[create-user --#{bool_flag(:force)}] }
85
38
 
86
- it "adds the user to the current org" do
87
- stub(client).register(anything, anything) { user }
88
- mock(user).update!
39
+ context "when the user is not logged in" do
40
+ let(:force) { true }
89
41
 
90
- subject
42
+ before do
43
+ client.stub(:logged_in?) { false }
44
+ end
91
45
 
92
- user.organizations.should == [org]
93
- user.managed_organizations.should == [org]
94
- user.audited_organizations.should == [org]
46
+ it "tells the user to log in" do
47
+ subject
48
+ expect(stderr.string).to include("Please log in")
49
+ end
95
50
  end
96
51
 
52
+ context "when the user is logged in" do
53
+ let(:force) { false }
54
+ let(:confirmation) { "password1" }
55
+
56
+ before do
57
+ client.stub(:logged_in?) { true }
58
+ stub_ask("Email") { "some-angry-dude@example.com" }
59
+ stub_ask("Password", anything) { "password1" }
60
+ stub_ask("Verify Password", anything) { confirmation }
61
+
62
+ CF::Populators::Organization.stub(:new) { stub(:organization, :populate_and_save! => org) }
63
+ client.stub(:register).with("some-angry-dude@example.com", "password1") { user }
64
+ user.stub(:update!)
65
+ end
66
+
67
+ context "when the password does not match its confirmation" do
68
+ let(:confirmation) { "wrong" }
69
+
70
+ it "displays an error message" do
71
+ subject
72
+ expect(stderr.string).to include("Passwords don't match")
73
+ end
74
+ end
75
+
76
+ context "when the password matches its confirmation" do
77
+ it "creates a user" do
78
+ client.should_receive(:register).with("some-angry-dude@example.com", "password1") { user }
79
+ user.stub(:update!)
80
+ subject
81
+ end
82
+
83
+ it "adds the user to the current org" do
84
+ client.stub(:register).and_return(user)
85
+ user.should_receive(:update!)
86
+
87
+ subject
88
+
89
+ user.organizations.should == [org]
90
+ user.managed_organizations.should == [org]
91
+ user.audited_organizations.should == [org]
92
+ end
93
+
94
+ end
95
+ end
97
96
  end
98
97
  end
99
98
  end
@@ -1,94 +1,95 @@
1
- require 'spec_helper'
1
+ require "spec_helper"
2
2
 
3
- describe CF::User::Passwd do
4
- describe 'metadata' do
5
- let(:command) { Mothership.commands[:passwd] }
3
+ module CF
4
+ module User
5
+ describe Passwd do
6
+ describe "metadata" do
7
+ let(:command) { Mothership.commands[:passwd] }
6
8
 
7
- describe 'command' do
8
- subject { command }
9
- its(:description) { should eq "Update the current user's password" }
10
- it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
11
- end
12
-
13
- include_examples 'inputs must have descriptions'
14
- end
15
-
16
- describe '#passwd' do
17
- let(:client) { fake_client }
18
- let(:old_password) { "old" }
19
- let(:new_password) { "password" }
20
- let(:verify_password) { new_password }
21
- let(:score) { :strong }
22
- let(:guid) { random_string("my-object-guid") }
23
- let(:user_model) { fake_model { attribute :password, :object } }
24
- let(:user_object) { user_model.new(guid, client) }
25
- let(:user) { user_object.fake(:password => 'foo') }
26
-
27
- before do
28
- any_instance_of described_class do |cli|
29
- stub(cli).client { client }
30
- stub(cli).precondition { nil }
31
- end
32
- stub(client).logged_in? { true }
33
- stub(client).current_user { user }
34
- stub(client).register
35
- stub(client).base.stub!.password_score(new_password) { score }
36
- end
37
-
38
- subject { cf %W[passwd --password #{old_password} --new-password #{new_password} --verify #{verify_password} --no-force --debug] }
39
-
40
- context 'when the passwords dont match' do
41
- let(:verify_password) { "other_password" }
42
-
43
- it { should eq 1 }
44
-
45
- it 'fails' do
46
- subject
47
- expect(stderr.string).to include "Passwords do not match."
48
- end
49
-
50
- it "doesn't print out the score" do
51
- subject
52
- expect(stdout.string).not_to include "strength"
53
- end
54
-
55
- it "doesn't log in or register" do
56
- dont_allow(user).change_password!
57
- subject
58
- end
59
- end
60
-
61
- context 'when the password is good or strong' do
62
- before do
63
- stub(user).change_password!
64
- end
65
-
66
- it { should eq 0 }
67
-
68
- it 'prints out the password score' do
69
- subject
70
- expect(stdout.string).to include "Your password strength is: strong"
71
- end
72
-
73
- it 'changes the password' do
74
- mock(user).change_password!(new_password, old_password)
75
- subject
76
- end
77
- end
78
-
79
- context 'when the password is weak' do
80
- let(:score) { :weak }
81
-
82
- it { should eq 1 }
9
+ describe "command" do
10
+ subject { command }
11
+ its(:description) { should eq "Update the current user's password" }
12
+ it { expect(Mothership::Help.group(:admin, :user)).to include(subject) }
13
+ end
83
14
 
84
- it 'prints out the password score' do
85
- subject
86
- expect(stderr.string).to include "Your password strength is: weak"
15
+ include_examples "inputs must have descriptions"
87
16
  end
88
17
 
89
- it "doesn't change the password" do
90
- dont_allow(user).change_password!
91
- subject
18
+ describe "#passwd" do
19
+ let(:client) { fake_client }
20
+ let(:old_password) { "old" }
21
+ let(:new_password) { "password" }
22
+ let(:verify_password) { new_password }
23
+ let(:score) { :strong }
24
+ let(:guid) { random_string("my-object-guid") }
25
+ let(:user_model) { fake_model { attribute :password, :object } }
26
+ let(:user_object) { user_model.new(guid, client) }
27
+ let(:user) { user_object.fake(:password => "foo") }
28
+
29
+ before do
30
+ stub_client_and_precondition
31
+ client.stub(:logged_in?) { true }
32
+ client.stub(:current_user) { user }
33
+ client.stub(:register)
34
+ client.base.stub(:password_score).with(new_password).and_return(score)
35
+ end
36
+
37
+ subject { cf %W[passwd --password #{old_password} --new-password #{new_password} --verify #{verify_password} --no-force --debug] }
38
+
39
+ context "when the passwords dont match" do
40
+ let(:verify_password) { "other_password" }
41
+
42
+ it { should eq 1 }
43
+
44
+ it "fails" do
45
+ subject
46
+ expect(stderr.string).to include "Passwords do not match."
47
+ end
48
+
49
+ it "doesn't print out the score" do
50
+ subject
51
+ expect(stdout.string).not_to include "strength"
52
+ end
53
+
54
+ it "doesn't log in or register" do
55
+ user.should_not_receive(:change_password!)
56
+ subject
57
+ end
58
+ end
59
+
60
+ context "when the password is good or strong" do
61
+ before do
62
+ user.stub(:change_password!)
63
+ end
64
+
65
+ it { should eq 0 }
66
+
67
+ it "prints out the password score" do
68
+ subject
69
+ expect(stdout.string).to include "Your password strength is: strong"
70
+ end
71
+
72
+ it "changes the password" do
73
+ user.should_receive(:change_password!).with(new_password, old_password)
74
+ subject
75
+ end
76
+ end
77
+
78
+ context "when the password is weak" do
79
+ let(:score) { :weak }
80
+
81
+ it { should eq 1 }
82
+
83
+ it "prints out the password score" do
84
+ subject
85
+ expect(stderr.string).to include "Your password strength is: weak"
86
+ end
87
+
88
+ it "doesn't change the password" do
89
+ user.should_not_receive(:change_password!)
90
+ subject
91
+ end
92
+ end
92
93
  end
93
94
  end
94
95
  end