cf 0.6.1.rc4 → 0.6.1.rc5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cf/cli.rb +1 -1
- data/lib/cf/cli/space/base.rb +5 -3
- data/lib/cf/cli/space/create.rb +6 -19
- data/lib/cf/cli/space/rename.rb +0 -1
- data/lib/cf/cli/space/space.rb +1 -2
- data/lib/cf/cli/space/spaces.rb +1 -1
- data/lib/cf/cli/space/switch.rb +3 -1
- data/lib/cf/version.rb +1 -1
- data/spec/cf/cli/space/base_spec.rb +42 -0
- data/spec/cf/cli/space/create_spec.rb +1 -41
- data/spec/cf/cli/space/rename_spec.rb +1 -10
- data/spec/cf/cli/space/space_spec.rb +57 -0
- data/spec/cf/cli/space/spaces_spec.rb +2 -10
- data/spec/cf/cli/space/switch_space_spec.rb +1 -11
- data/spec/cf/cli_spec.rb +1 -1
- data/spec/features/account_lifecycle_spec.rb +8 -8
- data/spec/features/login_spec.rb +4 -5
- data/spec/features/push_flow_spec.rb +7 -8
- data/spec/features/switching_targets_spec.rb +8 -10
- data/spec/spec_helper.rb +2 -7
- data/spec/support/cli_helper.rb +2 -2
- metadata +23 -19
- data/spec/assets/specker_runner/specker_runner_input.rb +0 -6
- data/spec/assets/specker_runner/specker_runner_pause.rb +0 -5
- data/spec/console_app_specker/console_app_specker_matchers_spec.rb +0 -173
- data/spec/console_app_specker/specker_runner_spec.rb +0 -167
- data/spec/support/console_app_specker_matchers.rb +0 -86
- data/spec/support/shared_examples/populate_organization.rb +0 -6
- data/spec/support/specker_runner.rb +0 -80
- data/spec/support/tracking_expector.rb +0 -71
data/lib/cf/cli.rb
CHANGED
@@ -111,7 +111,7 @@ module CF
|
|
111
111
|
err e.message
|
112
112
|
rescue CFoundry::InvalidAuthToken => e
|
113
113
|
line
|
114
|
-
line c("Invalid authentication token. Try logging in again with 'cf login'", :warning)
|
114
|
+
line c("Invalid authentication token. Try logging in again with 'cf login'. If problems continue, please contact your Cloud Operator.", :warning)
|
115
115
|
rescue CFoundry::Forbidden => e
|
116
116
|
if !$cf_asked_auth
|
117
117
|
$cf_asked_auth = true
|
data/lib/cf/cli/space/base.rb
CHANGED
@@ -4,14 +4,16 @@ require "cf/cli/populators/organization"
|
|
4
4
|
module CF
|
5
5
|
module Space
|
6
6
|
class Base < CLI
|
7
|
+
attr_reader :org
|
8
|
+
|
7
9
|
def precondition
|
8
10
|
check_target
|
9
11
|
check_logged_in
|
10
|
-
check_organization
|
11
12
|
end
|
12
13
|
|
13
|
-
def
|
14
|
-
CF::Populators::Organization.new(input).populate_and_save!
|
14
|
+
def run(name)
|
15
|
+
@org = CF::Populators::Organization.new(input).populate_and_save!
|
16
|
+
super(name)
|
15
17
|
end
|
16
18
|
|
17
19
|
def self.space_by_name
|
data/lib/cf/cli/space/create.rb
CHANGED
@@ -16,39 +16,26 @@ module CF::Space
|
|
16
16
|
input :auditor, :desc => "Add yourself as auditor", :default => false
|
17
17
|
|
18
18
|
def create_space
|
19
|
-
# TODO: ask org instead
|
20
|
-
return invoke :help,
|
21
|
-
:command => "create-space" if input[:organization].nil?
|
22
|
-
|
23
19
|
space = client.space
|
24
|
-
space.organization =
|
20
|
+
space.organization = org
|
25
21
|
space.name = input[:name]
|
26
22
|
|
27
|
-
with_progress("Creating space #{c(space.name, :name)}")
|
28
|
-
space.create!
|
29
|
-
end
|
23
|
+
with_progress("Creating space #{c(space.name, :name)}") { space.create! }
|
30
24
|
|
31
25
|
if input[:manager]
|
32
|
-
with_progress("Adding you as a manager")
|
33
|
-
space.add_manager client.current_user
|
34
|
-
end
|
26
|
+
with_progress("Adding you as a manager") { space.add_manager client.current_user }
|
35
27
|
end
|
36
28
|
|
37
29
|
if input[:developer]
|
38
|
-
with_progress("Adding you as a developer")
|
39
|
-
space.add_developer client.current_user
|
40
|
-
end
|
30
|
+
with_progress("Adding you as a developer") { space.add_developer client.current_user }
|
41
31
|
end
|
42
32
|
|
43
33
|
if input[:auditor]
|
44
|
-
with_progress("Adding you as an auditor")
|
45
|
-
space.add_auditor client.current_user
|
46
|
-
end
|
34
|
+
with_progress("Adding you as an auditor") { space.add_auditor client.current_user }
|
47
35
|
end
|
48
36
|
|
49
37
|
if input[:target]
|
50
|
-
invoke :target, :organization => space.organization,
|
51
|
-
:space => space
|
38
|
+
invoke :target, :organization => space.organization, :space => space
|
52
39
|
else
|
53
40
|
line c("Space created! Use #{b("switch-space #{space.name}")} to target it.", :good)
|
54
41
|
end
|
data/lib/cf/cli/space/rename.rb
CHANGED
data/lib/cf/cli/space/space.rb
CHANGED
@@ -14,8 +14,7 @@ module CF::Space
|
|
14
14
|
input :full, :desc => "Show full information for apps, services, etc.",
|
15
15
|
:default => false
|
16
16
|
def space
|
17
|
-
|
18
|
-
space = input[:space, org]
|
17
|
+
space = CF::Populators::Space.new(input, org).populate_and_save!
|
19
18
|
|
20
19
|
unless space
|
21
20
|
return if quiet?
|
data/lib/cf/cli/space/spaces.rb
CHANGED
@@ -12,8 +12,8 @@ module CF
|
|
12
12
|
input :name, :desc => "Filter by name"
|
13
13
|
input :full, :desc => "Show full information for apps, services, etc.",
|
14
14
|
:default => false
|
15
|
+
|
15
16
|
def spaces
|
16
|
-
org = input[:organization]
|
17
17
|
spaces =
|
18
18
|
with_progress("Getting spaces in #{c(org.name, :name)}") do
|
19
19
|
org.spaces(:depth => quiet? ? 0 : 1).sort_by(&:name)
|
data/lib/cf/cli/space/switch.rb
CHANGED
@@ -6,7 +6,9 @@ module CF::Space
|
|
6
6
|
group :spaces, :hidden => true
|
7
7
|
input :name, :desc => "Space name", :argument => true
|
8
8
|
def switch_space
|
9
|
-
|
9
|
+
space = client.space_by_name(input[:name])
|
10
|
+
|
11
|
+
if space
|
10
12
|
invoke :target, :space => space
|
11
13
|
else
|
12
14
|
raise CF::UserError, "The space #{input[:name]} does not exist, please create the space first."
|
data/lib/cf/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require "cf/cli/app/base"
|
3
|
+
|
4
|
+
describe CF::Space::Base do
|
5
|
+
describe '#run' do
|
6
|
+
subject { CF::Space::Base.new }
|
7
|
+
|
8
|
+
it "uses a populator to set organization" do
|
9
|
+
org = stub
|
10
|
+
mock(CF::Populators::Organization).new(instance_of(Mothership::Inputs)) { stub!.populate_and_save! { org } }
|
11
|
+
stub(subject).send()
|
12
|
+
|
13
|
+
subject.run(:some_command)
|
14
|
+
subject.org.should == org
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '.space_by_name' do
|
19
|
+
subject { CF::Space::Base::space_by_name }
|
20
|
+
let(:org) do
|
21
|
+
Object.new.tap do |o|
|
22
|
+
mock(o).space_by_name("mySpace").returns(space)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "with a space" do
|
27
|
+
let(:space) { mock }
|
28
|
+
it "returns a space matching the name from the given org" do
|
29
|
+
subject.call("mySpace", org).should == space
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "with no matching space" do
|
34
|
+
let(:space) { nil }
|
35
|
+
it "fails when no space matches the name" do
|
36
|
+
expect {
|
37
|
+
subject.call("mySpace", org)
|
38
|
+
}.to raise_exception
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -33,8 +33,6 @@ describe CF::Space::Create do
|
|
33
33
|
|
34
34
|
let(:client) { fake_client(:current_organization => organization, :spaces => spaces) }
|
35
35
|
|
36
|
-
|
37
|
-
|
38
36
|
before do
|
39
37
|
stub(client).space { new_space }
|
40
38
|
stub(new_space).create!
|
@@ -46,7 +44,7 @@ describe CF::Space::Create do
|
|
46
44
|
|
47
45
|
stub(cli).check_logged_in
|
48
46
|
stub(cli).check_target
|
49
|
-
|
47
|
+
any_instance_of(CF::Populators::Organization, :populate_and_save! => organization)
|
50
48
|
end
|
51
49
|
end
|
52
50
|
|
@@ -67,44 +65,6 @@ describe CF::Space::Create do
|
|
67
65
|
subject
|
68
66
|
expect(output).to say("Space created! Use switch-space #{new_space.name} to target it.")
|
69
67
|
end
|
70
|
-
|
71
|
-
it_should_behave_like "a_command_that_populates_organization" do
|
72
|
-
before do
|
73
|
-
any_instance_of described_class do |cli|
|
74
|
-
stub.proxy(cli).check_organization
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
context "when we don't specify an organization" do
|
82
|
-
subject { cf %W[create-space #{new_space.name}] }
|
83
|
-
|
84
|
-
context "when we have a default organization" do
|
85
|
-
it "uses that organization to create a space" do
|
86
|
-
subject
|
87
|
-
|
88
|
-
stdout.rewind
|
89
|
-
expect(stdout.readline).to include "Creating space"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when we don't have a default organization" do
|
94
|
-
let(:organization) { nil }
|
95
|
-
|
96
|
-
it "shows the help for the command" do
|
97
|
-
subject
|
98
|
-
|
99
|
-
stdout.rewind
|
100
|
-
expect(stdout.readline).to include "Create a space in an organization"
|
101
|
-
end
|
102
|
-
|
103
|
-
it "does not try to create the space" do
|
104
|
-
new_space.create! { raise "should not call this method" } # rr not behaving
|
105
|
-
subject
|
106
|
-
end
|
107
|
-
end
|
108
68
|
end
|
109
69
|
end
|
110
70
|
end
|
@@ -13,7 +13,7 @@ describe CF::Space::Rename do
|
|
13
13
|
|
14
14
|
stub(cli).check_logged_in
|
15
15
|
stub(cli).check_target
|
16
|
-
|
16
|
+
any_instance_of(CF::Populators::Organization, :populate_and_save! => organization)
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -76,15 +76,6 @@ describe CF::Space::Rename do
|
|
76
76
|
context 'when no name is provided, but a space is' do
|
77
77
|
subject { cf %W[rename-space --space #{renamed_space.name} --no-force] }
|
78
78
|
|
79
|
-
it_should_behave_like "a_command_that_populates_organization" do
|
80
|
-
subject { cf %W[rename-space --no-force --no-quiet #{renamed_space}] }
|
81
|
-
before do
|
82
|
-
any_instance_of described_class do |cli|
|
83
|
-
stub.proxy(cli).check_organization
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
79
|
it 'asks for the new name and renames' do
|
89
80
|
dont_allow_ask("Rename which space?", anything)
|
90
81
|
mock_ask("New name") { new_name }
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
describe CF::Space::Space do
|
5
|
+
let(:apps) { fake_list(:app, 2) }
|
6
|
+
let(:domains) { fake_list(:domain, 2) }
|
7
|
+
let(:services) { fake_list(:service_instance, 2) }
|
8
|
+
let!(:space_1) { fake(:space, :name => "some_space_name", :apps => apps, :service_instances => services, :domains => domains) }
|
9
|
+
let(:spaces) { [space_1] }
|
10
|
+
let(:organization) { fake(:organization, :name => "Spacey Org", :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).check_logged_in
|
17
|
+
stub(cli).check_target
|
18
|
+
any_instance_of(CF::Populators::Organization, :populate_and_save! => organization)
|
19
|
+
any_instance_of(CF::Populators::Space, :populate_and_save! => space_1)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "with --quiet" do
|
24
|
+
subject { cf %W[space some_space_name --quiet] }
|
25
|
+
|
26
|
+
it "shows only the name" do
|
27
|
+
subject
|
28
|
+
expect(stdout.read).to eq("some_space_name\n")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with --no-quiet" do
|
33
|
+
subject { cf %W[space some_space_name --no-quiet] }
|
34
|
+
|
35
|
+
before { subject }
|
36
|
+
|
37
|
+
it "shows the space's name" do
|
38
|
+
expect(stdout.read).to include("some_space_name:")
|
39
|
+
end
|
40
|
+
|
41
|
+
it "shows the space's org" do
|
42
|
+
expect(stdout.read).to include("organization: Spacey Org")
|
43
|
+
end
|
44
|
+
|
45
|
+
it "shows apps" do
|
46
|
+
expect(stdout.read).to include("apps: #{apps.first.name}, #{apps.last.name}")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "shows services" do
|
50
|
+
expect(stdout.read).to include("services: #{services.first.name}, #{services.last.name}")
|
51
|
+
end
|
52
|
+
|
53
|
+
it "shows domains" do
|
54
|
+
expect(stdout.read).to include("domains: #{domains.first.name}, #{domains.last.name}")
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -7,7 +7,7 @@ describe CF::Space::Spaces do
|
|
7
7
|
let!(:space_2) { fake(:space, :name => "aa_first", :apps => [fake(:app)], :service_instances => fake_list(:service_instance, 3), :domains => [fake(:domain)]) }
|
8
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
9
|
let(:spaces) { [space_1, space_2, space_3]}
|
10
|
-
let(:organization) { fake(:organization, :spaces => spaces) }
|
10
|
+
let(:organization) { fake(:organization, :spaces => spaces, :name => 'foo') }
|
11
11
|
let(:client) { fake_client(:spaces => spaces, :current_organization => organization) }
|
12
12
|
|
13
13
|
before do
|
@@ -15,7 +15,7 @@ describe CF::Space::Spaces do
|
|
15
15
|
stub(cli).client { client }
|
16
16
|
stub(cli).check_logged_in
|
17
17
|
stub(cli).check_target
|
18
|
-
|
18
|
+
any_instance_of(CF::Populators::Organization, :populate_and_save! => organization)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -74,14 +74,6 @@ describe CF::Space::Spaces do
|
|
74
74
|
end
|
75
75
|
|
76
76
|
context 'when there are spaces' do
|
77
|
-
it_should_behave_like "a_command_that_populates_organization" do
|
78
|
-
before do
|
79
|
-
any_instance_of described_class do |cli|
|
80
|
-
stub.proxy(cli).check_organization
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
77
|
context 'and the full flag is given' do
|
86
78
|
let(:full) { true }
|
87
79
|
|
@@ -13,9 +13,8 @@ describe CF::Space::Switch do
|
|
13
13
|
|
14
14
|
stub(cli).check_logged_in
|
15
15
|
stub(cli).check_target
|
16
|
-
|
16
|
+
any_instance_of(CF::Populators::Organization, :populate_and_save! => organization)
|
17
17
|
end
|
18
|
-
|
19
18
|
end
|
20
19
|
|
21
20
|
describe 'metadata' do
|
@@ -39,7 +38,6 @@ describe CF::Space::Switch do
|
|
39
38
|
|
40
39
|
subject { cf %W[--no-quiet switch-space #{space_to_switch_to.name} --no-color] }
|
41
40
|
|
42
|
-
|
43
41
|
context "when the space exists" do
|
44
42
|
before do
|
45
43
|
any_instance_of(Mothership) do |m|
|
@@ -50,14 +48,6 @@ describe CF::Space::Switch do
|
|
50
48
|
it "switches to that space" do
|
51
49
|
subject
|
52
50
|
end
|
53
|
-
|
54
|
-
it_should_behave_like "a_command_that_populates_organization" do
|
55
|
-
before do
|
56
|
-
any_instance_of described_class do |cli|
|
57
|
-
stub.proxy(cli).check_organization
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
51
|
end
|
62
52
|
|
63
53
|
context "when the space does not exist" do
|
data/spec/cf/cli_spec.rb
CHANGED
@@ -76,7 +76,7 @@ describe CF::CLI do
|
|
76
76
|
|
77
77
|
it "tells the user they are not authenticated" do
|
78
78
|
subject
|
79
|
-
expect(stdout.string).to include "Invalid authentication token. Try logging in again with 'cf login'"
|
79
|
+
expect(stdout.string).to include "Invalid authentication token. Try logging in again with 'cf login'. If problems continue, please contact your Cloud Operator."
|
80
80
|
end
|
81
81
|
|
82
82
|
it "exits without attempting to login again" do
|
@@ -33,15 +33,15 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
33
33
|
|
34
34
|
it "registers a new account and deletes it" do
|
35
35
|
email = Faker::Internet.email
|
36
|
-
run("#{cf_bin} logout") do |runner|
|
36
|
+
BlueShell::Runner.run("#{cf_bin} logout") do |runner|
|
37
37
|
runner.wait_for_exit
|
38
38
|
end
|
39
39
|
|
40
|
-
run("#{cf_bin} target #{target}") do |runner|
|
40
|
+
BlueShell::Runner.run("#{cf_bin} target #{target}") do |runner|
|
41
41
|
runner.wait_for_exit
|
42
42
|
end
|
43
43
|
|
44
|
-
run("#{cf_bin} login #{username} --password #{password}") do |runner|
|
44
|
+
BlueShell::Runner.run("#{cf_bin} login #{username} --password #{password}") do |runner|
|
45
45
|
expect(runner).to say(
|
46
46
|
"Organization>" => proc {
|
47
47
|
runner.send_keys organization
|
@@ -59,7 +59,7 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
59
59
|
)
|
60
60
|
end
|
61
61
|
|
62
|
-
run("#{cf_bin} register #{email} --password p") do |runner|
|
62
|
+
BlueShell::Runner.run("#{cf_bin} register #{email} --password p") do |runner|
|
63
63
|
expect(runner).to say "Confirm Password>"
|
64
64
|
runner.send_keys 'p'
|
65
65
|
expect(runner).to say "Your password strength is: good"
|
@@ -67,11 +67,11 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
67
67
|
expect(runner).to say "Authenticating... OK"
|
68
68
|
end
|
69
69
|
|
70
|
-
run("#{cf_bin} logout") do |runner|
|
70
|
+
BlueShell::Runner.run("#{cf_bin} logout") do |runner|
|
71
71
|
runner.wait_for_exit
|
72
72
|
end
|
73
73
|
|
74
|
-
run("#{cf_bin} login #{username} --password #{password}") do |runner|
|
74
|
+
BlueShell::Runner.run("#{cf_bin} login #{username} --password #{password}") do |runner|
|
75
75
|
expect(runner).to say "Organization>"
|
76
76
|
runner.send_keys "1"
|
77
77
|
expect(runner).to say "Space>"
|
@@ -79,7 +79,7 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
79
79
|
end
|
80
80
|
|
81
81
|
# TODO: do this when cf delete-user is implemented
|
82
|
-
#run("#{cf_bin} delete-user #{email}") do |runner|
|
82
|
+
#BlueShell::Runner.run("#{cf_bin} delete-user #{email}") do |runner|
|
83
83
|
# expect(runner).to say "Really delete user #{email}?>"
|
84
84
|
# runner.send_keys "y"
|
85
85
|
# expect(runner).to say "Deleting #{email}... OK"
|
@@ -93,7 +93,7 @@ if ENV['CF_V2_RUN_INTEGRATION']
|
|
93
93
|
user.delete!
|
94
94
|
client.base.uaa.delete_user(guid)
|
95
95
|
|
96
|
-
run("#{cf_bin} login #{email} --password p") do |runner|
|
96
|
+
BlueShell::Runner.run("#{cf_bin} login #{email} --password p") do |runner|
|
97
97
|
expect(runner).to say "Authenticating... FAILED"
|
98
98
|
|
99
99
|
expect(runner).to say "Password>"
|