cf 0.1.5 → 0.6.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1277 -30
- data/Rakefile +12 -1
- data/bin/cf +0 -3
- data/lib/cf.rb +6 -0
- data/lib/cf/cli.rb +389 -190
- data/lib/cf/cli/app/app.rb +45 -0
- data/lib/cf/cli/app/apps.rb +99 -0
- data/lib/cf/cli/app/base.rb +90 -0
- data/lib/cf/cli/app/crashes.rb +42 -0
- data/lib/cf/cli/app/delete.rb +95 -0
- data/lib/cf/cli/app/deprecated.rb +11 -0
- data/lib/cf/cli/app/env.rb +78 -0
- data/lib/cf/cli/app/files.rb +137 -0
- data/lib/cf/cli/app/health.rb +26 -0
- data/lib/cf/cli/app/instances.rb +53 -0
- data/lib/cf/cli/app/logs.rb +76 -0
- data/lib/cf/cli/app/push.rb +105 -0
- data/lib/cf/cli/app/push/create.rb +149 -0
- data/lib/cf/cli/app/push/interactions.rb +94 -0
- data/lib/cf/cli/app/push/sync.rb +64 -0
- data/lib/cf/cli/app/rename.rb +35 -0
- data/lib/cf/cli/app/restart.rb +20 -0
- data/lib/cf/cli/app/scale.rb +69 -0
- data/lib/cf/cli/app/start.rb +143 -0
- data/lib/cf/cli/app/stats.rb +67 -0
- data/lib/cf/cli/app/stop.rb +27 -0
- data/lib/cf/cli/domain/base.rb +8 -0
- data/lib/cf/cli/domain/domains.rb +40 -0
- data/lib/cf/cli/domain/map.rb +55 -0
- data/lib/cf/cli/domain/unmap.rb +56 -0
- data/lib/cf/cli/help.rb +15 -0
- data/lib/cf/cli/interactive.rb +105 -0
- data/lib/cf/cli/organization/base.rb +12 -0
- data/lib/cf/cli/organization/create.rb +32 -0
- data/lib/cf/cli/organization/delete.rb +73 -0
- data/lib/cf/cli/organization/org.rb +45 -0
- data/lib/cf/cli/organization/orgs.rb +35 -0
- data/lib/cf/cli/organization/rename.rb +36 -0
- data/lib/cf/cli/route/base.rb +8 -0
- data/lib/cf/cli/route/map.rb +70 -0
- data/lib/cf/cli/route/routes.rb +26 -0
- data/lib/cf/cli/route/unmap.rb +62 -0
- data/lib/cf/cli/service/base.rb +8 -0
- data/lib/cf/cli/service/bind.rb +44 -0
- data/lib/cf/cli/service/create.rb +107 -0
- data/lib/cf/cli/service/delete.rb +82 -0
- data/lib/cf/cli/service/rename.rb +35 -0
- data/lib/cf/cli/service/service.rb +40 -0
- data/lib/cf/cli/service/services.rb +99 -0
- data/lib/cf/cli/service/unbind.rb +38 -0
- data/lib/cf/cli/space/base.rb +19 -0
- data/lib/cf/cli/space/create.rb +63 -0
- data/lib/cf/cli/space/delete.rb +95 -0
- data/lib/cf/cli/space/rename.rb +39 -0
- data/lib/cf/cli/space/space.rb +64 -0
- data/lib/cf/cli/space/spaces.rb +55 -0
- data/lib/cf/cli/space/switch.rb +16 -0
- data/lib/cf/cli/start/base.rb +93 -0
- data/lib/cf/cli/start/colors.rb +13 -0
- data/lib/cf/cli/start/info.rb +124 -0
- data/lib/cf/cli/start/login.rb +94 -0
- data/lib/cf/cli/start/logout.rb +17 -0
- data/lib/cf/cli/start/target.rb +69 -0
- data/lib/cf/cli/start/target_interactions.rb +37 -0
- data/lib/cf/cli/start/targets.rb +16 -0
- data/lib/cf/cli/user/base.rb +29 -0
- data/lib/cf/cli/user/create.rb +39 -0
- data/lib/cf/cli/user/passwd.rb +43 -0
- data/lib/cf/cli/user/register.rb +42 -0
- data/lib/cf/cli/user/users.rb +32 -0
- data/lib/cf/constants.rb +10 -7
- data/lib/cf/detect.rb +113 -48
- data/lib/cf/errors.rb +17 -0
- data/lib/cf/plugin.rb +28 -12
- data/lib/cf/spacing.rb +89 -0
- data/lib/cf/spec_helper.rb +1 -0
- data/lib/cf/test_support.rb +6 -0
- data/lib/cf/version.rb +1 -1
- data/spec/assets/hello-sinatra/Gemfile +3 -0
- data/spec/assets/hello-sinatra/Gemfile.lock +17 -0
- data/spec/assets/hello-sinatra/config.ru +3 -0
- data/spec/assets/hello-sinatra/fat-cat-makes-app-larger.png +0 -0
- data/spec/assets/hello-sinatra/main.rb +6 -0
- data/spec/assets/specker_runner/specker_runner_input.rb +6 -0
- data/spec/assets/specker_runner/specker_runner_pause.rb +5 -0
- data/spec/cf/cli/app/base_spec.rb +17 -0
- data/spec/cf/cli/app/delete_spec.rb +188 -0
- data/spec/cf/cli/app/instances_spec.rb +65 -0
- data/spec/cf/cli/app/push/create_spec.rb +661 -0
- data/spec/cf/cli/app/push_spec.rb +369 -0
- data/spec/cf/cli/app/rename_spec.rb +104 -0
- data/spec/cf/cli/app/scale_spec.rb +75 -0
- data/spec/cf/cli/app/start_spec.rb +208 -0
- data/spec/cf/cli/app/stats_spec.rb +68 -0
- data/spec/cf/cli/domain/map_spec.rb +130 -0
- data/spec/cf/cli/domain/unmap_spec.rb +69 -0
- data/spec/cf/cli/organization/orgs_spec.rb +108 -0
- data/spec/cf/cli/organization/rename_spec.rb +113 -0
- data/spec/cf/cli/route/map_spec.rb +121 -0
- data/spec/cf/cli/route/unmap_spec.rb +155 -0
- data/spec/cf/cli/service/bind_spec.rb +25 -0
- data/spec/cf/cli/service/delete_spec.rb +22 -0
- data/spec/cf/cli/service/rename_spec.rb +105 -0
- data/spec/cf/cli/service/service_spec.rb +23 -0
- data/spec/cf/cli/service/unbind_spec.rb +25 -0
- data/spec/cf/cli/space/create_spec.rb +93 -0
- data/spec/cf/cli/space/rename_spec.rb +102 -0
- data/spec/cf/cli/space/spaces_spec.rb +104 -0
- data/spec/cf/cli/space/switch_space_spec.rb +55 -0
- data/spec/cf/cli/start/info_spec.rb +160 -0
- data/spec/cf/cli/start/login_spec.rb +142 -0
- data/spec/cf/cli/start/logout_spec.rb +50 -0
- data/spec/cf/cli/start/target_spec.rb +123 -0
- data/spec/cf/cli/user/create_spec.rb +54 -0
- data/spec/cf/cli/user/passwd_spec.rb +102 -0
- data/spec/cf/cli/user/register_spec.rb +140 -0
- data/spec/cf/cli_spec.rb +442 -0
- data/spec/cf/detect_spec.rb +54 -0
- data/spec/console_app_specker/console_app_specker_matchers_spec.rb +173 -0
- data/spec/console_app_specker/specker_runner_spec.rb +167 -0
- data/spec/features/account_lifecycle_spec.rb +85 -0
- data/spec/features/login_spec.rb +66 -0
- data/spec/features/push_flow_spec.rb +125 -0
- data/spec/features/switching_targets_spec.rb +32 -0
- data/spec/spec_helper.rb +72 -0
- data/spec/support/command_helper.rb +81 -0
- data/spec/support/config_helper.rb +15 -0
- data/spec/support/console_app_specker_matchers.rb +86 -0
- data/spec/support/fake_home_dir.rb +55 -0
- data/spec/support/interact_helper.rb +29 -0
- data/spec/support/shared_examples/errors.rb +40 -0
- data/spec/support/shared_examples/input.rb +14 -0
- data/spec/support/specker_runner.rb +80 -0
- data/spec/support/tracking_expector.rb +71 -0
- metadata +427 -66
- data/lib/cf/cli/app.rb +0 -595
- data/lib/cf/cli/command.rb +0 -444
- data/lib/cf/cli/dots.rb +0 -133
- data/lib/cf/cli/service.rb +0 -112
- data/lib/cf/cli/user.rb +0 -71
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CF::Service::Bind do
|
4
|
+
describe 'metadata' do
|
5
|
+
let(:command) { Mothership.commands[:bind_service] }
|
6
|
+
|
7
|
+
describe 'command' do
|
8
|
+
subject { command }
|
9
|
+
its(:description) { should eq "Bind a service to an application" }
|
10
|
+
it { expect(Mothership::Help.group(:services, :manage)).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 => :service },
|
20
|
+
{ :type => :optional, :value => nil, :name => :app }
|
21
|
+
])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CF::Service::Delete do
|
4
|
+
describe 'metadata' do
|
5
|
+
let(:command) { Mothership.commands[:delete_service] }
|
6
|
+
|
7
|
+
describe 'command' do
|
8
|
+
subject { command }
|
9
|
+
its(:description) { should eq "Delete a service" }
|
10
|
+
it { expect(Mothership::Help.group(:services, :manage)).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([{:type => :optional, :value => nil, :name => :service }])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "cf/cli/service/rename"
|
3
|
+
|
4
|
+
describe CF::Service::Rename do
|
5
|
+
let(:global) { { :color => false, :quiet => true } }
|
6
|
+
let(:inputs) { {} }
|
7
|
+
let(:given) { {} }
|
8
|
+
let(:client) { fake_client }
|
9
|
+
let(:service) {}
|
10
|
+
let(:new_name) { "some-new-name" }
|
11
|
+
|
12
|
+
before do
|
13
|
+
any_instance_of(CF::CLI) do |cli|
|
14
|
+
stub(cli).client { client }
|
15
|
+
stub(cli).precondition { nil }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
subject { Mothership.new.invoke(:rename_service, inputs, given, global) }
|
20
|
+
|
21
|
+
describe 'metadata' do
|
22
|
+
let(:command) { Mothership.commands[:rename_service] }
|
23
|
+
|
24
|
+
describe 'command' do
|
25
|
+
subject { command }
|
26
|
+
its(:description) { should eq "Rename a service" }
|
27
|
+
it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
|
28
|
+
end
|
29
|
+
|
30
|
+
include_examples 'inputs must have descriptions'
|
31
|
+
|
32
|
+
describe 'arguments' do
|
33
|
+
subject { command.arguments }
|
34
|
+
it 'has the correct argument order' do
|
35
|
+
should eq([
|
36
|
+
{ :type => :optional, :value => nil, :name => :service },
|
37
|
+
{ :type => :optional, :value => nil, :name => :name }
|
38
|
+
])
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context 'when there are no services' do
|
44
|
+
context 'and a service is given' do
|
45
|
+
let(:given) { { :service => "some-service" } }
|
46
|
+
it { expect { subject }.to raise_error(CF::UserError, "Unknown service 'some-service'.") }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'and a service is not given' do
|
50
|
+
it { expect { subject }.to raise_error(CF::UserError, "No services.") }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when there are services' do
|
55
|
+
let(:client) { fake_client(:service_instances => services) }
|
56
|
+
let(:services) { fake_list(:service_instance, 2) }
|
57
|
+
let(:renamed_service) { services.first }
|
58
|
+
|
59
|
+
context 'when the defaults are used' do
|
60
|
+
it 'asks for the service and new name and renames' do
|
61
|
+
mock_ask("Rename which service?", anything) { renamed_service }
|
62
|
+
mock_ask("New name") { new_name }
|
63
|
+
mock(renamed_service).name=(new_name)
|
64
|
+
mock(renamed_service).update!
|
65
|
+
subject
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when no name is provided, but a service is' do
|
70
|
+
let(:given) { { :service => renamed_service.name } }
|
71
|
+
|
72
|
+
it 'asks for the new name and renames' do
|
73
|
+
dont_allow_ask("Rename which service?", anything)
|
74
|
+
mock_ask("New name") { new_name }
|
75
|
+
mock(renamed_service).name=(new_name)
|
76
|
+
mock(renamed_service).update!
|
77
|
+
subject
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context 'when a service is provided and a name' do
|
82
|
+
let(:inputs) { { :service => renamed_service, :name => new_name } }
|
83
|
+
|
84
|
+
it 'renames the service' do
|
85
|
+
mock(renamed_service).update!
|
86
|
+
subject
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'displays the progress' do
|
90
|
+
mock_with_progress("Renaming to #{new_name}")
|
91
|
+
mock(renamed_service).update!
|
92
|
+
|
93
|
+
subject
|
94
|
+
end
|
95
|
+
|
96
|
+
context 'and the name already exists' do
|
97
|
+
it 'fails' do
|
98
|
+
mock(renamed_service).update! { raise CFoundry::ServiceInstanceNameTaken.new("Taken", 200) }
|
99
|
+
expect { subject }.to raise_error(CFoundry::ServiceInstanceNameTaken)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CF::Service::Service do
|
4
|
+
describe 'metadata' do
|
5
|
+
let(:command) { Mothership.commands[:service] }
|
6
|
+
|
7
|
+
describe 'command' do
|
8
|
+
subject { command }
|
9
|
+
its(:description) { should eq "Show service information" }
|
10
|
+
it { expect(Mothership::Help.group(:services)).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([{:type => :required, :value=>nil, :name=>:service}])
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe CF::Service::Unbind do
|
4
|
+
describe 'metadata' do
|
5
|
+
let(:command) { Mothership.commands[:unbind_service] }
|
6
|
+
|
7
|
+
describe 'command' do
|
8
|
+
subject { command }
|
9
|
+
its(:description) { should eq "Unbind a service from an application" }
|
10
|
+
it { expect(Mothership::Help.group(:services, :manage)).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 => :service },
|
20
|
+
{ :type => :optional, :value => nil, :name => :app }
|
21
|
+
])
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "cf/cli/space/create"
|
3
|
+
|
4
|
+
command CF::Space::Create do
|
5
|
+
describe 'metadata' do
|
6
|
+
let(:command) { Mothership.commands[:create_space] }
|
7
|
+
|
8
|
+
describe 'command' do
|
9
|
+
subject { command }
|
10
|
+
its(:description) { should eq "Create a space in an organization" }
|
11
|
+
it { expect(Mothership::Help.group(:spaces)).to include(subject) }
|
12
|
+
end
|
13
|
+
|
14
|
+
include_examples 'inputs must have descriptions'
|
15
|
+
|
16
|
+
describe 'arguments' do
|
17
|
+
subject { command.arguments }
|
18
|
+
it 'has the correct argument order' do
|
19
|
+
should eq([
|
20
|
+
{ :type => :optional, :value => nil, :name => :name },
|
21
|
+
{ :type => :optional, :value => nil, :name => :organization }
|
22
|
+
])
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "running the command" do
|
28
|
+
let(:client) do
|
29
|
+
fake_client(:current_organization => organization)
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:organization) { fake(:organization) }
|
33
|
+
|
34
|
+
let(:new_space) { fake :space, :name => new_name }
|
35
|
+
let(:new_name) { "some-new-name" }
|
36
|
+
|
37
|
+
before do
|
38
|
+
stub(client).space { new_space }
|
39
|
+
stub(new_space).create!
|
40
|
+
stub(new_space).add_manager
|
41
|
+
stub(new_space).add_developer
|
42
|
+
stub(new_space).add_auditor
|
43
|
+
end
|
44
|
+
|
45
|
+
context "when --target is given" do
|
46
|
+
subject { cf %W[create-space #{new_space.name} --target] }
|
47
|
+
|
48
|
+
it "switches them to the new space" do
|
49
|
+
mock_invoke :target, :organization => organization,
|
50
|
+
:space => new_space
|
51
|
+
subject
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when --target is NOT given" do
|
56
|
+
subject { cf %W[create-space #{new_space.name}] }
|
57
|
+
|
58
|
+
it "tells the user how they can switch to the new space" do
|
59
|
+
subject
|
60
|
+
expect(output).to say("Space created! Use switch-space #{new_space.name} to target it.")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
context "when we don't specify an organization" do
|
65
|
+
subject { cf %W[create-space #{new_space.name}] }
|
66
|
+
|
67
|
+
context "when we have a default organization" do
|
68
|
+
it "uses that organization to create a space" do
|
69
|
+
subject
|
70
|
+
|
71
|
+
stdout.rewind
|
72
|
+
expect(stdout.readline).to include "Creating space"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "when we don't have a default organization" do
|
77
|
+
let(:organization) { nil }
|
78
|
+
|
79
|
+
it "shows the help for the command" do
|
80
|
+
subject
|
81
|
+
|
82
|
+
stdout.rewind
|
83
|
+
expect(stdout.readline).to include "Create a space in an organization"
|
84
|
+
end
|
85
|
+
|
86
|
+
it "does not try to create the space" do
|
87
|
+
new_space.create! { raise "should not call this method" } # rr not behaving
|
88
|
+
subject
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "cf/cli/space/rename"
|
3
|
+
|
4
|
+
describe CF::Space::Rename do
|
5
|
+
let(:spaces) { fake_list(:space, 3) }
|
6
|
+
let(:organization) { fake(:organization, :spaces => spaces) }
|
7
|
+
let(:client) { fake_client(:current_organization => organization, :spaces => spaces) }
|
8
|
+
let(:new_name) { "some-new-name" }
|
9
|
+
|
10
|
+
before do
|
11
|
+
any_instance_of described_class do |cli|
|
12
|
+
stub(cli).client { client }
|
13
|
+
stub(cli).precondition { nil }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe 'metadata' do
|
18
|
+
let(:command) { Mothership.commands[:rename_space] }
|
19
|
+
|
20
|
+
describe 'command' do
|
21
|
+
subject { command }
|
22
|
+
its(:description) { should eq "Rename a space" }
|
23
|
+
it { expect(Mothership::Help.group(:spaces)).to include(subject) }
|
24
|
+
end
|
25
|
+
|
26
|
+
include_examples 'inputs must have descriptions'
|
27
|
+
|
28
|
+
describe 'arguments' do
|
29
|
+
subject { command.arguments }
|
30
|
+
it 'has the correct argument order' do
|
31
|
+
should eq([
|
32
|
+
{ :type => :optional, :value => nil, :name => :space },
|
33
|
+
{ :type => :optional, :value => nil, :name => :name }
|
34
|
+
])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when there are no spaces' do
|
40
|
+
let(:spaces) { [] }
|
41
|
+
|
42
|
+
context 'and a space is given' do
|
43
|
+
subject { cf %W[rename-space --space some-invalid-space --no-force --no-quiet] }
|
44
|
+
it 'prints out an error message' do
|
45
|
+
subject
|
46
|
+
expect(stderr.string).to include "Unknown space 'some-invalid-space'."
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'and a space is not given' do
|
51
|
+
subject { cf %W[rename-space --no-force] }
|
52
|
+
it 'prints out an error message' do
|
53
|
+
subject
|
54
|
+
expect(stderr.string).to include "No spaces."
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'when there are spaces' do
|
60
|
+
let(:renamed_space) { spaces.first }
|
61
|
+
|
62
|
+
context 'when the defaults are used' do
|
63
|
+
subject { cf %W[rename-space --no-force --no-quiet] }
|
64
|
+
|
65
|
+
it 'asks for the space and new name and renames' do
|
66
|
+
mock_ask("Rename which space?", anything) { renamed_space }
|
67
|
+
mock_ask("New name") { new_name }
|
68
|
+
mock(renamed_space).name=(new_name)
|
69
|
+
mock(renamed_space).update!
|
70
|
+
subject
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when no name is provided, but a space is' do
|
75
|
+
subject { cf %W[rename-space --space #{renamed_space.name} --no-force] }
|
76
|
+
|
77
|
+
it 'asks for the new name and renames' do
|
78
|
+
dont_allow_ask("Rename which space?", anything)
|
79
|
+
mock_ask("New name") { new_name }
|
80
|
+
mock(renamed_space).name=(new_name)
|
81
|
+
mock(renamed_space).update!
|
82
|
+
subject
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
context 'when a space is provided and a name' do
|
87
|
+
subject { cf %W[rename-space --space #{renamed_space.name} --name #{new_name} --no-force] }
|
88
|
+
|
89
|
+
it 'renames the space' do
|
90
|
+
mock(renamed_space).update!
|
91
|
+
subject
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'displays the progress' do
|
95
|
+
mock_with_progress("Renaming to #{new_name}")
|
96
|
+
mock(renamed_space).update!
|
97
|
+
|
98
|
+
subject
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
describe CF::Space::Spaces do
|
5
|
+
let(:full) { false }
|
6
|
+
let!(:space_1) { fake(:space, :name => "bb_second", :apps => fake_list(:app, 2), :service_instances => [fake(:service_instance)]) }
|
7
|
+
let!(:space_2) { fake(:space, :name => "aa_first", :apps => [fake(:app)], :service_instances => fake_list(:service_instance, 3), :domains => [fake(:domain)]) }
|
8
|
+
let!(:space_3) { fake(:space, :name => "cc_last", :apps => fake_list(:app, 2), :service_instances => fake_list(:service_instance, 2), :domains => fake_list(:domain, 2)) }
|
9
|
+
let(:spaces) { [space_1, space_2, space_3]}
|
10
|
+
let(:organization) { fake(:organization, :spaces => spaces) }
|
11
|
+
let(:client) { fake_client(:spaces => spaces, :current_organization => organization) }
|
12
|
+
|
13
|
+
before do
|
14
|
+
any_instance_of described_class do |cli|
|
15
|
+
stub(cli).client { client }
|
16
|
+
stub(cli).precondition { nil }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe 'metadata' do
|
21
|
+
let(:command) { Mothership.commands[:spaces] }
|
22
|
+
|
23
|
+
describe 'command' do
|
24
|
+
subject { command }
|
25
|
+
its(:description) { should eq "List spaces in an organization" }
|
26
|
+
it { expect(Mothership::Help.group(:spaces)).to include(subject) }
|
27
|
+
end
|
28
|
+
|
29
|
+
include_examples 'inputs must have descriptions'
|
30
|
+
|
31
|
+
describe 'arguments' do
|
32
|
+
subject { command.arguments }
|
33
|
+
it 'has the correct argument order' do
|
34
|
+
should eq([{ :type => :optional, :value => nil, :name => :organization }])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
subject { cf %W[spaces --#{bool_flag(:full)} --no-quiet] }
|
40
|
+
|
41
|
+
it 'should have the correct first two lines' do
|
42
|
+
subject
|
43
|
+
|
44
|
+
stdout.rewind
|
45
|
+
expect(stdout.readline).to match /Getting spaces.*OK/
|
46
|
+
expect(stdout.readline).to eq "\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'when there are no spaces' do
|
50
|
+
let(:spaces) { [] }
|
51
|
+
|
52
|
+
context 'and the full flag is given' do
|
53
|
+
let(:full) { true }
|
54
|
+
|
55
|
+
it 'displays yaml-style output with all space details' do
|
56
|
+
any_instance_of CF::Space::Spaces do |spaces|
|
57
|
+
dont_allow(spaces).invoke
|
58
|
+
end
|
59
|
+
subject
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
context 'and the full flag is not given (default is false)' do
|
64
|
+
it 'should show only the progress' do
|
65
|
+
subject
|
66
|
+
|
67
|
+
stdout.rewind
|
68
|
+
expect(stdout.readline).to match /Getting spaces.*OK/
|
69
|
+
expect(stdout).to be_eof
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context 'when there are spaces' do
|
75
|
+
context 'and the full flag is given' do
|
76
|
+
let(:full) { true }
|
77
|
+
|
78
|
+
it 'displays yaml-style output with all space details' do
|
79
|
+
any_instance_of CF::Space::Spaces do |spaces|
|
80
|
+
mock(spaces).invoke(:space, :space => space_2, :full => true).ordered
|
81
|
+
mock(spaces).invoke(:space, :space => space_1, :full => true).ordered
|
82
|
+
mock(spaces).invoke(:space, :space => space_3, :full => true).ordered
|
83
|
+
end
|
84
|
+
subject
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'and the full flag is not given (default is false)' do
|
89
|
+
it 'displays tabular output with names, spaces and domains' do
|
90
|
+
subject
|
91
|
+
|
92
|
+
stdout.rewind
|
93
|
+
stdout.readline
|
94
|
+
stdout.readline
|
95
|
+
|
96
|
+
expect(stdout.readline).to match /name\s+apps\s+services/
|
97
|
+
spaces.sort_by(&:name).each do |space|
|
98
|
+
expect(stdout.readline).to match /#{space.name}\s+#{name_list(space.apps)}\s+#{name_list(space.service_instances)}/
|
99
|
+
end
|
100
|
+
expect(stdout).to be_eof
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|