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.
- data/lib/cf/cli.rb +2 -7
- data/lib/cf/cli/organization/delete.rb +4 -6
- data/lib/cf/cli/service/create.rb +23 -17
- data/lib/cf/cli/space/create.rb +43 -41
- data/lib/cf/cli/space/space.rb +49 -46
- data/lib/cf/version.rb +1 -1
- data/lib/console/console.rb +1 -1
- data/spec/cf/cli/app/delete_spec.rb +16 -28
- data/spec/cf/cli/app/instances_spec.rb +4 -5
- data/spec/cf/cli/app/push/create_spec.rb +362 -373
- data/spec/cf/cli/app/push_spec.rb +216 -215
- data/spec/cf/cli/app/rename_spec.rb +28 -31
- data/spec/cf/cli/app/scale_spec.rb +44 -41
- data/spec/cf/cli/app/start_spec.rb +194 -193
- data/spec/cf/cli/app/stats_spec.rb +55 -56
- data/spec/cf/cli/domain/map_spec.rb +105 -102
- data/spec/cf/cli/domain/unmap_spec.rb +60 -56
- data/spec/cf/cli/organization/delete_spec.rb +85 -84
- data/spec/cf/cli/organization/orgs_spec.rb +80 -83
- data/spec/cf/cli/organization/rename_spec.rb +90 -89
- data/spec/cf/cli/populators/organization_spec.rb +117 -119
- data/spec/cf/cli/populators/space_spec.rb +107 -108
- data/spec/cf/cli/populators/target_spec.rb +17 -12
- data/spec/cf/cli/route/delete_spec.rb +4 -4
- data/spec/cf/cli/route/map_spec.rb +106 -102
- data/spec/cf/cli/route/unmap_spec.rb +5 -5
- data/spec/cf/cli/service/create_spec.rb +74 -46
- data/spec/cf/cli/service/rename_spec.rb +29 -33
- data/spec/cf/cli/service/services_spec.rb +48 -48
- data/spec/cf/cli/space/base_spec.rb +39 -32
- data/spec/cf/cli/space/create_spec.rb +52 -53
- data/spec/cf/cli/space/delete_spec.rb +84 -85
- data/spec/cf/cli/space/rename_spec.rb +93 -94
- data/spec/cf/cli/space/space_spec.rb +60 -60
- data/spec/cf/cli/space/spaces_spec.rb +75 -80
- data/spec/cf/cli/space/switch_space_spec.rb +45 -48
- data/spec/cf/cli/start/info_spec.rb +4 -6
- data/spec/cf/cli/start/login_spec.rb +18 -20
- data/spec/cf/cli/start/logout_spec.rb +36 -37
- data/spec/cf/cli/start/target_spec.rb +86 -89
- data/spec/cf/cli/user/create_spec.rb +83 -84
- data/spec/cf/cli/user/passwd_spec.rb +87 -86
- data/spec/cf/cli/user/register_spec.rb +109 -108
- data/spec/cf/cli_spec.rb +305 -310
- data/spec/console/console_spec.rb +58 -58
- data/spec/factories/cfoundry/v2/domain_factory.rb +8 -0
- data/spec/factories/cfoundry/v2/route_factory.rb +8 -0
- data/spec/factories/cfoundry/v2/user_factory.rb +7 -0
- data/spec/features/org_spec.rb +11 -11
- data/spec/manifests/manifests_spec.rb +21 -21
- data/spec/manifests/plugin_spec.rb +34 -34
- data/spec/spec_helper.rb +1 -2
- data/spec/support/cli_helper.rb +5 -14
- data/spec/support/factory_girl.rb +6 -0
- data/spec/support/interact_helper.rb +5 -15
- data/spec/support/shared_examples/errors.rb +1 -1
- data/spec/tunnel/plugin_spec.rb +2 -2
- data/spec/tunnel/tunnel_spec.rb +5 -5
- metadata +36 -28
@@ -1,18 +1,23 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require "webmock/rspec"
|
3
|
-
require "cf/cli/populators/target"
|
4
2
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
3
|
+
module CF
|
4
|
+
module Populators
|
5
|
+
describe Target do
|
6
|
+
describe "#populate_and_save!" do
|
7
|
+
let(:input) { double(:input) }
|
8
|
+
let(:organization) { double(:organization) }
|
9
|
+
let(:space) { double(:space) }
|
9
10
|
|
10
|
-
|
11
|
+
subject { Target.new(input).populate_and_save! }
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
it "uses a organization then a space populator" do
|
14
|
+
organization.should_receive(:populate_and_save!).and_return(organization)
|
15
|
+
space.should_receive(:populate_and_save!)
|
16
|
+
Organization.should_receive(:new).with(input).and_return(organization)
|
17
|
+
Space.should_receive(:new).with(input, organization).and_return(space)
|
18
|
+
subject
|
19
|
+
end
|
20
|
+
end
|
16
21
|
end
|
17
22
|
end
|
18
|
-
end
|
23
|
+
end
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
describe CF::Route::Delete do
|
4
4
|
before do
|
5
5
|
stub_client_and_precondition
|
6
|
-
stub(
|
6
|
+
route.stub(:delete!)
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:route) { fake(:route, :host => host_name, :domain => domain) }
|
@@ -47,7 +47,7 @@ describe CF::Route::Delete do
|
|
47
47
|
end
|
48
48
|
|
49
49
|
it "deletes the route" do
|
50
|
-
|
50
|
+
route.should_receive(:delete!)
|
51
51
|
command
|
52
52
|
end
|
53
53
|
|
@@ -63,7 +63,7 @@ describe CF::Route::Delete do
|
|
63
63
|
end
|
64
64
|
|
65
65
|
it "does not delete the route" do
|
66
|
-
|
66
|
+
route.should_not_receive(:delete!)
|
67
67
|
command
|
68
68
|
end
|
69
69
|
|
@@ -78,7 +78,7 @@ describe CF::Route::Delete do
|
|
78
78
|
let(:command) { cf %W[delete-route #{url} --force] }
|
79
79
|
|
80
80
|
it "deletes the route" do
|
81
|
-
|
81
|
+
route.should_receive(:delete!)
|
82
82
|
command
|
83
83
|
end
|
84
84
|
|
@@ -1,125 +1,129 @@
|
|
1
|
-
require
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
let(:app) { fake(:app, :space => space, :name => "app-name") }
|
11
|
-
let(:space) { fake(:space, :domains => space_domains) }
|
12
|
-
let(:domain) { fake(:domain) }
|
13
|
-
|
14
|
-
let(:apps) { [app] }
|
15
|
-
let(:routes) { [] }
|
16
|
-
let(:domains) { [domain] }
|
3
|
+
module CF
|
4
|
+
module Route
|
5
|
+
describe Map do
|
6
|
+
before do
|
7
|
+
stub_client_and_precondition
|
8
|
+
end
|
17
9
|
|
18
|
-
|
10
|
+
let(:client) { fake_client(:apps => apps, :routes => routes) }
|
11
|
+
|
12
|
+
let(:app) { fake(:app, :space => space, :name => "app-name") }
|
13
|
+
let(:space) { fake(:space, :domains => space_domains).as_null_object }
|
14
|
+
let(:domain) { fake(:domain, :name => "domain-name-1").as_null_object }
|
15
|
+
|
16
|
+
let(:apps) { [app] }
|
17
|
+
let(:routes) { [] }
|
18
|
+
let(:domains) { [domain] }
|
19
|
+
|
20
|
+
let(:space_domains) { domains }
|
21
|
+
|
22
|
+
let(:host_name) { "some-host" }
|
23
|
+
|
24
|
+
shared_examples "mapping the route to the app" do
|
25
|
+
context "and the domain is mapped to the space" do
|
26
|
+
let(:space_domains) { [domain] }
|
27
|
+
|
28
|
+
context "and the route is mapped to the space" do
|
29
|
+
let(:routes) { [route] }
|
30
|
+
let(:route) do
|
31
|
+
fake(:route, :space => space, :host => host_name,
|
32
|
+
:domain => domain)
|
33
|
+
end
|
34
|
+
|
35
|
+
it "binds the route to the app" do
|
36
|
+
app.should_receive(:add_route).with(route)
|
37
|
+
subject
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
context "and the route is not mapped to the space" do
|
42
|
+
let(:new_route) { fake(:route) }
|
43
|
+
|
44
|
+
before do
|
45
|
+
client.stub(:route).and_return(new_route)
|
46
|
+
app.stub(:add_route)
|
47
|
+
new_route.stub(:create!)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "indicates that it is creating a route" do
|
51
|
+
subject
|
52
|
+
expect(output).to say("Creating route #{host_name}.#{domain.name}")
|
53
|
+
end
|
54
|
+
|
55
|
+
it "creates the route in the app's space" do
|
56
|
+
new_route.should_receive(:create!)
|
57
|
+
subject
|
58
|
+
expect(new_route.host).to eq host_name
|
59
|
+
expect(new_route.domain).to eq domain
|
60
|
+
expect(new_route.space).to eq space
|
61
|
+
end
|
62
|
+
|
63
|
+
it "indicates that it is binding the route" do
|
64
|
+
subject
|
65
|
+
expect(output).to say("Binding #{host_name}.#{domain.name} to #{app.name}")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "binds the route to the app" do
|
69
|
+
app.should_receive(:add_route).with(new_route)
|
70
|
+
subject
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
19
75
|
|
20
|
-
|
76
|
+
context "when an app is specified" do
|
77
|
+
subject { cf(%W[map #{app.name} #{host_name} #{domain.name}]) }
|
21
78
|
|
22
|
-
|
23
|
-
|
24
|
-
let(:space_domains) { [domain] }
|
79
|
+
context "and the domain is not already mapped to the space" do
|
80
|
+
let(:space_domains) { [] }
|
25
81
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
:domain => domain)
|
82
|
+
it "indicates that the domain is invalid" do
|
83
|
+
subject
|
84
|
+
expect(error_output).to say("Unknown domain")
|
85
|
+
end
|
31
86
|
end
|
32
87
|
|
33
|
-
|
34
|
-
mock(app).add_route(route)
|
35
|
-
subject
|
36
|
-
end
|
88
|
+
include_examples "mapping the route to the app"
|
37
89
|
end
|
38
90
|
|
39
|
-
context
|
40
|
-
let(:
|
41
|
-
|
42
|
-
before do
|
43
|
-
stub(client).route { new_route }
|
44
|
-
stub(app).add_route
|
45
|
-
stub(new_route).create!
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'indicates that it is creating a route' do
|
49
|
-
subject
|
50
|
-
expect(output).to say("Creating route #{host_name}.#{domain.name}")
|
51
|
-
end
|
91
|
+
context "when an app is not specified" do
|
92
|
+
let(:space_domains) { [domain] }
|
93
|
+
let(:new_route) { double(:route).as_null_object }
|
52
94
|
|
53
|
-
|
54
|
-
mock(new_route).create!
|
55
|
-
subject
|
56
|
-
expect(new_route.host).to eq host_name
|
57
|
-
expect(new_route.domain).to eq domain
|
58
|
-
expect(new_route.space).to eq space
|
59
|
-
end
|
95
|
+
subject { cf %W[map --host #{host_name} #{domain.name}] }
|
60
96
|
|
61
|
-
|
62
|
-
subject
|
63
|
-
expect(output).to say("Binding #{host_name}.#{domain.name} to #{app.name}")
|
64
|
-
end
|
97
|
+
before { stub_ask("Which application?", anything) { app } }
|
65
98
|
|
66
|
-
it
|
67
|
-
|
99
|
+
it "asks for an app" do
|
100
|
+
client.stub(:route).and_return(new_route)
|
101
|
+
app.stub(:add_route)
|
102
|
+
new_route.stub(:create!)
|
103
|
+
mock_ask("Which application?", anything) { app }
|
68
104
|
subject
|
69
105
|
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context 'when an app is specified' do
|
75
|
-
subject { cf %W[map #{app.name} #{host_name} #{domain.name}] }
|
76
106
|
|
77
|
-
|
78
|
-
let(:space_domains) { [] }
|
79
|
-
|
80
|
-
it 'indicates that the domain is invalid' do
|
81
|
-
subject
|
82
|
-
expect(error_output).to say("Unknown domain")
|
107
|
+
include_examples "mapping the route to the app"
|
83
108
|
end
|
84
|
-
end
|
85
|
-
|
86
|
-
include_examples "mapping the route to the app"
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'when an app is not specified' do
|
90
|
-
let(:space_domains) { [domain] }
|
91
|
-
let(:new_route) { fake(:route) }
|
92
|
-
|
93
|
-
subject { cf %W[map --host #{host_name} #{domain.name}] }
|
94
|
-
|
95
|
-
before { stub_ask("Which application?", anything) { app } }
|
96
109
|
|
97
|
-
|
98
|
-
|
99
|
-
stub(app).add_route
|
100
|
-
stub(new_route).create!
|
101
|
-
mock_ask("Which application?", anything) { app }
|
102
|
-
subject
|
103
|
-
end
|
104
|
-
|
105
|
-
include_examples "mapping the route to the app"
|
106
|
-
end
|
110
|
+
context "when a host is not specified" do
|
111
|
+
let(:new_route) { build(:route) }
|
107
112
|
|
108
|
-
|
109
|
-
let(:new_route) { fake(:route) }
|
113
|
+
subject { cf %W[map #{app.name} #{domain.name}] }
|
110
114
|
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
stub(new_route).create!
|
117
|
-
end
|
115
|
+
before do
|
116
|
+
client.stub(:route).and_return(new_route)
|
117
|
+
app.stub(:add_route)
|
118
|
+
new_route.stub(:create!)
|
119
|
+
end
|
118
120
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
121
|
+
it "creates a route with an empty string as its host" do
|
122
|
+
new_route.should_receive(:create!)
|
123
|
+
subject
|
124
|
+
expect(new_route.host).to eq ""
|
125
|
+
end
|
126
|
+
end
|
123
127
|
end
|
124
128
|
end
|
125
129
|
end
|
@@ -42,7 +42,7 @@ describe CF::Route::Unmap do
|
|
42
42
|
let(:route) { fake(:route, :space => space, :host => host_name, :domain => domain) }
|
43
43
|
|
44
44
|
it "unmaps the url from the app" do
|
45
|
-
|
45
|
+
app.should_receive(:remove_route).with(route)
|
46
46
|
subject
|
47
47
|
end
|
48
48
|
end
|
@@ -68,14 +68,14 @@ describe CF::Route::Unmap do
|
|
68
68
|
route
|
69
69
|
end
|
70
70
|
|
71
|
-
stub(
|
71
|
+
app.stub(:remove_route)
|
72
72
|
|
73
73
|
subject
|
74
74
|
end
|
75
75
|
|
76
76
|
it "unmaps the selected url from the app" do
|
77
77
|
stub_ask("Which URL?", anything) { route }
|
78
|
-
|
78
|
+
app.should_receive(:remove_route).with(route)
|
79
79
|
subject
|
80
80
|
end
|
81
81
|
end
|
@@ -88,8 +88,8 @@ describe CF::Route::Unmap do
|
|
88
88
|
subject { cf %W[unmap --all --app #{app.name}] }
|
89
89
|
|
90
90
|
it "unmaps all routes from the given app" do
|
91
|
-
|
92
|
-
|
91
|
+
app.should_receive(:remove_route).with(route)
|
92
|
+
app.should_receive(:remove_route).with(other_route)
|
93
93
|
subject
|
94
94
|
end
|
95
95
|
end
|
@@ -1,65 +1,93 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
module CF
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
end
|
3
|
+
module CF
|
4
|
+
module Service
|
5
|
+
describe Create do
|
6
|
+
describe "metadata" do
|
7
|
+
let(:command) { Mothership.commands[:create_service] }
|
10
8
|
|
11
|
-
|
12
|
-
|
9
|
+
describe "command" do
|
10
|
+
subject { command }
|
11
|
+
its(:description) { should eq "Create a service" }
|
12
|
+
it { expect(Mothership::Help.group(:services, :manage)).to include(subject) }
|
13
|
+
end
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
include_examples "inputs must have descriptions"
|
16
|
+
|
17
|
+
describe "arguments" do
|
18
|
+
subject { command.arguments }
|
19
|
+
it "has the correct argument order" do
|
20
|
+
should eq([{:type => :optional, :value => nil, :name => :offering}, {:type => :optional, :value => nil, :name => :name}])
|
21
|
+
end
|
22
|
+
end
|
18
23
|
end
|
19
24
|
|
20
|
-
|
25
|
+
context "when there are services" do
|
26
|
+
let(:service_plan) { fake(:service_plan, :name => "F20") }
|
27
|
+
let(:selected_service) { fake(:service, :label => "Foo Service", :service_plans => [service_plan]) }
|
28
|
+
let(:command) { Mothership.new.invoke(:create_service, params, {}) }
|
29
|
+
let(:client) { fake_client(:services => services) }
|
30
|
+
let(:params) { {} }
|
21
31
|
|
22
|
-
|
23
|
-
|
24
|
-
it "has the correct argument order" do
|
25
|
-
should eq([{:type => :optional, :value => nil, :name => :offering}, {:type => :optional, :value => nil, :name => :name}])
|
32
|
+
before do
|
33
|
+
CF::CLI.any_instance.stub(:client).and_return(client)
|
26
34
|
end
|
27
|
-
end
|
28
|
-
end
|
29
35
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
mock_ask("What kind?", anything) { selected_service }
|
41
|
-
mock_ask("Name?", anything) { selected_service.label }
|
42
|
-
mock_ask("Which plan?", anything) { service_plan }
|
43
|
-
any_instance_of(CFoundry::V2::ServiceInstance) do |service_instance|
|
44
|
-
stub(service_instance).create!
|
36
|
+
describe "when there is at least one service" do
|
37
|
+
let(:services) { [selected_service] }
|
38
|
+
|
39
|
+
it "asks for the service" do
|
40
|
+
mock_ask("What kind?", anything) { selected_service }
|
41
|
+
mock_ask("Name?", anything) { selected_service.label }
|
42
|
+
mock_ask("Which plan?", anything) { service_plan }
|
43
|
+
CFoundry::V2::ServiceInstance.any_instance.stub(:create!)
|
44
|
+
|
45
|
+
capture_output { command }
|
45
46
|
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "when there are more than one services" do
|
50
|
+
let(:services) { [selected_service, fake(:service), fake(:service)] }
|
46
51
|
|
47
|
-
|
52
|
+
it "asks for the service" do
|
53
|
+
mock_ask("What kind?", anything) { selected_service }
|
54
|
+
mock_ask("Name?", anything) { selected_service.label }
|
55
|
+
mock_ask("Which plan?", anything) { service_plan }
|
56
|
+
CFoundry::V2::ServiceInstance.any_instance.stub(:create!)
|
57
|
+
|
58
|
+
capture_output { command }
|
59
|
+
end
|
48
60
|
end
|
49
|
-
end
|
50
61
|
|
51
|
-
|
52
|
-
|
62
|
+
describe "when the service plan is specified by an object, not a string" do
|
63
|
+
let(:services) { [selected_service] }
|
64
|
+
let(:params) { {
|
65
|
+
:name => "my-service-name",
|
66
|
+
:offering => selected_service,
|
67
|
+
:plan => service_plan,
|
68
|
+
} }
|
53
69
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
any_instance_of(CFoundry::V2::ServiceInstance) do |service_instance|
|
59
|
-
stub(service_instance).create!
|
70
|
+
it "creates the specified service" do
|
71
|
+
CFoundry::V2::ServiceInstance.any_instance.should_receive(:service_plan=).with(service_plan)
|
72
|
+
CFoundry::V2::ServiceInstance.any_instance.should_receive(:create!)
|
73
|
+
capture_output { command }
|
60
74
|
end
|
75
|
+
end
|
61
76
|
|
62
|
-
|
77
|
+
describe "when entering command line options" do
|
78
|
+
let(:service_plan) { fake(:service_plan, :name => "f20") }
|
79
|
+
let(:params) { {
|
80
|
+
:name => "my-service-name",
|
81
|
+
:offering => selected_service,
|
82
|
+
:plan => "F20",
|
83
|
+
} }
|
84
|
+
let(:services) { [selected_service] }
|
85
|
+
|
86
|
+
it "uses case insensitive match" do
|
87
|
+
CFoundry::V2::ServiceInstance.any_instance.should_receive(:service_plan=).with(service_plan)
|
88
|
+
CFoundry::V2::ServiceInstance.any_instance.should_receive(:create!)
|
89
|
+
capture_output { command }
|
90
|
+
end
|
63
91
|
end
|
64
92
|
end
|
65
93
|
end
|