rhc 1.2.7 → 1.3.8

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.
Files changed (97) hide show
  1. data/bin/rhc +6 -8
  2. data/bin/rhc-chk +23 -10
  3. data/features/domain.feature +1 -1
  4. data/features/lib/rhc_helper.rb +3 -2
  5. data/features/lib/rhc_helper/api.rb +7 -0
  6. data/features/lib/rhc_helper/app.rb +8 -10
  7. data/features/lib/rhc_helper/domain.rb +2 -1
  8. data/features/lib/rhc_helper/runnable.rb +2 -24
  9. data/features/sshkey.feature +3 -3
  10. data/features/step_definitions/cartridge_steps.rb +6 -6
  11. data/features/step_definitions/client_steps.rb +0 -1
  12. data/features/step_definitions/sshkey_steps.rb +2 -2
  13. data/features/support/before_hooks.rb +0 -1
  14. data/features/support/env.rb +5 -3
  15. data/lib/rhc-common.rb +1 -1
  16. data/lib/rhc.rb +9 -8
  17. data/lib/rhc/auth.rb +3 -0
  18. data/lib/rhc/auth/basic.rb +54 -0
  19. data/lib/rhc/cartridge_helpers.rb +11 -5
  20. data/lib/rhc/cli.rb +4 -2
  21. data/lib/rhc/command_runner.rb +35 -30
  22. data/lib/rhc/commands.rb +127 -18
  23. data/lib/rhc/commands/account.rb +24 -0
  24. data/lib/rhc/commands/alias.rb +1 -1
  25. data/lib/rhc/commands/app.rb +210 -209
  26. data/lib/rhc/commands/apps.rb +22 -0
  27. data/lib/rhc/commands/base.rb +10 -77
  28. data/lib/rhc/commands/cartridge.rb +35 -35
  29. data/lib/rhc/commands/domain.rb +20 -13
  30. data/lib/rhc/commands/git_clone.rb +30 -0
  31. data/lib/rhc/commands/{port-forward.rb → port_forward.rb} +3 -3
  32. data/lib/rhc/commands/server.rb +28 -16
  33. data/lib/rhc/commands/setup.rb +18 -1
  34. data/lib/rhc/commands/snapshot.rb +4 -4
  35. data/lib/rhc/commands/sshkey.rb +4 -18
  36. data/lib/rhc/commands/tail.rb +32 -9
  37. data/lib/rhc/config.rb +168 -99
  38. data/lib/rhc/context_helper.rb +22 -9
  39. data/lib/rhc/core_ext.rb +41 -1
  40. data/lib/rhc/exceptions.rb +21 -5
  41. data/lib/rhc/git_helpers.rb +81 -0
  42. data/lib/rhc/help_formatter.rb +21 -1
  43. data/lib/rhc/helpers.rb +222 -87
  44. data/lib/rhc/output_helpers.rb +94 -110
  45. data/lib/rhc/rest.rb +15 -198
  46. data/lib/rhc/rest/api.rb +88 -0
  47. data/lib/rhc/rest/application.rb +29 -30
  48. data/lib/rhc/rest/attributes.rb +27 -0
  49. data/lib/rhc/rest/base.rb +29 -33
  50. data/lib/rhc/rest/cartridge.rb +42 -20
  51. data/lib/rhc/rest/client.rb +351 -89
  52. data/lib/rhc/rest/domain.rb +7 -13
  53. data/lib/rhc/rest/gear_group.rb +1 -1
  54. data/lib/rhc/rest/key.rb +7 -2
  55. data/lib/rhc/rest/mock.rb +609 -0
  56. data/lib/rhc/rest/user.rb +6 -2
  57. data/lib/rhc/{ssh_key_helpers.rb → ssh_helpers.rb} +58 -28
  58. data/lib/rhc/{targz.rb → tar_gz.rb} +0 -0
  59. data/lib/rhc/usage_templates/command_help.erb +4 -1
  60. data/lib/rhc/usage_templates/help.erb +24 -11
  61. data/lib/rhc/usage_templates/options_help.erb +14 -0
  62. data/lib/rhc/wizard.rb +283 -213
  63. data/spec/keys/example.pem +23 -0
  64. data/spec/keys/example_private.pem +27 -0
  65. data/spec/keys/server.pem +19 -0
  66. data/spec/rest_spec_helper.rb +3 -371
  67. data/spec/rhc/auth_spec.rb +226 -0
  68. data/spec/rhc/cli_spec.rb +41 -14
  69. data/spec/rhc/command_spec.rb +44 -15
  70. data/spec/rhc/commands/account_spec.rb +41 -0
  71. data/spec/rhc/commands/alias_spec.rb +16 -15
  72. data/spec/rhc/commands/app_spec.rb +115 -92
  73. data/spec/rhc/commands/apps_spec.rb +39 -0
  74. data/spec/rhc/commands/cartridge_spec.rb +134 -112
  75. data/spec/rhc/commands/domain_spec.rb +31 -86
  76. data/spec/rhc/commands/git_clone_spec.rb +56 -0
  77. data/spec/rhc/commands/{port-forward_spec.rb → port_forward_spec.rb} +27 -32
  78. data/spec/rhc/commands/server_spec.rb +28 -3
  79. data/spec/rhc/commands/setup_spec.rb +29 -11
  80. data/spec/rhc/commands/snapshot_spec.rb +4 -3
  81. data/spec/rhc/commands/sshkey_spec.rb +24 -56
  82. data/spec/rhc/commands/tail_spec.rb +26 -9
  83. data/spec/rhc/commands/threaddump_spec.rb +12 -11
  84. data/spec/rhc/config_spec.rb +211 -164
  85. data/spec/rhc/context_spec.rb +2 -0
  86. data/spec/rhc/helpers_spec.rb +242 -46
  87. data/spec/rhc/rest_application_spec.rb +42 -28
  88. data/spec/rhc/rest_client_spec.rb +110 -93
  89. data/spec/rhc/rest_spec.rb +220 -131
  90. data/spec/rhc/targz_spec.rb +1 -1
  91. data/spec/rhc/wizard_spec.rb +435 -624
  92. data/spec/spec.opts +1 -1
  93. data/spec/spec_helper.rb +140 -6
  94. data/spec/wizard_spec_helper.rb +326 -0
  95. metadata +163 -143
  96. data/lib/rhc/client.rb +0 -17
  97. data/lib/rhc/git_helper.rb +0 -59
@@ -2,16 +2,17 @@ require 'spec_helper'
2
2
  require 'rest_spec_helper'
3
3
  require 'rhc/commands/alias'
4
4
  require 'rhc/config'
5
+
5
6
  describe RHC::Commands::Alias do
6
7
  let(:client_links) { mock_response_links(mock_client_links) }
7
8
  let(:domain_0_links) { mock_response_links(mock_domain_links('mock_domain_0')) }
8
9
  let(:domain_1_links) { mock_response_links(mock_domain_links('mock_domain_1')) }
9
10
  let(:app_0_links) { mock_response_links(mock_app_links('mock_domain_0', 'mock_app_0')) }
11
+ let!(:rest_client){ MockRestClient.new }
10
12
  before(:each) do
11
- RHC::Config.set_defaults
12
- @rc = MockRestClient.new
13
- @rc.add_domain("mock_domain_0").add_application("mock_app_0", "ruby-1.8.7")
14
- stub_api_request(:any, client_links['LIST_DOMAINS']['relative']).with(:headers => {'Accept-Encoding'=>'gzip, deflate'}).
13
+ user_config
14
+ rest_client.add_domain("mock_domain_0").add_application("mock_app_0", "ruby-1.8.7")
15
+ stub_api_request(:any, client_links['LIST_DOMAINS']['relative']).
15
16
  to_return({ :body => {
16
17
  :type => 'domains',
17
18
  :data =>
@@ -24,7 +25,7 @@ describe RHC::Commands::Alias do
24
25
  }.to_json,
25
26
  :status => 200
26
27
  })
27
- stub_api_request(:any, domain_0_links['LIST_APPLICATIONS']['relative']).with(:headers => {'Accept-Encoding'=>'gzip, deflate'}).
28
+ stub_api_request(:any, domain_0_links['LIST_APPLICATIONS']['relative']).
28
29
  to_return({ :body => {
29
30
  :type => 'applications',
30
31
  :data =>
@@ -39,7 +40,8 @@ describe RHC::Commands::Alias do
39
40
  }.to_json,
40
41
  :status => 200
41
42
  })
42
- stub_api_request(:any, app_0_links['ADD_ALIAS']['relative']).with(:body => {:event => 'add-alias', :alias => 'www.foo.bar'}, :headers => {'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'33', 'Content-Type'=>'application/x-www-form-urlencoded'}).
43
+ stub_api_request(:any, app_0_links['ADD_ALIAS']['relative'], false).
44
+ with(:body => {:event => 'add-alias', :alias => 'www.foo.bar'}).
43
45
  to_return({ :body => {
44
46
  :type => 'application',
45
47
  :data =>
@@ -55,7 +57,8 @@ describe RHC::Commands::Alias do
55
57
  }.to_json,
56
58
  :status => 200
57
59
  })
58
- stub_api_request(:any, app_0_links['REMOVE_ALIAS']['relative']).with(:body => {:event => 'remove-alias', :alias => 'www.foo.bar'}, :headers => {'Accept-Encoding'=>'gzip, deflate', 'Content-Length'=>'36', 'Content-Type'=>'application/x-www-form-urlencoded'}).
60
+ stub_api_request(:any, app_0_links['REMOVE_ALIAS']['relative'], false).
61
+ with(:body => {:event => 'remove-alias', :alias => 'www.foo.bar'}).
59
62
  to_return({ :body => {
60
63
  :type => 'application',
61
64
  :data =>
@@ -108,16 +111,14 @@ stub_api_request(:any, app_0_links['REMOVE_ALIAS']['relative']).with(:body => {:
108
111
  end
109
112
 
110
113
  describe 'add alias' do
111
- let(:arguments) { ['alias', 'add', 'mock_app_0', 'www.foo.bar', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password' ] }
112
- context 'with no issues' do
113
- it { expect { run }.should exit_with_code(0) }
114
- end
114
+ let(:arguments) { ['alias', 'add', 'mock_app_0', 'www.foo.bar' ] }
115
+ it { expect { run }.should exit_with_code(0) }
116
+ it { run_output.should =~ /'add-alias' successful/m }
115
117
  end
116
118
 
117
119
  describe 'remove alias' do
118
- let(:arguments) { ['alias', 'remove', 'mock_app_0', 'www.foo.bar', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password' ] }
119
- context 'with no issues' do
120
- it { expect { run }.should exit_with_code(0) }
121
- end
120
+ let(:arguments) { ['alias', 'remove', 'mock_app_0', 'www.foo.bar' ] }
121
+ it { expect { run }.should exit_with_code(0) }
122
+ it { run_output.should =~ /'remove-alias' successful/m }
122
123
  end
123
124
  end
@@ -4,11 +4,13 @@ require 'rhc/commands/app'
4
4
  require 'rhc/config'
5
5
 
6
6
  describe RHC::Commands::App do
7
+ let!(:rest_client){ MockRestClient.new }
7
8
  before(:each) do
8
9
  FakeFS.activate!
9
10
  FakeFS::FileSystem.clear
10
- RHC::Config.set_defaults
11
- RHC::Helpers::MAX_RETRIES = 3
11
+ user_config
12
+ RHC::Helpers::remove_const(:MAX_RETRIES) rescue nil
13
+ RHC::Helpers::const_set(:MAX_RETRIES, 3)
12
14
  @instance = RHC::Commands::App.new
13
15
  RHC::Commands::App.stub(:new) do
14
16
  @instance.stub(:git_config_get) { "" }
@@ -32,7 +34,6 @@ describe RHC::Commands::App do
32
34
  describe 'app default' do
33
35
  before(:each) do
34
36
  FakeFS.deactivate!
35
- @rc = MockRestClient.new
36
37
  end
37
38
 
38
39
  context 'app' do
@@ -43,8 +44,7 @@ describe RHC::Commands::App do
43
44
 
44
45
  describe 'app create' do
45
46
  before(:each) do
46
- @rc = MockRestClient.new
47
- domain = @rc.add_domain("mockdomain")
47
+ domain = rest_client.add_domain("mockdomain")
48
48
  end
49
49
 
50
50
  context 'when run without a cart' do
@@ -57,21 +57,39 @@ describe RHC::Commands::App do
57
57
  let(:arguments) { ['app', 'create', 'app1', 'mock_standalone_cart-1', '--noprompt', '--timeout', '10', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
58
58
  it { expect { run }.should exit_with_code(0) }
59
59
  it { run_output.should match("Success") }
60
+ it { run_output.should match("Cartridges: mock_standalone_cart-1\n") }
61
+ end
62
+
63
+ context 'when run with multiple carts' do
64
+ let(:arguments) { ['app', 'create', 'app1', 'mock_standalone_cart-1', 'mock_cart-1', '--noprompt', '-p', 'password'] }
65
+ it { expect { run }.should exit_with_code(0) }
66
+ it { run_output.should match("Success") }
67
+ it { run_output.should match("Cartridges: mock_standalone_cart-1, mock_cart-1\n") }
68
+ after{ rest_client.domains.first.applications.first.cartridges.find{ |c| c.name == 'mock_cart-1' }.should be_true }
69
+ end
70
+
71
+ context 'when run with a git url' do
72
+ let(:arguments) { ['app', 'create', 'app1', 'mock_standalone_cart-1', '--from', 'git://url', '--noprompt', '-p', 'password'] }
73
+ it { expect { run }.should exit_with_code(0) }
74
+ it { run_output.should match("Success") }
75
+ it { run_output.should match("Source Code: git://url\n") }
76
+ it { run_output.should match("Initial Git URL: git://url\n") }
77
+ after{ rest_client.domains.first.applications.first.initial_git_url.should == 'git://url' }
60
78
  end
61
79
 
62
80
  context 'when no cartridges are returned' do
63
81
  before(:each) do
64
- domain = @rc.domains.first
65
- @rc.stub(:cartridges) { [] }
66
- domain.stub(:add_application).and_raise(RHC::Rest::ValidationException.new('Each application needs a web cartridge', '', '109'))
82
+ domain = rest_client.domains.first
83
+ #rest_client.stub(:cartridges) { [] }
84
+ # domain.stub(:add_application).and_raise(RHC::Rest::ValidationException.new('Each application needs a web cartridge', '', '109'))
67
85
  end
68
86
  context 'without trace' do
69
87
  let(:arguments) { ['app', 'create', 'app1', 'nomatch_cart', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
70
- it { run_output.should match(/Valid cartridge types:.*Each application needs a web cartridge/m) }
88
+ it("should display the list of cartridges") { run_output.should match(/Short Name.*mock_standalone_cart-2/m) }
71
89
  end
72
90
  context 'with trace' do
73
91
  let(:arguments) { ['app', 'create', 'app1', 'nomatch_cart', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password', '--trace'] }
74
- it { expect { run }.should raise_error(RHC::Rest::ValidationException) }
92
+ it { expect { run }.should raise_error(RHC::CartridgeNotFoundException, "There are no cartridges that match 'nomatch_cart'.") }
75
93
  end
76
94
  end
77
95
  end
@@ -81,8 +99,7 @@ describe RHC::Commands::App do
81
99
 
82
100
  context 'when run' do
83
101
  before(:each) do
84
- @rc = MockRestClient.new
85
- domain = @rc.add_domain("mockdomain")
102
+ domain = rest_client.add_domain("mockdomain")
86
103
  end
87
104
  it { expect { run }.should raise_error(RHC::MultipleCartridgesException) }
88
105
  end
@@ -93,10 +110,10 @@ describe RHC::Commands::App do
93
110
 
94
111
  context 'when run' do
95
112
  before(:each) do
96
- @rc = MockRestClient.new
97
- @domain = @rc.add_domain("mockdomain")
113
+ @domain = rest_client.add_domain("mockdomain")
98
114
  end
99
115
  it "should create a jenkins app and a regular app with an embedded jenkins client" do
116
+ #puts run_output
100
117
  expect { run }.should exit_with_code(0)
101
118
  jenkins_app = @domain.find_application("jenkins")
102
119
  jenkins_app.cartridges[0].name.should == "jenkins-1.4"
@@ -111,10 +128,9 @@ describe RHC::Commands::App do
111
128
 
112
129
  context 'when run' do
113
130
  before(:each) do
114
- @rc = MockRestClient.new
115
- domain = @rc.add_domain("mockdomain")
131
+ domain = rest_client.add_domain("mockdomain")
116
132
  end
117
- it { expect { run }.should raise_error(ArgumentError, /The --no-dns option can't be used in conjunction with --enable-jenkins/) }
133
+ it { expect { run }.should_not raise_error(ArgumentError, /The --no-dns option can't be used in conjunction with --enable-jenkins/) }
118
134
  end
119
135
  end
120
136
 
@@ -123,8 +139,7 @@ describe RHC::Commands::App do
123
139
 
124
140
  context 'when run' do
125
141
  before(:each) do
126
- @rc = MockRestClient.new
127
- domain = @rc.add_domain("mockdomain")
142
+ domain = rest_client.add_domain("mockdomain")
128
143
  end
129
144
  it { expect { run }.should raise_error(ArgumentError, /You have named both your main application and your Jenkins application/) }
130
145
  end
@@ -135,8 +150,7 @@ describe RHC::Commands::App do
135
150
 
136
151
  context 'when run' do
137
152
  before(:each) do
138
- @rc = MockRestClient.new
139
- @domain = @rc.add_domain("mockdomain")
153
+ @domain = rest_client.add_domain("mockdomain")
140
154
  @domain.add_application("jenkins", "jenkins-1.4")
141
155
  end
142
156
  it "should use existing jenkins" do
@@ -147,30 +161,16 @@ describe RHC::Commands::App do
147
161
  end
148
162
  end
149
163
 
150
- describe 'app create enable-jenkins named after existing app' do
151
- let(:arguments) { ['app', 'create', 'app1', 'mock_unique_standalone_cart', '--trace', '--enable-jenkins', 'app2', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
152
-
153
- context 'when run' do
154
- before(:each) do
155
- @rc = MockRestClient.new
156
- domain = @rc.add_domain("mockdomain")
157
- domain.add_application("app2", "mock_unique_standalone_cart")
158
- end
159
- it { expect { run }.should raise_error(ArgumentError, /You have named your Jenkins application the same as an existing application/) }
160
- end
161
- end
162
-
163
164
  describe 'app create jenkins fails to install warnings' do
164
165
  let(:arguments) { ['app', 'create', 'app1', 'mock_unique_standalone_cart', '--enable-jenkins', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
165
166
 
166
167
  before(:each) do
167
- @rc = MockRestClient.new
168
- @domain = @rc.add_domain("mockdomain")
168
+ @domain = rest_client.add_domain("mockdomain")
169
169
  end
170
170
 
171
171
  context 'when run with error in jenkins setup' do
172
172
  before(:each) do
173
- @instance.stub(:setup_jenkins_app) { raise Exception }
173
+ @instance.stub(:add_jenkins_app) { raise Exception }
174
174
  end
175
175
  it "should print out jenkins warning" do
176
176
  run_output.should match("Jenkins failed to install")
@@ -179,7 +179,7 @@ describe RHC::Commands::App do
179
179
 
180
180
  context 'when run with error in jenkins-client setup' do
181
181
  before(:each) do
182
- @instance.stub(:setup_jenkins_client) { raise Exception }
182
+ @instance.stub(:add_jenkins_cartridge) { raise Exception }
183
183
  end
184
184
  it "should print out jenkins warning" do
185
185
  run_output.should match("Jenkins client failed to install")
@@ -192,9 +192,8 @@ describe RHC::Commands::App do
192
192
 
193
193
  context 'when run with server error in jenkins-client setup' do
194
194
  before(:each) do
195
- @rc = MockRestClient.new
196
- @domain = @rc.add_domain("mockdomain")
197
- @instance.stub(:setup_jenkins_client) { raise RHC::Rest::ServerErrorException.new("Server error", 157) }
195
+ @domain = rest_client.add_domain("mockdomain")
196
+ @instance.stub(:add_jenkins_cartridge) { raise RHC::Rest::ServerErrorException.new("Server error", 157) }
198
197
  end
199
198
  it "should fail embedding jenkins cartridge" do
200
199
  Kernel.should_receive(:sleep).and_return(true)
@@ -208,8 +207,7 @@ describe RHC::Commands::App do
208
207
 
209
208
  context 'when run' do
210
209
  before(:each) do
211
- @rc = MockRestClient.new
212
- @domain = @rc.add_domain("dnserror")
210
+ @domain = rest_client.add_domain("dnserror")
213
211
  end
214
212
  it { run_output.should match("unable to lookup your hostname") }
215
213
  end
@@ -219,9 +217,9 @@ describe RHC::Commands::App do
219
217
  let(:arguments) { ['app', 'create', 'app1', 'mock_unique_standalone_cart', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
220
218
 
221
219
  before(:each) do
222
- @rc = MockRestClient.new
223
- @domain = @rc.add_domain("mockdomain")
224
- @instance.stub(:run_git_clone) { raise RHC::GitException }
220
+ @domain = rest_client.add_domain("mockdomain")
221
+ @instance.stub(:git_clone_application) { raise RHC::GitException }
222
+ @instance.should_not_receive(:check_sshkeys!)
225
223
  end
226
224
 
227
225
  context 'when run with error in git clone' do
@@ -257,8 +255,7 @@ describe RHC::Commands::App do
257
255
  let(:arguments) { ['app', 'create', 'app1', 'mock_unique_standalone_cart', '--noprompt', '--nogit', '--config', '/tmp/test.conf', '-l', 'test@test.foo', '-p', 'password'] }
258
256
 
259
257
  before (:each) do
260
- @rc = MockRestClient.new
261
- @domain = @rc.add_domain("mockdomain")
258
+ @domain = rest_client.add_domain("mockdomain")
262
259
  end
263
260
 
264
261
  context 'when run' do
@@ -270,8 +267,7 @@ describe RHC::Commands::App do
270
267
  let(:arguments) { ['app', 'create', 'app1', 'mock_unique_standalone_cart', '--config', '/tmp/test.conf', '-l', 'test@test.foo', '-p', 'password'] }
271
268
 
272
269
  before (:each) do
273
- @rc = MockRestClient.new
274
- @domain = @rc.add_domain("mockdomain")
270
+ @domain = rest_client.add_domain("mockdomain")
275
271
  # fakefs is activated
276
272
  Dir.mkdir('/tmp/')
277
273
  File.open('/tmp/test.conf', 'w') do |f|
@@ -279,7 +275,7 @@ describe RHC::Commands::App do
279
275
  end
280
276
 
281
277
  # don't run wizard here because we test this elsewhere
282
- wizard_instance = RHC::SSHWizard.new(@rc)
278
+ wizard_instance = RHC::SSHWizard.new(rest_client, RHC::Config.new, Commander::Command::Options.new)
283
279
  wizard_instance.stub(:ssh_key_uploaded?) { true }
284
280
  RHC::SSHWizard.stub(:new) { wizard_instance }
285
281
  RHC::Config.stub(:should_run_ssh_wizard?) { false }
@@ -290,65 +286,86 @@ describe RHC::Commands::App do
290
286
  end
291
287
  end
292
288
 
293
- describe 'app git-clone' do
294
- let(:arguments) { ['app', 'git-clone', '--trace', '-a', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
295
-
296
- context 'when run' do
297
- before(:each) do
298
- @rc = MockRestClient.new
299
- @domain = @rc.add_domain("mockdomain")
300
- @app = @domain.add_application("app1", "mock_unique_standalone_cart")
301
- end
302
- it { expect { run }.should exit_with_code(0) }
303
- end
304
- end
305
-
306
289
  describe 'app delete' do
307
- let(:arguments) { ['app', 'delete', '--trace', '-a', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
290
+ let(:arguments) { ['app', 'delete', '--trace', '-a', 'app1', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
308
291
 
309
292
  context 'when run' do
310
- before(:each) do
311
- @rc = MockRestClient.new
312
- @domain = @rc.add_domain("mockdomain")
313
- end
314
- it "should not remove app when no is sent as input" do
315
- @app = @domain.add_application("app1", "mock_type")
316
- expect { run(["no"]) }.should exit_with_code(0)
317
- @domain.applications.length.should == 1
318
- @domain.applications[0] == @app
319
- end
293
+ before{ @domain = rest_client.add_domain("mockdomain") }
320
294
 
321
- it "should remove app when yes is sent as input" do
322
- @app = @domain.add_application("app1", "mock_type")
323
- expect { run(["yes"]) }.should exit_with_code(0)
324
- @domain.applications.length.should == 0
325
- end
326
295
  it "should raise cartridge not found exception when no apps exist" do
327
296
  expect { run }.should raise_error RHC::ApplicationNotFoundException
328
297
  end
298
+
299
+ context "with an app" do
300
+ before{ @app = @domain.add_application("app1", "mock_type") }
301
+
302
+ it "should not remove app when no is sent as input" do
303
+ expect { run(["no"]) }.should raise_error(RHC::ConfirmationError)
304
+ @domain.applications.length.should == 1
305
+ @domain.applications[0] == @app
306
+ end
307
+
308
+ it "should remove app when yes is sent as input" do
309
+ expect { run(["yes"]) }.should exit_with_code(0)
310
+ @domain.applications.length.should == 0
311
+ end
312
+
313
+ context "with --noprompt but without --confirm" do
314
+ let(:arguments) { ['app', 'delete', 'app1', '--noprompt', '--trace'] }
315
+ it "should not remove the app" do
316
+ expect { run(["no"]) }.should raise_error(RHC::ConfirmationError)
317
+ @domain.applications.length.should == 1
318
+ end
319
+ end
320
+ context "with --noprompt and --confirm" do
321
+ let(:arguments) { ['app', 'delete', 'app1', '--noprompt', '--confirm'] }
322
+ it "should remove the app" do
323
+ expect { run }.should exit_with_code(0)
324
+ @domain.applications.length.should == 0
325
+ end
326
+ end
327
+ end
329
328
  end
330
329
  end
331
330
 
332
331
  describe 'app show' do
333
332
  let(:arguments) { ['app', 'show', 'app1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
334
333
 
335
- context 'when run' do
334
+ context 'when run with the same case as created' do
336
335
  before(:each) do
337
- @rc = MockRestClient.new
338
- @domain = @rc.add_domain("mockdomain")
336
+ FakeFS.deactivate!
337
+ @domain = rest_client.add_domain("mockdomain")
339
338
  @domain.add_application("app1", "mock_type")
340
339
  end
341
- it { run_output.should match("app1 @ https://app1-mockdomain.fake.foo/") }
340
+ it("should output an app") { run_output.should match("app1 @ https://app1-mockdomain.fake.foo/") }
341
+ it { run_output.should match(/Gears:\s+1 small/) }
342
342
  end
343
343
 
344
344
  context 'when run with scaled app' do
345
+ before(:each) do
346
+ @domain = rest_client.add_domain("mockdomain")
347
+ app = @domain.add_application("app1", "mock_type", true)
348
+ cart1 = app.add_cartridge('mock_cart-1')
349
+ cart2 = app.add_cartridge('mock_cart-2')
350
+ cart2.gear_profile = 'medium'
351
+ end
352
+ it { run_output.should match("app1 @ https://app1-mockdomain.fake.foo/") }
353
+ it { run_output.should match(/Scaling:.*x2/) }
354
+ it { run_output.should match(/Gears:\s+Located with mock_type/) }
355
+ it { run_output.should match(/Gears:\s+1 medium/) }
356
+ end
357
+ end
358
+
359
+ describe 'app show' do
360
+ let(:arguments) { ['app', 'show', 'APP1', '--noprompt', '--config', 'test.conf', '-l', 'test@test.foo', '-p', 'password'] }
361
+
362
+ context 'when run with the different case from created' do
345
363
  before(:each) do
346
364
  @rc = MockRestClient.new
347
365
  @domain = @rc.add_domain("mockdomain")
348
- @domain.add_application("app1", "mock_type",true)
366
+ @domain.add_application("app1", "mock_type")
349
367
  end
350
368
  it { run_output.should match("app1 @ https://app1-mockdomain.fake.foo/") }
351
- it { run_output.should match("Scaled x2") }
352
369
  end
353
370
  end
354
371
 
@@ -357,8 +374,7 @@ describe RHC::Commands::App do
357
374
 
358
375
  context 'when run' do
359
376
  before(:each) do
360
- @rc = MockRestClient.new
361
- @domain = @rc.add_domain("mockdomain")
377
+ @domain = rest_client.add_domain("mockdomain")
362
378
  @domain.add_application("app1", "mock_type")
363
379
  end
364
380
  it { run_output.should match("started") }
@@ -370,8 +386,7 @@ describe RHC::Commands::App do
370
386
 
371
387
  context 'when run' do
372
388
  before(:each) do
373
- @rc = MockRestClient.new
374
- @domain = @rc.add_domain("mockdomain")
389
+ @domain = rest_client.add_domain("mockdomain")
375
390
  @domain.add_application("app1", "mock_type")
376
391
  end
377
392
  it { run_output.should match("started") }
@@ -382,8 +397,7 @@ describe RHC::Commands::App do
382
397
  describe 'app actions' do
383
398
 
384
399
  before(:each) do
385
- @rc = MockRestClient.new
386
- domain = @rc.add_domain("mockdomain")
400
+ domain = rest_client.add_domain("mockdomain")
387
401
  app = domain.add_application("app1", "mock_type")
388
402
  app.add_cartridge('mock_cart-1')
389
403
  end
@@ -420,4 +434,13 @@ describe RHC::Commands::App do
420
434
  it { run_output.should match('cleaned') }
421
435
  end
422
436
  end
437
+
438
+ describe "#create_app" do
439
+ it("should list cartridges when a server error happens") do
440
+ subject.should_receive(:list_cartridges)
441
+ domain = stub
442
+ domain.stub(:add_application).and_raise(RHC::Rest::ValidationException.new('Foo', :cartridges, 109))
443
+ expect{ subject.send(:create_app, 'name', 'jenkins-1.4', domain) }.to raise_error(RHC::Rest::ValidationException)
444
+ end
445
+ end
423
446
  end