cf 1.1.3.rc1 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|